LyoKICogU3RhcnQKICogU2xvdmVuaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgUm9rIE1hbmRlbGpjIDxyb2subWFuZGVsamNAZ2ltYi5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfU0xPVkVOSUFOLCBTVUJMQU5HX0RFRkFVTFQKI3ByYWdtYSBjb2RlX3BhZ2UoODUyKQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19TTE9WRU5JQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19VU0FHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaYZ5lbmUgcHJvZ3JhbSBhbGkgb2RwcmUgZG9rdW1lbnQgcyBwcm9ncmFtb20sIGtpIG9iaehham5vIG9kcGlyYSBkb2t1bWVudGUgdGUgdnJzdGUuIFxuXApVcG9yYWJhOiBcblwKc3RhcnQgW21vnm5vc3RpXSBpbWVfcHJvZ3JhbWEgWy4uLl0gXG5cCnN0YXJ0IFttb55ub3N0aV0gaW1lX2Rva3VtZW50YSBcblwKIFxuXApNb55ub3N0aTogXG5cCi9NW2luaW1pemVkXSBaYZ5lbmUgcHJvZ3JhbSBwcm9ncmFtIHYgbWluaW1pcmFuZW0gbmHoaW51LiBcblwKL01BWFtpbWl6ZWRdIFphnmVuZSBwcm9ncmFtIHByb2dyYW0gdiBtYWtzaW1pcmFuZW0gbmHoaW51LiBcblwKL1JbZXN0b3JlZF0gIFphnmVuZSBwcm9ncmFtIHByb2dyYW0gdiBuYXZhZG5lbSBuYehpbnUgKG5lIG1pbmltaXJhbiBpbiBuZSBtYWtzaW1pcmFuKS4gXG5cCi9XW2FpdF0gICAgICBQb+hha2EsIGRhIHNlIHphZ25hbmkgcHJvZ3JhbSBrb27oYSBpbiBzZSB6YWtsanXoaSB6IG5qZWdvdm8gaXpob2RubyBrb2RvLiBcblwKL0wgICAgICAgICAgIFBva2GeIGxpY2Vu6G5vIHBvZ29kYm8uIFxuXAogXG5cCnN0YXJ0LmV4ZSByYXpsaehpY2EgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApTdGFydCBwcmloYWphIHBvcG9sbm9tYSBCUkVaIEdBUkFOQ0lKRTsgemEgcG9kcm9ibm9zdGkgdXBvcmFiaXRlIG1vnm5vc3QgL0wuIFxuXApUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0IFxuXAp1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHJ1biAnc3RhcnQgL0wnIGZvciBkZXRhaWxzLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgcmF6bGnoaWNhIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcblwKbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIFxuXAogXG5cClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXG5cCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgXG5cCkdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gXG5cCiBcblwKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBcblwKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgXG5cCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiBcblwKIFxuXApTZWUgdGhlIENPUFlJTkcuTElCIGZpbGUgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uIFxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIlByb2dyYW1hIG5pIGJpbG8gbW9nb+hlIHphZ25hdGkgYWxpIHBhIHogZGFubyB2cnN0byBkb2t1bWVudGEgbmkgcG92ZXphbiBub2JlbiBwcm9ncmFtLlxuU2hlbGxFeGVjdXRlRXggamUgc3BvZGxldGVsIgp9Cg==