LyoKICogU3RhcnQKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgRGFuIEtlZ2VsCiAqIENvcHlyaWdodCAyMDA3IE1pa29sYWogWmFsZXdza2kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXJ1Y2hhbWlhIHByb2dyYW0gbHViIG90d2llcmEgZG9rdW1lbnQgdyBwcm9ncmFtaWUga3TzcnkgamVzdCB6d3lrbGUgdb95dHdhbnkgZGxhIHRlZ28gcm96c3plcnplbmlhLiBcblwKVb95Y2llOiBcblwKc3RhcnQgW29wY2plXSBuYXp3YV9wcm9ncmFtdSBbLi4uXSBcblwKc3RhcnQgW29wY2plXSBuYXp3YV9kb2t1bWVudHUgXG5cCiBcblwKT3BjamU6IFxuXAovTVtpbmltaXplZF0gVXJ1Y2hhbWlhIHByb2dyYW0gem1pbmltYWxpem93YW55LiBcblwKL01BWFtpbWl6ZWRdIFVydWNoYW1pYSBwcm9ncmFtIHptYWtzeW1hbGl6b3dhbnkuIFxuXAovUltlc3RvcmVkXSAgVXJ1Y2hhbWlhIHByb2dyYW0gbm9ybWFsbmllIChiZXogbWluaW1hbGl6YWNqaSBhbmkgbWFrc3ltYWxpemFjamkpLiBcblwKL1dbYWl0XSAgICAgIFphY3pla2FqIGG/IHByb2dyYW0gemFrb/FjenkgZHppYbNhbmllIChpIHpha2/xY3pcblwKXHQgICAgIGtvZGVtIHd5apxjaWEgcHJvZ3JhbXUpLiBcblwKL0wgICAgICAgICAgIFBva2G/IGxpY2VuY2rqIHW/eXRrb3duaWthLiBcblwKIFxuXApzdGFydC5leGUgd2Vyc2phIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKU3RhcnQgamVzdCBkb3N0YXJjemFueSBCRVogr0FETkVKIEdXQVJBTkNKSTsgc3pjemVn87N5IHcgb3BjarkgL0wuIFxuXApUbyBqZXN0IHdvbG5lIG9wcm9ncmFtb3dhbmllIGkgbW+/ZXN6IGplIHJvenBvd3N6ZWNobmlh5iAocG9kIHBld255bWlcblwKd2FydW5rYW1pKTsgdXJ1Y2hvbSAnc3RhcnQgL0wnIGFieSBwb3puYeYgc3pjemVn87N5LiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgd2VzamEgMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIFxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIFxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gXG5cCiBcblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBcblwKR05VIExlc3NlciBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiBcblwKIFxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIFxuXAphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBcblwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gXG5cCiBcblwKU2VlIHRoZSBDT1BZSU5HLkxJQiBmaWxlIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJOaWUgdWRhs28gc2nqIHVydWNobWnmIGFwbGlrYWNqaSBsdWIgbmllIG1hIGFwbGlrYWNqaSBza29qYXJ6b25laiB6IGRhbnltIHBsaWtpZW0uXG5TaGVsbEV4ZWN1dGVFeCBuaWUgcG93aW9ks28gc2nqIgp9Cg==