ZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9SZWFkTWUudHh0IGIvc3RydXRzMmV4YW1wbGVzL1JlYWRNZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjYyY2YuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL1JlYWRNZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1UaGlzIE1hdmVuIG11bHRpLW1vZHVsZSBwcm9qZWN0IGNvbnRhaW5zIGFsbCB0aGUgU3RydXRzIDIKLWV4YW1wbGUgYXBwbGljYXRpb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIEdldHRpbmcgU3RhcnRlZAotU3RydXRzIDIgdHV0b3JpYWxzIGF0IGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgYWxsIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9ucyBydW4gdGhlIE1hdmVuIGNvbW1hbmQ6Ci1tdm4gLWUgY2xlYW4gcGFja2FnZSBpbiB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLiAgTWF2ZW4gCi13aWxsIHRoZSBidWlsZCBlYWNoIG1vZHVsZSBhbmQgY3JlYXRlIGEgLndhciBmaWxlIGluIHRoZQotdGFyZ2V0IHN1Yi1mb2xkZXIgb2YgZWFjaCBtb2R1bGUuCi0KLVlvdSBjYW4gdGhlbiBjb3B5IHRoZSAud2FyIGZpbGVzIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIKLShlLmcuIFRvbWNhdCwgSmV0dHksIEdsYXNzRmlzaCwgZXRjKS4KLQotVGhlcmUgaXMgYSBSZWFkTWUudHh0IGZpbGUgaW4gZWFjaCBtb2R1bGUgd2l0aCBpbnN0cnVjdGlvbnMgCi10aGUgVVJMIHRvIHZpZXcgdGhhdCBhcHBsaWNhdGlvbi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWI2ZWIwLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotVGhpcyBpcyB0aGUgZXhhbXBsZSBwcm9qZWN0IHJlZmVycmVkIHRvIGluIHRoZQotU3RydXRzIDIgZG9jdW1lbnRhdGlvbiwgQW5ub3RhdGlvbnMgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvYW5ub3RhdGlvbnMvaW5kZXguanNwIAotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM5NjQ0OS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIgotCXhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQk8cGFyZW50PgotCQk8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+c3RydXRzMmV4YW1wbGVzPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPmFubm90YXRpb25zPC9hcnRpZmFjdElkPgotCi0JPG5hbWU+YW5ub3RhdGlvbnM8L25hbWU+Ci0KLQk8ZGVzY3JpcHRpb24+QW5ub3RhdGlvbnMgZXhhbXBsZSBhcHBsaWNhdGlvbiBmb3IgdGhlIAotICBTdHJ1dHMgMiBnZXR0aW5nIHN0YXJ0ZWQgdHV0b3JpYWxzPC9kZXNjcmlwdGlvbj4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCTxidWlsZD4KLQkJPGZpbmFsTmFtZT5hbm5vdGF0aW9uczwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0KLQk8ZGVwZW5kZW5jaWVzPgotCi0KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnN0cnV0czwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnN0cnV0czItY29udmVudGlvbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4ke3N0cnV0czIudmVyc2lvbn08L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KLQk8L2RlcGVuZGVuY2llcz4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL2phdmEvZXhhbXBsZS9hY3Rpb25zL0hlbGxvQWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vamF2YS9leGFtcGxlL2FjdGlvbnMvSGVsbG9BY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNmN2VhYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vamF2YS9leGFtcGxlL2FjdGlvbnMvSGVsbG9BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLXBhY2thZ2UgZXhhbXBsZS5hY3Rpb25zOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7Ci0KLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIEhlbGxvQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIEhlbGxvQWN0aW9uLmNsYXNzLmdldE5hbWUoKSApOwotCQotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7Ci0JCi0JCQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJbG9nZ2VyLmluZm8oIkluIGV4ZWN1dGUgbWV0aG9kIG9mIGNsYXNzIEhlbGxvIik7Ci0JCQotCQltZXNzYWdlID0gIkhlbGxvIGZyb20gU3RydXRzIDIgd2l0aCBubyBYTUwgY29uZmlndXJhdGlvbi4iOwotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQotCX0KLQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgewotCQl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCX0KLQotCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlyZXR1cm4gbWVzc2FnZTsKLQl9Ci0JCi0KLQotCQotCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvYWN0aW9ucy9SZWdpc3RlckFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL2phdmEvZXhhbXBsZS9hY3Rpb25zL1JlZ2lzdGVyQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZDE5ZWUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL2phdmEvZXhhbXBsZS9hY3Rpb25zL1JlZ2lzdGVyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1wYWNrYWdlIGV4YW1wbGUuYWN0aW9uczsKLQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb252ZW50aW9uLmFubm90YXRpb24uQWN0aW9uOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotaW1wb3J0IGV4YW1wbGUubW9kZWwuUGVyc29uOwotCi0vKioKLSAqIEFjdHMgYXMgYSBjb250cm9sbGVyIHRvIGhhbmRsZSBhY3Rpb25zCi0gKiByZWxhdGVkIHRvIHJlZ2lzdGVyaW5nIGEgdXNlci4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RlckFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBSZWdpc3RlckFjdGlvbi5jbGFzcy5nZXROYW1lKCkgKTsKLQkKLQlwcml2YXRlIFBlcnNvbiBwZXJzb25CZWFuOwotCQotCUBBY3Rpb24oInJlZ2lzdGVyLWlucHV0IikKLQlwdWJsaWMgU3RyaW5nIGlucHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJbG9nZ2VyLmluZm8oIkluIGlucHV0IG1ldGhvZCBvZiBjbGFzcyBSZWdpc3RlckFjdGlvbiIpOwotCQkKLQkJcmV0dXJuIElOUFVUOwotCi0JfQotCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlsb2dnZXIuaW5mbygiSW4gZXhlY3V0ZSBtZXRob2Qgb2YgY2xhc3MgUmVnaXN0ZXJBY3Rpb24iKTsKLQkJCi0JCS8vY2FsbCBTZXJ2aWNlIGNsYXNzIHRvIHN0b3JlIHBlcnNvbkJlYW4ncyBzdGF0ZSBpbiBkYXRhYmFzZQotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQotCX0KLQkKLQotCi0JCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCQkKLQkJcmV0dXJuIHBlcnNvbkJlYW47Ci0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQZXJzb25CZWFuKFBlcnNvbiBwZXJzb24pIHsKLQkJCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL2phdmEvZXhhbXBsZS9tb2RlbC9QZXJzb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi9qYXZhL2V4YW1wbGUvbW9kZWwvUGVyc29uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMGY5ZWYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL2phdmEvZXhhbXBsZS9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLXBhY2thZ2UgZXhhbXBsZS5tb2RlbDsKLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIGludCBhZ2U7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZW1haWwgPSBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFnZSggaW50IGFnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWdlID0gYWdlOwotICAgIH0KLQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAKLSAgICAgICAgIiBFbWFpbDogICAgICAiICsgZ2V0RW1haWwoKSArICIgQWdlOiAgICAgICIgKyBnZXRBZ2UoKSA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9jb250ZW50L2hlbGxvLXN1Y2Nlc3MuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2NvbnRlbnQvaGVsbG8tc3VjY2Vzcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMTE5YmUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2NvbnRlbnQvaGVsbG8tc3VjY2Vzcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5IZWxsbzwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMz48czpwcm9wZXJ0eSB2YWx1ZT0ibWVzc2FnZSIgLz48L2gzPgotCi0KLQotPHA+PGEgaHJlZj0iaW5kZXguanNwIiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2NvbnRlbnQvcmVnaXN0ZXItaW5wdXQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2NvbnRlbnQvcmVnaXN0ZXItaW5wdXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjY1NjJmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9jb250ZW50L3JlZ2lzdGVyLWlucHV0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdGVyPC90aXRsZT4KLTxzOmhlYWQgLz4KLTwvaGVhZD4KLTxib2R5PgotPGgzPlJlZ2lzdGVyIGZvciBhIHByaXplIGJ5IGNvbXBsZXRpbmcgdGhpcyBmb3JtLjwvaDM+Ci0KLTxzOmZvcm0gYWN0aW9uPSJyZWdpc3RlciIgPgotCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZmlyc3ROYW1lIiBsYWJlbD0iRmlyc3QgbmFtZSIgLz4KLSAJICA8czp0ZXh0ZmllbGQgIG5hbWU9InBlcnNvbkJlYW4ubGFzdE5hbWUiIGxhYmVsPSJMYXN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZW1haWwiICBsYWJlbCA9IkVtYWlsIi8+ICAKLSAJICA8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uQmVhbi5hZ2UiICBsYWJlbD0iQWdlIiAgLz4KLSAJICAKLSAgIAkgIDxzOnN1Ym1pdC8+Ci0gICAJICAKLTwvczpmb3JtPgkKLSAKLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvY29udGVudC9yZWdpc3Rlci1zdWNjZXNzLmpzcCBiL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9jb250ZW50L3JlZ2lzdGVyLXN1Y2Nlc3MuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzRmMGFkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9hbm5vdGF0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9jb250ZW50L3JlZ2lzdGVyLXN1Y2Nlc3MuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0cmF0aW9uIFN1Y2Nlc3NmdWw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+VGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBmb3IgYSBwcml6ZS48L2gzPgotCi08cD5Zb3VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iaW5kZXguanNwIiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlZDUxNS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmFubm90YXRpb25zPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0KLQotCTxmaWx0ZXI+Ci0JCTxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLQkJPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLQkJPGluaXQtcGFyYW0+Ci0JCQk8cGFyYW0tbmFtZT5zdHJ1dHMuZGV2TW9kZTwvcGFyYW0tbmFtZT4KLQkJCTxwYXJhbS12YWx1ZT50cnVlPC9wYXJhbS12YWx1ZT4KLQkJPC9pbml0LXBhcmFtPgotCTwvZmlsdGVyPgotCi0JPGZpbHRlci1tYXBwaW5nPgotCQk8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPC9maWx0ZXItbWFwcGluZz4KLQotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Fubm90YXRpb25zL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5NTExZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYW5ub3RhdGlvbnMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5CYXNpYyBTdHJ1dHMgMiBBcHBsaWNhdGlvbiAtIFdlbGNvbWU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+V2VsY29tZSBUbyBTdHJ1dHMgMiE8L2gxPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdoZWxsbycgIC8+IiA+R2V0IHlvdXIgaGVsbG8uPC9hPjwvcD4KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J3JlZ2lzdGVyLWlucHV0JyAgLz4iID4gUmVnaXN0ZXIgZm9yIHRoZSBkcmF3aW5nLjwvYT48L3A+Ci0KLQotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTUyMTczLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFJlYWR5LCBTZXQsIEdvIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9iYXNpY19zdHJ1dHMvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODk0NzFlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0gIDxhcnRpZmFjdElkPmJhc2ljX3N0cnV0czwvYXJ0aWZhY3RJZD4KLSAgPG5hbWU+YmFzaWNfc3RydXRzPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+QmFzaWMgU3RydXRzIDIgZXhhbXBsZSBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+Ci0gIAotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotCTxidWlsZD4KLQkJPGZpbmFsTmFtZT5iYXNpY19zdHJ1dHM8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmFzaWNfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvYmFzaWNfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWJkOTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMGNiMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYmFzaWNfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzMiI+Ci0gICAgCSA8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotICAKLSAgIDwhLS0gZm9yIGFsbCBvdGhlciBsb2dnZXJzIGxvZyBvbmx5IGRlYnVnIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+Ci0gICAgIDxyb290PgotICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4gCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IAotICAgICA8L3Jvb3Q+IAotICAgIAotPC9sb2c0ajpjb25maWd1cmF0aW9uPiAKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOWI5MjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzJjZDRmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iYXNpY19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotPGRpc3BsYXktbmFtZT5CYXNpYyBTdHJ1dHMyPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmFzaWNfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvYmFzaWNfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MzI5YmUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Jhc2ljX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZGU3Mjc3Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIEJlYW4gVmFsaWRhdGlvbiB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLVRoZSB3YXIgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSB0YXJnZXQgc3ViLWZvbGRlci4KLQotQ29weSB0aGUgd2FyIGZpbGUgdG8geW91ciBTZXJ2bGV0IGNvbnRhaW5lciAoZS5nLiBUb21jYXQsIEdsYXNzRmlzaCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9iZWFuX3ZhbGlkYXRpb24vaW5kZXguYWN0aW9uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZkMzY1YWUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0JPHBhcmVudD4KLQkJPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0JPC9wYXJlbnQ+Ci0JPGFydGlmYWN0SWQ+YmVhbl92YWxpZGF0aW9uPC9hcnRpZmFjdElkPgotCi0JPG5hbWU+QmVhbiBWYWxpZGF0aW9uPC9uYW1lPgotCTxkZXNjcmlwdGlvbj5iZWFuIChKU1IgMzAzKSB2YWxpZGF0aW9uIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCi0JPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmJlYW5fdmFsaWRhdGlvbjwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0JPGRlcGVuZGVuY2llcz4KLQotCi0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmhpYmVybmF0ZTwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPmhpYmVybmF0ZS12YWxpZGF0b3I8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj40LjMuMS5GaW5hbDwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCi0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+Y29tLmdpdGh1Yi51bWVzaGF3YXN0aGk8L2dyb3VwSWQ+Ci0JCQk8YXJ0aWZhY3RJZD5zdHJ1dHMyLWpzcjMwMy12YWxpZGF0aW9uLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCi0JPC9kZXBlbmRlbmNpZXM+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZGZlNjAxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgudmFsaWRhdGlvbi5WYWxpZDsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuU3RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkVkaXRTZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZUluTWVtb3J5OwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgY29udHJvbGxlciB0byBoYW5kbGUgYWN0aW9ucwotICogcmVsYXRlZCB0byBlZGl0aW5nIGEgUGVyc29uLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIEVkaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb25TdXBwb3J0IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQlwcml2YXRlIEVkaXRTZXJ2aWNlIGVkaXRTZXJ2aWNlID0gbmV3IEVkaXRTZXJ2aWNlSW5NZW1vcnkoKTsKLQkKLQlAVmFsaWQKLQlwcml2YXRlIFBlcnNvbiBwZXJzb25CZWFuOwotCQotCXByaXZhdGUgU3RyaW5nIFtdIHNwb3J0cyA9IHsiZm9vdGJhbGwiLCAiYmFzZWJhbGwiLCAiYmFza2V0YmFsbCIgfTsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBnZW5kZXJzID0geyJtYWxlIiwgImZlbWFsZSIsICJub3Qgc3VyZSIgfTsKLQkKLQlwcml2YXRlIExpc3Q8U3RhdGU+IHN0YXRlcyA7Ci0KLQlwcml2YXRlIFN0cmluZyBbXSBjYXJNb2RlbHNBdmFpbGFibGUgPSB7IkZvcmQiLCJDaHJ5c2xlciIsIlRveW90YSIsIk5pc3NhbiJ9OwotCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCSAgICBlZGl0U2VydmljZS5zYXZlUGVyc29uKCBnZXRQZXJzb25CZWFuKCkgKTsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCQkKLQl9Ci0JCi0JCi0JcHVibGljIFN0cmluZyBpbnB1dCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJc2V0UGVyc29uQmVhbiggZWRpdFNlcnZpY2UuZ2V0UGVyc29uKCkgKTsKLQkJCi0JCXJldHVybiBJTlBVVDsKLQl9Ci0JCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCQkKLQkJCi0JCXJldHVybiBwZXJzb25CZWFuOwotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGVyc29uQmVhbihQZXJzb24gcGVyc29uKSB7Ci0JCQotCQlwZXJzb25CZWFuID0gcGVyc29uOwotCQkKLQl9Ci0KLQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0U3BvcnRzKCkgewotCQlyZXR1cm4gQXJyYXlzLmFzTGlzdChzcG9ydHMpOwotCX0KLQkKLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEdlbmRlcnMoKSB7Ci0JCQotCQlyZXR1cm4gQXJyYXlzLmFzTGlzdChnZW5kZXJzKTsKLQkJCi0JfQotCi0KLQotCXB1YmxpYyBMaXN0PFN0YXRlPiBnZXRTdGF0ZXMoKSB7Ci0JCQotCQlzdGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFN0YXRlPigpOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkFaIiwgIkFyaXpvbmEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkNBIiwgIkNhbGlmb3JuaWEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkZMIiwgIkZsb3JpZGEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIktTIiwgIkthbnNhcyIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiTlkiLCAiTmV3IFlvcmsiKSApOwotCQkKLQkJcmV0dXJuIHN0YXRlczsKLQl9Ci0KLQotCi0JcHVibGljIFN0cmluZyBbXSBnZXRDYXJNb2RlbHNBdmFpbGFibGUoKSB7Ci0JCXJldHVybiBjYXJNb2RlbHNBdmFpbGFibGU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkZmRjNDY1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLlBhdHRlcm47Ci1pbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5TaXplOwotCi1pbXBvcnQgb3JnLmhpYmVybmF0ZS52YWxpZGF0b3IuY29uc3RyYWludHMuRW1haWw7Ci1pbXBvcnQgb3JnLmhpYmVybmF0ZS52YWxpZGF0b3IuY29uc3RyYWludHMuTm90Qmxhbms7Ci1pbXBvcnQgb3JnLmhpYmVybmF0ZS52YWxpZGF0b3IuY29uc3RyYWludHMuTm90RW1wdHk7Ci0KLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotCQotCUBOb3RCbGFuayhtZXNzYWdlPSJmaXJzdE5hbWUucmVxdWlyZWQiKQotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLQkKLQlATm90QmxhbmsobWVzc2FnZT0ibGFzdE5hbWUucmVxdWlyZWQiKQotICAgIHByaXZhdGUgU3RyaW5nIGxhc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIHNwb3J0OwotICAgIHByaXZhdGUgU3RyaW5nIGdlbmRlcjsKLSAgICBwcml2YXRlIFN0cmluZyByZXNpZGVuY3k7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG92ZXIyMTsKLSAgICAKLSAgICBATm90RW1wdHkobWVzc2FnZT0iY2FyTW9kZWxzLnJlcXVpcmVkIikKLSAgICBwcml2YXRlIFN0cmluZyBbXSBjYXJNb2RlbHM7Ci0gICAgCi0gICAgQFNpemUobWluPTEsIG1lc3NhZ2U9ImVtYWlsLnJlcXVpcmVkIikKLSAgICBARW1haWwobWVzc2FnZT0iZW1haWwuZm9ybWF0IikKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICAKLSAgICBAUGF0dGVybihyZWdleHA9IlxcZHszfS1cXGR7M30tXFxkezR9IiwgbWVzc2FnZT0icGhvbmVOdW1iZXIucmVxdWlyZWQiKQotICAgIHByaXZhdGUgU3RyaW5nIHBob25lTnVtYmVyOwotICAgCi0gCi0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotCi0KLQotCXB1YmxpYyB2b2lkIHNldFNwb3J0KFN0cmluZyBzcG9ydCkgewotCQl0aGlzLnNwb3J0ID0gc3BvcnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0R2VuZGVyKFN0cmluZyBnZW5kZXIpIHsKLQkJdGhpcy5nZW5kZXIgPSBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRHZW5kZXIoKSB7Ci0JCXJldHVybiBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHsKLQkJcmV0dXJuIHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc2lkZW5jeShTdHJpbmcgcmVzaWRlbmN5KSB7Ci0JCXRoaXMucmVzaWRlbmN5ID0gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVzaWRlbmN5KCkgewotCQlyZXR1cm4gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE92ZXIyMShib29sZWFuIG92ZXIyMSkgewotCQl0aGlzLm92ZXIyMSA9IG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc092ZXIyMSgpIHsKLQkJcmV0dXJuIG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYXJNb2RlbHMoU3RyaW5nIFtdIGNhck1vZGVscykgewotCQl0aGlzLmNhck1vZGVscyA9IGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIFtdIGdldENhck1vZGVscygpIHsKLQkJcmV0dXJuIGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiRmlyc3QgTmFtZTogIiArIGdldEZpcnN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIExhc3QgTmFtZTogICIgKyBnZXRMYXN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIEZhdm9yaXRlIFNwb3J0OiAiICsgZ2V0U3BvcnQoKSArICIgfCAiICsKLSAgICAgICAgIiBHZW5kZXI6ICIgKyBnZXRHZW5kZXIoKSArICIgfCAiICsgIAotICAgICAgICAiIFJlc2lkZW5jeTogIiArIGdldFJlc2lkZW5jeSgpICsgIiB8ICIgKwotICAgICAgICAiIE92ZXIgMjE6ICIgKyBpc092ZXIyMSgpICArICIgfCAiICsKLSAgICAgICAgIiBDYXIgbW9kZWxzOiAiICsgQXJyYXlzLmFzTGlzdCggZ2V0Q2FyTW9kZWxzKCkgKSArICIgfCAiICsKLSAgICAgICAgIiBFbWFpbDogIiArIGdldEVtYWlsKCkgKyAiIHwgIiArCi0gICAgICAgICIgUGhvbmU6ICIgKyBnZXRQaG9uZU51bWJlcigpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgfQotCi0JcHVibGljIHZvaWQgc2V0RW1haWwoU3RyaW5nIGVtYWlsKSB7Ci0JCXRoaXMuZW1haWwgPSBlbWFpbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEVtYWlsKCkgewotCQlyZXR1cm4gZW1haWw7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGhvbmVOdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyKSB7Ci0JCXRoaXMucGhvbmVOdW1iZXIgPSBwaG9uZU51bWJlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBob25lTnVtYmVyKCkgewotCQlyZXR1cm4gcGhvbmVOdW1iZXI7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYjkyN2UxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdGF0ZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdGVBYmJyOwotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlTmFtZTsKLQkKLQlwdWJsaWMgU3RhdGUgKFN0cmluZyBzdGF0ZUFiYnIsIFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJCi0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCQl0aGlzLnN0YXRlTmFtZSA9IHN0YXRlTmFtZTsKLQkJCi0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVBYmJyKFN0cmluZyBzdGF0ZUFiYnIpIHsKLQkJdGhpcy5zdGF0ZUFiYnIgPSBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZUFiYnIoKSB7Ci0JCXJldHVybiBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVOYW1lKFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZU5hbWUoKSB7Ci0JCXJldHVybiBzdGF0ZU5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQotCQlyZXR1cm4gZ2V0U3RhdGVBYmJyKCkgOwotCQkKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjUyZTA1My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247DQotDQotcHVibGljIGludGVyZmFjZSBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JUGVyc29uIGdldFBlcnNvbigpIDsNCi0NCi0Jdm9pZCBzYXZlUGVyc29uKFBlcnNvbiBwZXJzb25CZWFuKTsNCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGZkMzVlMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLQ0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi0vKioNCi0gKiBJbXBsZW1lbnQgU2VydmljZXMgbmVlZGVkIHRvIGVkaXQgYW5kIHNhdmUNCi0gKiBhIFBlcnNvbiBvYmplY3QncyBzdGF0ZS4gIEluIHRoaXMgaW1wbGVtZW50YXRpb24NCi0gKiB0aGUgUGVyc29uIG9iamVjdCdzIHN0YXRlIGlzIHN0b3JlZCBpbiBtZW1vcnkNCi0gKiBAYXV0aG9yIGJydWNlcGhpbGxpcHMNCi0gKg0KLSAqLw0KLQ0KLXB1YmxpYyBjbGFzcyBFZGl0U2VydmljZUluTWVtb3J5IGltcGxlbWVudHMgRWRpdFNlcnZpY2Ugew0KLQkNCi0JDQotCXByaXZhdGUgc3RhdGljIFBlcnNvbiBwZXJzb24gOw0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgW10gY2FyTW9kZWxzID0geyJGb3JkIiwiTmlzc2FuIn07DQotDQotCQ0KLQlzdGF0aWMgew0KLQkJDQotCQlwZXJzb24gPSBuZXcgUGVyc29uKCk7DQotCQlwZXJzb24uc2V0Rmlyc3ROYW1lKCJCcnVjZSIpOw0KLQkJcGVyc29uLnNldExhc3ROYW1lKCJQaGlsbGlwcyIpOw0KLQkJcGVyc29uLnNldEVtYWlsKCJicGhpbGxpcHNAa3UuZWR1Iik7DQotCQlwZXJzb24uc2V0U3BvcnQoImJhc2tldGJhbGwiKTsNCi0JCXBlcnNvbi5zZXRHZW5kZXIoIm5vdCBzdXJlIik7DQotCQlwZXJzb24uc2V0UmVzaWRlbmN5KCJLUyIpOw0KLQkJcGVyc29uLnNldE92ZXIyMSh0cnVlKTsJCQ0KLQkJcGVyc29uLnNldENhck1vZGVscyggY2FyTW9kZWxzKTsJDQotCQlwZXJzb24uc2V0UGhvbmVOdW1iZXIoIjEyMy00NTYtOTk5OSIpOw0KLQ0KLQkJDQotDQotCX0NCi0NCi0JDQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uKCkgew0KLQkJDQotCQlyZXR1cm4gRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb247DQotCX0NCi0NCi0NCi0JcHVibGljIHZvaWQgc2F2ZVBlcnNvbihQZXJzb24gcGVyc29uQmVhbikgew0KLQ0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0Rmlyc3ROYW1lKHBlcnNvbkJlYW4uZ2V0Rmlyc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldExhc3ROYW1lKHBlcnNvbkJlYW4uZ2V0TGFzdE5hbWUoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0U3BvcnQocGVyc29uQmVhbi5nZXRTcG9ydCgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRHZW5kZXIoIHBlcnNvbkJlYW4uZ2V0R2VuZGVyKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFJlc2lkZW5jeSggcGVyc29uQmVhbi5nZXRSZXNpZGVuY3koKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0T3ZlcjIxKCBwZXJzb25CZWFuLmlzT3ZlcjIxKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldENhck1vZGVscyhwZXJzb25CZWFuLmdldENhck1vZGVscygpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRFbWFpbCggcGVyc29uQmVhbi5nZXRFbWFpbCgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRQaG9uZU51bWJlciggcGVyc29uQmVhbi5nZXRQaG9uZU51bWJlcigpICk7DQotDQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkIGIvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcyBiL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTY3YjllZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1GaXJzdCBuYW1lDQotcGVyc29uQmVhbi5sYXN0TmFtZT1MYXN0IG5hbWUNCi1wZXJzb25CZWFuLmVtYWlsPUVtYWlsIGFkZHJlc3MNCi1wZXJzb25CZWFuLnBob25lTnVtYmVyPVBob25lIG51bWJlciAoOTk5LTk5OS05OTk5KQ0KLXBlcnNvbkJlYW4uc3BvcnQ9RmF2b3JpdGUgc3BvcnQNCi1wZXJzb25CZWFuLmdlbmRlcj1HZW5kZXINCi1wZXJzb25CZWFuLnJlc2lkZW5jeT1TdGF0ZSByZXNpZGVudA0KLXBlcnNvbkJlYW4ub3ZlcjIxPTIxIG9yIG9sZGVyDQotcGVyc29uQmVhbi5jYXJNb2RlbHM9Q2FyIG1vZGVscyBvd25lZA0KLXN1Ym1pdD1TYXZlIENoYW5nZXMNCi1maXJzdE5hbWUucmVxdWlyZWQ9WW91IG11c3QgZW50ZXIgdGhlIGZpcnN0IG5hbWUNCi1sYXN0TmFtZS5yZXF1aXJlZD1Zb3UgbXVzdCBlbnRlciB0aGUgbGFzdCBuYW1lDQotZW1haWwucmVxdWlyZWQ9WW91IG11c3QgZW50ZXIgYW4gZW1haWwgYWRkcmVzcw0KLXBob25lTnVtYmVyLnJlcXVpcmVkPVlvdSBtdXN0IGVudGVyIGEgcGhvbmUgbnVtYmVyIGluIGZvcm1hdCA5OTktOTk5LTk5OTkNCi1lbWFpbC5mb3JtYXQ9RW1haWwgYWRkcmVzcyBub3QgaW4gYSB2YWxpZCBlbWFpbCBmb3JtYXQNCi1jYXJNb2RlbHMucmVxdWlyZWQ9WW91IG11c3Qgc2VsZWN0IGF0IGxlYXN0IG9uZSBjYXIgbW9kZWwNCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjM2MjEwNC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImRlZmF1bHQiIGV4dGVuZHM9ImpzcjMwMyI+Ci0gICAgCTxkZWZhdWx0LWludGVyY2VwdG9yLXJlZiBuYW1lPSJqc3IzMDNWYWxpZGF0aW9uU3RhY2siLz4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiPi9lZGl0LmpzcDwvcmVzdWx0PgotCSAgICAJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vdGhhbmt5b3UuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCi0JPC9wYWNrYWdlPgotCi08L3N0cnV0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM5MmQwMzAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPkpTUjMwM19WYWxpZGF0aW9uX1N0cnV0czJfTXZuPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcCBiL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2N2E5OTAxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9iZWFuX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxzOmhlYWQgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlN0cnV0cyAyIEZvcm0gVGFncyAtIEVkaXQgUGVyc29uPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPlVwZGF0ZSBJbmZvcm1hdGlvbjwvaDE+Ci0KLTxwPlVzZSB0aGUgZm9ybSBiZWxvdyB0byBlZGl0IHlvdXIgaW5mb3JtYXRpb24uPC9wPgotCi08czpmb3JtIGFjdGlvbj0ic2F2ZSIgbWV0aG9kPSJwb3N0Ij4KLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uZmlyc3ROYW1lIiAvPiAKLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4ubGFzdE5hbWUiIC8+IAotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5lbWFpbCIgLz4KLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4ucGhvbmVOdW1iZXIiIC8+Ci08czpzZWxlY3Qga2V5PSJwZXJzb25CZWFuLnNwb3J0IiBsaXN0PSJzcG9ydHMiIC8+Ci08czpyYWRpbyBrZXk9InBlcnNvbkJlYW4uZ2VuZGVyIiBsaXN0PSJnZW5kZXJzIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5yZXNpZGVuY3kiIGxpc3Q9InN0YXRlcyIgbGlzdEtleT0ic3RhdGVBYmJyIiBsaXN0VmFsdWU9InN0YXRlTmFtZSIgLz4KLTxzOmNoZWNrYm94IGtleT0icGVyc29uQmVhbi5vdmVyMjEiIC8+Ci08czpjaGVja2JveGxpc3Qga2V5PSJwZXJzb25CZWFuLmNhck1vZGVscyIgbGlzdD0iY2FyTW9kZWxzQXZhaWxhYmxlIiAvPgotPHM6c3VibWl0IGtleT0ic3VibWl0IiAvPgotPC9zOmZvcm0+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDg4MjA5ZDguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlN0cnV0cyAyIEZvcm0gVGFncyAtIFdlbGNvbWU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+V2VsY29tZSBUbyBTdHJ1dHMgMiE8L2gxPgotCi08cD48YSBocmVmPSc8czp1cmwgYWN0aW9uPSJlZGl0IiAvPicgPkVkaXQgeW91ciBpbmZvcm1hdGlvbjwvYT48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvYmVhbl92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDVmYTMwNmYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2JlYW5fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+VXBkYXRlIFN1Y2Nlc3NmdWw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxoMT5VcGRhdGVkIEluZm9ybWF0aW9uPC9oMT4KLQotCi08cD5Zb3VyIGluZm9ybWF0aW9uOiA8czpwcm9wZXJ0eSB2YWx1ZT0icGVyc29uQmVhbiIgLz4gPC9wPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjIwZjg2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotVGhpcyBpcyB0aGUgZXhhbXBsZSBwcm9qZWN0IHJlZmVycmVkIHRvIGluIHRoZQotU3RydXRzIDIgZG9jdW1lbnRhdGlvbiwgQ29kaW5nIEFjdGlvbnMgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvY29kaW5nX2FjdGlvbnMvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkNWMzYS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+Y29kaW5nX2FjdGlvbnM8L2FydGlmYWN0SWQ+Ci0KLSAgPG5hbWU+Q29kaW5nIFN0cnV0cyAyIEFjdGlvbjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlN0cnV0cyAyIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSBHZXR0aW5nCi0gIFN0YXJ0ZWQgY29kaW5nIFN0cnV0cyAyIGFjdGlvbnM8L2Rlc2NyaXB0aW9uPgotICAKLSAgICA8YnVpbGQ+Ci0JCTxmaW5hbE5hbWU+Y29kaW5nX2FjdGlvbnM8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCi0gICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZGE0OS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5tb2RlbC5NZXNzYWdlU3RvcmU7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotCi0vKioKLSAqIEFjdHMgYXMgYSBTdHJ1dHMgMiBjb250cm9sbGVyIHRoYXQgcmVzcG9uZHMKLSAqIHRvIGEgdXNlciBhY3Rpb24gYnkgc2V0dGluZyB0aGUgdmFsdWUKLSAqIG9mIHRoZSBNZXNzYWdlIG1vZGVsIGNsYXNzLCBhbmQgcmV0dXJucyBhIFN0cmluZyAKLSAqIHJlc3VsdC4KLSAqIEBhdXRob3IgQnJ1Y2UgUGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQkvKioKLQkgKiBUaGUgbW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgdGhlIG1lc3NhZ2UKLQkgKiB0byBkaXNwbGF5IGluIHRoZSB2aWV3LgotCSAqLwotCXByaXZhdGUgTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZTsKLQkKLQlwcml2YXRlIHN0YXRpYyBpbnQgaGVsbG9Db3VudCA9IDA7Ci0JCi0JcHVibGljIGludCBnZXRIZWxsb0NvdW50KCkgewotCQlyZXR1cm4gaGVsbG9Db3VudDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRIZWxsb0NvdW50KGludCBoZWxsb0NvdW50KSB7Ci0JCUhlbGxvV29ybGRBY3Rpb24uaGVsbG9Db3VudCA9IGhlbGxvQ291bnQ7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHVzZXJOYW1lOwotCi0JcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHsKLQkJcmV0dXJuIHVzZXJOYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFVzZXJOYW1lKFN0cmluZyB1c2VyTmFtZSkgewotCQl0aGlzLnVzZXJOYW1lID0gdXNlck5hbWU7Ci0JfQotCi0JLyoKLQkgKiBDcmVhdGVzIHRoZSBNZXNzYWdlU3RvcmUgbW9kZWwgb2JqZWN0LCAKLQkgKiBpbmNyZWFzZSBoZWxsb0NvdW50IGJ5IDEgYW5kIAotCSAqIHJldHVybnMgc3VjY2Vzcy4gIFRoZSBNZXNzYWdlU3RvcmUgbW9kZWwKLQkgKiBvYmplY3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHZpZXcuCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydCNleGVjdXRlKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCW1lc3NhZ2VTdG9yZSA9IG5ldyBNZXNzYWdlU3RvcmUoKSA7Ci0JCQotCQkvL0FjdGlvbiBpbmNsdWRlZCBhIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXIgb2YgdXNlck5hbWUKLQkJLy9vciBhIGZvcm0gZmllbGQgd2l0aCBuYW1lIG9mIHVzZXJOYW1lCi0JCWlmICh1c2VyTmFtZSAhPSBudWxsKSB7Ci0JCQkKLQkJCW1lc3NhZ2VTdG9yZS5zZXRNZXNzYWdlKCBtZXNzYWdlU3RvcmUuZ2V0TWVzc2FnZSgpICsgIiAiICsgdXNlck5hbWUpOwotCQkJCi0JCX0KLQkJCi0JCWhlbGxvQ291bnQrKzsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCX0KLQotCXB1YmxpYyBNZXNzYWdlU3RvcmUgZ2V0TWVzc2FnZVN0b3JlKCkgewotCQlyZXR1cm4gbWVzc2FnZVN0b3JlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2VTdG9yZShNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlKSB7Ci0JCXRoaXMubWVzc2FnZVN0b3JlID0gbWVzc2FnZVN0b3JlOwotCX0KLQkKLQkKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZmNlZWIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5tb2RlbDsKLQotLyoqCi0gKiBNb2RlbCBjbGFzcyB0aGF0IHN0b3JlcyBhIG1lc3NhZ2UuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVN0b3JlIHsKLQkKLQlwcml2YXRlIFN0cmluZyBtZXNzYWdlOwotCQotCXB1YmxpYyBNZXNzYWdlU3RvcmUoKSB7Ci0JCQotCQlzZXRNZXNzYWdlKCJIZWxsbyBTdHJ1dHMgVXNlciIpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgewotCQl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkKLQkJcmV0dXJuIG1lc3NhZ2UgKyAiIChmcm9tIHRvU3RyaW5nKSI7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDExMmQyMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCI+Ci0KLSAgICAgICAgPCEtLSBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3N1bWUgc3VjY2VzcyBhbmQgCi0gICAgICAgIHJlbmRlciB0aGUgcmVzdWx0IGluZGV4LmpzcCAtLT4KLSAgICAgICAgPCEtLSBJZiBubyBuYW1lIHZhbHVlIGZvciB0aGUgcmVzdWx0IG5vZGUgaXMgc3BlY2lmaWVkIHRoZSBzdWNjZXNzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IC0tPgotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JCTwhLS0gSWYgdGhlIFVSTCBpcyBoZWxsby5hY3Rpb24gdGhlIGNhbGwgdGhlIGV4ZWN1dGUgbWV0aG9kIG9mIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24uCi0JCUlmIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGV4ZWN1dGUgbWV0aG9kIGlzIHN1Y2Nlc3MgcmVuZGVyIHRoZSBIZWxsb1dvcmxkLmpzcCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJoZWxsbyIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uLkhlbGxvV29ybGRBY3Rpb24iIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi9IZWxsb1dvcmxkLmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMmJmNjAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5IZWxsbyBXb3JsZCE8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+PHM6cHJvcGVydHkgdmFsdWU9IiV7bWVzc2FnZVN0b3JlLm1lc3NhZ2V9IiAvPjwvaDI+Ci08cD5JJ3ZlIHNhaWQgaGVsbG8gPHM6cHJvcGVydHkgdmFsdWU9IiV7aGVsbG9Db3VudH0iIC8+IHRpbWVzITwvcD4KLTxwPjxzOnByb3BlcnR5IHZhbHVlPSIle21lc3NhZ2VTdG9yZX0iIC8+PC9wPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcvPiI+SG9tZSBQYWdlPC9hPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL2NvZGluZ19hY3Rpb25zL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWZkZjBlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPkNvZGluZyBBY3Rpb25zPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29kaW5nX2FjdGlvbnMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE1NDQ0Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb2RpbmdfYWN0aW9ucy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdoZWxsbycvPiI+SGVsbG8gV29ybGQ8L2E+PC9wPgotPHM6dXJsIGFjdGlvbj0iaGVsbG8iIHZhcj0iaGVsbG9MaW5rIj4KLSAgPHM6cGFyYW0gbmFtZT0idXNlck5hbWUiPkJydWNlIFBoaWxsaXBzPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7aGVsbG9MaW5rfSI+SGVsbG8gQnJ1Y2UgUGhpbGxpcHM8L2E+PC9wPgotCi08cD5HZXQgeW91ciBvd24gcGVyc29uYWwgaGVsbG8gYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhpcyBmb3JtLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249ImhlbGxvIj4KLQotCTxzOnRleHRmaWVsZCBuYW1lPSJ1c2VyTmFtZSIgbGFiZWw9IiV7J1lvdXIgbmFtZSd9IiAvPgotCQotCTxzOnN1Ym1pdCB2YWx1ZT0iJXsnU3VibWl0J30iIC8+Ci0KLTwvczpmb3JtPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3MvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3MvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTg3OTU4Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBDb250cm9sIFRhZ3MgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvY29udHJvbF90YWdzL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3MvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3MvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmNkZDZjOC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotICA8YXJ0aWZhY3RJZD5jb250cm9sX3RhZ3M8L2FydGlmYWN0SWQ+Ci0KLSAgPG5hbWU+Q29udHJvbCBUYWdzPC9uYW1lPgotIAotICA8ZGVzY3JpcHRpb24+Q29udHJvbCB0YWdzIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmNvbnRyb2xfdGFnczwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFhMDdmZjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlN0YXRlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuRWRpdFNlcnZpY2VJbk1lbW9yeTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gZWRpdGluZyBhIFBlcnNvbi4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBFZGl0U2VydmljZSBlZGl0U2VydmljZSA9IG5ldyBFZGl0U2VydmljZUluTWVtb3J5KCk7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBzcG9ydHMgPSB7ImZvb3RiYWxsIiwgImJhc2ViYWxsIiwgImJhc2tldGJhbGwiIH07Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gZ2VuZGVycyA9IHsibWFsZSIsICJmZW1hbGUiLCAibm90IHN1cmUiIH07Ci0JCi0JcHJpdmF0ZSBMaXN0PFN0YXRlPiBzdGF0ZXMgOwotCi0JcHJpdmF0ZSBTdHJpbmcgW10gY2FyTW9kZWxzQXZhaWxhYmxlID0geyJGb3JkIiwiQ2hyeXNsZXIiLCJUb3lvdGEiLCJOaXNzYW4ifTsKLQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkgICAgZWRpdFNlcnZpY2Uuc2F2ZVBlcnNvbiggZ2V0UGVyc29uQmVhbigpICk7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCQotCXB1YmxpYyBTdHJpbmcgaW5wdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXNldFBlcnNvbkJlYW4oIGVkaXRTZXJ2aWNlLmdldFBlcnNvbigpICk7Ci0JCQotCQlyZXR1cm4gSU5QVVQ7Ci0JfQotCQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQkJCi0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFNwb3J0cygpIHsKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3Qoc3BvcnRzKTsKLQl9Ci0JCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRHZW5kZXJzKCkgewotCQkKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3QoZ2VuZGVycyk7Ci0JCQotCX0KLQotCi0KLQlwdWJsaWMgTGlzdDxTdGF0ZT4gZ2V0U3RhdGVzKCkgewotCQkKLQkJc3RhdGVzID0gbmV3IEFycmF5TGlzdDxTdGF0ZT4oKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJBWiIsICJBcml6b25hIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJDQSIsICJDYWxpZm9ybmlhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJGTCIsICJGbG9yaWRhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJLUyIsICJLYW5zYXMiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIk5ZIiwgIk5ldyBZb3JrIikgKTsKLQkJCi0JCXJldHVybiBzdGF0ZXM7Ci0JfQotCi0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzQXZhaWxhYmxlKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzQXZhaWxhYmxlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvUGVyc29uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmQxMjdlYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc3BvcnQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc2lkZW5jeTsKLSAgICBwcml2YXRlIGJvb2xlYW4gb3ZlcjIxOwotICAgIHByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsczsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIFN0cmluZyBwaG9uZU51bWJlcjsKLSAgIAotIAotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICB9Ci0KLQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTcG9ydChTdHJpbmcgc3BvcnQpIHsKLQkJdGhpcy5zcG9ydCA9IHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEdlbmRlcihTdHJpbmcgZ2VuZGVyKSB7Ci0JCXRoaXMuZ2VuZGVyID0gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0R2VuZGVyKCkgewotCQlyZXR1cm4gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3BvcnQoKSB7Ci0JCXJldHVybiBzcG9ydDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNpZGVuY3koU3RyaW5nIHJlc2lkZW5jeSkgewotCQl0aGlzLnJlc2lkZW5jeSA9IHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlc2lkZW5jeSgpIHsKLQkJcmV0dXJuIHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRPdmVyMjEoYm9vbGVhbiBvdmVyMjEpIHsKLQkJdGhpcy5vdmVyMjEgPSBvdmVyMjE7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNPdmVyMjEoKSB7Ci0JCXJldHVybiBvdmVyMjE7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FyTW9kZWxzKFN0cmluZyBbXSBjYXJNb2RlbHMpIHsKLQkJdGhpcy5jYXJNb2RlbHMgPSBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBbXSBnZXRDYXJNb2RlbHMoKSB7Ci0JCXJldHVybiBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBMYXN0IE5hbWU6ICAiICsgZ2V0TGFzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBGYXZvcml0ZSBTcG9ydDogIiArIGdldFNwb3J0KCkgKyAiIHwgIiArCi0gICAgICAgICIgR2VuZGVyOiAiICsgZ2V0R2VuZGVyKCkgKyAiIHwgIiArICAKLSAgICAgICAgIiBSZXNpZGVuY3k6ICIgKyBnZXRSZXNpZGVuY3koKSArICIgfCAiICsKLSAgICAgICAgIiBPdmVyIDIxOiAiICsgaXNPdmVyMjEoKSAgKyAiIHwgIiArCi0gICAgICAgICIgQ2FyIG1vZGVsczogIiArIEFycmF5cy5hc0xpc3QoIGdldENhck1vZGVscygpICkgKyAiIHwgIiArCi0gICAgICAgICIgRW1haWw6ICIgKyBnZXRFbWFpbCgpICsgIiB8ICIgKwotICAgICAgICAiIFBob25lOiAiICsgZ2V0UGhvbmVOdW1iZXIoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgIH0KLQotCXB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgewotCQl0aGlzLmVtYWlsID0gZW1haWw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKLQkJcmV0dXJuIGVtYWlsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBob25lTnVtYmVyKFN0cmluZyBwaG9uZU51bWJlcikgewotCQl0aGlzLnBob25lTnVtYmVyID0gcGhvbmVOdW1iZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQaG9uZU51bWJlcigpIHsKLQkJcmV0dXJuIHBob25lTnVtYmVyOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmI5MjdlMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU3RhdGUgewotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlQWJicjsKLQkKLQlwcml2YXRlIFN0cmluZyBzdGF0ZU5hbWU7Ci0JCi0JcHVibGljIFN0YXRlIChTdHJpbmcgc3RhdGVBYmJyLCBTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCQotCQl0aGlzLnN0YXRlQWJiciA9IHN0YXRlQWJicjsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlQWJicihTdHJpbmcgc3RhdGVBYmJyKSB7Ci0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVBYmJyKCkgewotCQlyZXR1cm4gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlTmFtZShTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCXRoaXMuc3RhdGVOYW1lID0gc3RhdGVOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVOYW1lKCkgewotCQlyZXR1cm4gc3RhdGVOYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkKLQkJcmV0dXJuIGdldFN0YXRlQWJicigpIDsKLQkJCi0JfQotCQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY1MmUwNTMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOw0KLQ0KLXB1YmxpYyBpbnRlcmZhY2UgRWRpdFNlcnZpY2Ugew0KLQkNCi0JDQotCVBlcnNvbiBnZXRQZXJzb24oKSA7DQotDQotCXZvaWQgc2F2ZVBlcnNvbihQZXJzb24gcGVyc29uQmVhbik7DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhmZDM1ZTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsNCi0NCi0NCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247DQotDQotLyoqDQotICogSW1wbGVtZW50IFNlcnZpY2VzIG5lZWRlZCB0byBlZGl0IGFuZCBzYXZlDQotICogYSBQZXJzb24gb2JqZWN0J3Mgc3RhdGUuICBJbiB0aGlzIGltcGxlbWVudGF0aW9uDQotICogdGhlIFBlcnNvbiBvYmplY3QncyBzdGF0ZSBpcyBzdG9yZWQgaW4gbWVtb3J5DQotICogQGF1dGhvciBicnVjZXBoaWxsaXBzDQotICoNCi0gKi8NCi0NCi1wdWJsaWMgY2xhc3MgRWRpdFNlcnZpY2VJbk1lbW9yeSBpbXBsZW1lbnRzIEVkaXRTZXJ2aWNlIHsNCi0JDQotCQ0KLQlwcml2YXRlIHN0YXRpYyBQZXJzb24gcGVyc29uIDsNCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFtdIGNhck1vZGVscyA9IHsiRm9yZCIsIk5pc3NhbiJ9Ow0KLQ0KLQkNCi0Jc3RhdGljIHsNCi0JCQ0KLQkJcGVyc29uID0gbmV3IFBlcnNvbigpOw0KLQkJcGVyc29uLnNldEZpcnN0TmFtZSgiQnJ1Y2UiKTsNCi0JCXBlcnNvbi5zZXRMYXN0TmFtZSgiUGhpbGxpcHMiKTsNCi0JCXBlcnNvbi5zZXRFbWFpbCgiYnBoaWxsaXBzQGt1LmVkdSIpOw0KLQkJcGVyc29uLnNldFNwb3J0KCJiYXNrZXRiYWxsIik7DQotCQlwZXJzb24uc2V0R2VuZGVyKCJub3Qgc3VyZSIpOw0KLQkJcGVyc29uLnNldFJlc2lkZW5jeSgiS1MiKTsNCi0JCXBlcnNvbi5zZXRPdmVyMjEodHJ1ZSk7CQkNCi0JCXBlcnNvbi5zZXRDYXJNb2RlbHMoIGNhck1vZGVscyk7CQ0KLQkJcGVyc29uLnNldFBob25lTnVtYmVyKCIxMjMtNDU2LTk5OTkiKTsNCi0NCi0JCQ0KLQ0KLQl9DQotDQotCQ0KLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbigpIHsNCi0JCQ0KLQkJcmV0dXJuIEVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uOw0KLQl9DQotDQotDQotCXB1YmxpYyB2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pIHsNCi0NCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEZpcnN0TmFtZShwZXJzb25CZWFuLmdldEZpcnN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRMYXN0TmFtZShwZXJzb25CZWFuLmdldExhc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFNwb3J0KHBlcnNvbkJlYW4uZ2V0U3BvcnQoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0R2VuZGVyKCBwZXJzb25CZWFuLmdldEdlbmRlcigpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRSZXNpZGVuY3koIHBlcnNvbkJlYW4uZ2V0UmVzaWRlbmN5KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldE92ZXIyMSggcGVyc29uQmVhbi5pc092ZXIyMSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRDYXJNb2RlbHMocGVyc29uQmVhbi5nZXRDYXJNb2RlbHMoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0RW1haWwoIHBlcnNvbkJlYW4uZ2V0RW1haWwoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0UGhvbmVOdW1iZXIoIHBlcnNvbkJlYW4uZ2V0UGhvbmVOdW1iZXIoKSApOw0KLQ0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi12YWxpZGF0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTUyZjQwMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIHZhbGlkYXRvcnMgUFVCTElDICItLy9BcGFjaGUgU3RydXRzLy9YV29yayBWYWxpZGF0b3IgMS4wLjMvL0VOIgotCQkiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMveHdvcmstdmFsaWRhdG9yLTEuMC4zLmR0ZCI+Ci08dmFsaWRhdG9ycz4KLSA8dmFsaWRhdG9yIHR5cGU9InJlcXVpcmVkc3RyaW5nIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5maXJzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5GaXJzdCBuYW1lIGlzIHJlcXVpcmVkLjwvbWVzc2FnZT4KLSA8L3ZhbGlkYXRvcj4KLSAgPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ubGFzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5MYXN0IG5hbWUgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotIDx2YWxpZGF0b3IgdHlwZT0icmVxdWlyZWRzdHJpbmciPgotIAk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLmVtYWlsPC9wYXJhbT4KLSAJPG1lc3NhZ2U+RW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJlbWFpbCI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4uZW1haWw8L3BhcmFtPgotIAk8bWVzc2FnZT5FbWFpbCBhZGRyZXNzIG5vdCB2YWxpZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ucGhvbmVOdW1iZXI8L3BhcmFtPgotIAk8bWVzc2FnZT5QaG9uZSBudW1iZXIgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotPHZhbGlkYXRvciB0eXBlPSJyZWdleCI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5waG9uZU51bWJlcjwvcGFyYW0+Ci0JPHBhcmFtIG5hbWU9InJlZ2V4Ij48IVtDREFUQVtcZHszfS1cZHszfS1cZHs0fV1dPjwvcGFyYW0+Ci0JPG1lc3NhZ2U+UGhvbmUgbnVtYmVyIG11c3QgYmUgZW50ZXJlZCBhcyA5OTktOTk5LTk5OTkuPC9tZXNzYWdlPgotPC92YWxpZGF0b3I+Ci08dmFsaWRhdG9yIHR5cGU9ImZpZWxkZXhwcmVzc2lvbiI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5jYXJNb2RlbHM8L3BhcmFtPgotCTxwYXJhbSBuYW1lPSJleHByZXNzaW9uIj48IVtDREFUQVtwZXJzb25CZWFuLmNhck1vZGVscy5sZW5ndGggPiAwXV0+PC9wYXJhbT4KLQk8bWVzc2FnZT5Zb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGNhciBtb2RlbC48L21lc3NhZ2U+Ci08L3ZhbGlkYXRvcj4KLTwvdmFsaWRhdG9ycz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDgzZjQwMGEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGVyc29uQmVhbi5maXJzdE5hbWU9Rmlyc3QgbmFtZQ0KLXBlcnNvbkJlYW4ubGFzdE5hbWU9TGFzdCBuYW1lDQotcGVyc29uQmVhbi5lbWFpbD1FbWFpbCBhZGRyZXNzDQotcGVyc29uQmVhbi5waG9uZU51bWJlcj1QaG9uZSBudW1iZXIgKDk5OS05OTktOTk5OSkNCi1wZXJzb25CZWFuLnNwb3J0PUZhdm9yaXRlIHNwb3J0DQotcGVyc29uQmVhbi5nZW5kZXI9R2VuZGVyDQotcGVyc29uQmVhbi5yZXNpZGVuY3k9U3RhdGUgcmVzaWRlbnQNCi1wZXJzb25CZWFuLm92ZXIyMT0yMSBvciBvbGRlcg0KLXBlcnNvbkJlYW4uY2FyTW9kZWxzPUNhciBtb2RlbHMgb3duZWQNCi1zdWJtaXQ9U2F2ZSBDaGFuZ2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDg5MzAxOWQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiPi9lZGl0LmpzcDwvcmVzdWx0PgotCSAgICAJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vdGhhbmt5b3UuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCi0JPC9wYWNrYWdlPgotCi08L3N0cnV0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlYzE1ZTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPmNvbnRyb2xfdGFnczwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjdhOTkwMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvY29udHJvbF90YWdzL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08czpoZWFkIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBFZGl0IFBlcnNvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5VcGRhdGUgSW5mb3JtYXRpb248L2gxPgotCi08cD5Vc2UgdGhlIGZvcm0gYmVsb3cgdG8gZWRpdCB5b3VyIGluZm9ybWF0aW9uLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249InNhdmUiIG1ldGhvZD0icG9zdCI+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgLz4gCi08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAvPiAKLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uZW1haWwiIC8+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLnBob25lTnVtYmVyIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5zcG9ydCIgbGlzdD0ic3BvcnRzIiAvPgotPHM6cmFkaW8ga2V5PSJwZXJzb25CZWFuLmdlbmRlciIgbGlzdD0iZ2VuZGVycyIgLz4KLTxzOnNlbGVjdCBrZXk9InBlcnNvbkJlYW4ucmVzaWRlbmN5IiBsaXN0PSJzdGF0ZXMiIGxpc3RLZXk9InN0YXRlQWJiciIgbGlzdFZhbHVlPSJzdGF0ZU5hbWUiIC8+Ci08czpjaGVja2JveCBrZXk9InBlcnNvbkJlYW4ub3ZlcjIxIiAvPgotPHM6Y2hlY2tib3hsaXN0IGtleT0icGVyc29uQmVhbi5jYXJNb2RlbHMiIGxpc3Q9ImNhck1vZGVsc0F2YWlsYWJsZSIgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4ODIwOWQ4Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwIGIvc3RydXRzMmV4YW1wbGVzL2NvbnRyb2xfdGFncy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxZGFjNzhkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9jb250cm9sX3RhZ3Mvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHM6aWYgdGVzdD0icGVyc29uQmVhbi5vdmVyMjEiPgotCi0gICAgPHA+WW91IGFyZSBvbGQgZW5vdWdoIHRvIHZvdGUhPC9wPgotICAgIAotPC9zOmlmPgotCi08czplbHNlPgotCi0gICA8cD5Zb3UgYXJlIE5PVCBvbGQgZW5vdWdoIHRvIHZvdGUuPC9wPgotCi08L3M6ZWxzZT4KLQotPHM6aWYgdGVzdD0icGVyc29uQmVhbi5jYXJNb2RlbHMubGVuZ3RoID4gMSI+Ci0KLQk8cD5DYXIgbW9kZWxzCi0KLTwvczppZj4KLQotPHM6ZWxzZT4KLQotICAgPHA+Q2FyIG1vZGVsCi0KLQotPC9zOmVsc2U+Ci0KLXNlbGVjdGVkOiA8L3A+Ci08dGFibGUgc3R5bGU9Im1hcmdpbi1sZWZ0OjE1cHgiPgotCQotCTxzOml0ZXJhdG9yIHZhbHVlPSJwZXJzb25CZWFuLmNhck1vZGVscyI+Ci0JCi0JCTx0cj48dGQ+PHM6cHJvcGVydHkgLz48L3RkPjwvdHI+Ci0KLQk8L3M6aXRlcmF0b3I+Ci0JCi0JCi08L3RhYmxlPgotCi0KLQotPHA+U3RhdGVzIHlvdSBtYXkgaGF2ZSBzZWxlY3RlZDo8L3A+Ci0KLTx0YWJsZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MTVweCI+Ci0KLQk8czppdGVyYXRvciB2YWx1ZT0ic3RhdGVzIiA+Ci0JCi0JCTx0cj48dGQ+PHM6cHJvcGVydHkgdmFsdWU9InN0YXRlQWJiciIgLz48L3RkPiA8dGQ+PHM6cHJvcGVydHkgdmFsdWU9InN0YXRlTmFtZSIgLz48L3RyPgotCi0JPC9zOml0ZXJhdG9yPgotCQotPC90YWJsZT4KLQotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM3MWZlMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotVGhpcyBpcyB0aGUgZXhhbXBsZSBwcm9qZWN0IHJlZmVycmVkIHRvIGluIHRoZQotU3RydXRzIDIgZG9jdW1lbnRhdGlvbiwgRGVidWdnaW5nIFN0cnV0cyAyIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2RlYnVnZ2luZ19zdHJ1dHMvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiBhbmQgYSBsaW5rIGZvciB0aGUgc2hvd2luZyAKLXRoZSBTdHJ1dHMgMiBjb25maWd1cmF0aW9uLgotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlY2ZjYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxwYXJlbnQ+Ci0gICAgPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+c3RydXRzMmV4YW1wbGVzPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotICA8L3BhcmVudD4KLQotICA8YXJ0aWZhY3RJZD5kZWJ1Z2dpbmdfc3RydXRzPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPkRlYnVnZ2luZyBTdHJ1dHM8L25hbWU+Ci0gIAotICA8ZGVzY3JpcHRpb24+RXhjZXB0aW9uIGhhbmRsaW5nIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIDxkZXBlbmRlbmNpZXM+Ci0gIAkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnN0cnV0czwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnN0cnV0czItY29uZmlnLWJyb3dzZXItcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+JHtzdHJ1dHMyLnZlcnNpb259PC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0gIDwvZGVwZW5kZW5jaWVzPgotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmRlYnVnZ2luZ19zdHJ1dHM8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmRhNDkuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5tb2RlbC5NZXNzYWdlU3RvcmU7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotCi0vKioKLSAqIEFjdHMgYXMgYSBTdHJ1dHMgMiBjb250cm9sbGVyIHRoYXQgcmVzcG9uZHMKLSAqIHRvIGEgdXNlciBhY3Rpb24gYnkgc2V0dGluZyB0aGUgdmFsdWUKLSAqIG9mIHRoZSBNZXNzYWdlIG1vZGVsIGNsYXNzLCBhbmQgcmV0dXJucyBhIFN0cmluZyAKLSAqIHJlc3VsdC4KLSAqIEBhdXRob3IgQnJ1Y2UgUGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQkvKioKLQkgKiBUaGUgbW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgdGhlIG1lc3NhZ2UKLQkgKiB0byBkaXNwbGF5IGluIHRoZSB2aWV3LgotCSAqLwotCXByaXZhdGUgTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZTsKLQkKLQlwcml2YXRlIHN0YXRpYyBpbnQgaGVsbG9Db3VudCA9IDA7Ci0JCi0JcHVibGljIGludCBnZXRIZWxsb0NvdW50KCkgewotCQlyZXR1cm4gaGVsbG9Db3VudDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRIZWxsb0NvdW50KGludCBoZWxsb0NvdW50KSB7Ci0JCUhlbGxvV29ybGRBY3Rpb24uaGVsbG9Db3VudCA9IGhlbGxvQ291bnQ7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIHVzZXJOYW1lOwotCi0JcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHsKLQkJcmV0dXJuIHVzZXJOYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFVzZXJOYW1lKFN0cmluZyB1c2VyTmFtZSkgewotCQl0aGlzLnVzZXJOYW1lID0gdXNlck5hbWU7Ci0JfQotCi0JLyoKLQkgKiBDcmVhdGVzIHRoZSBNZXNzYWdlU3RvcmUgbW9kZWwgb2JqZWN0LCAKLQkgKiBpbmNyZWFzZSBoZWxsb0NvdW50IGJ5IDEgYW5kIAotCSAqIHJldHVybnMgc3VjY2Vzcy4gIFRoZSBNZXNzYWdlU3RvcmUgbW9kZWwKLQkgKiBvYmplY3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHZpZXcuCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydCNleGVjdXRlKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCW1lc3NhZ2VTdG9yZSA9IG5ldyBNZXNzYWdlU3RvcmUoKSA7Ci0JCQotCQkvL0FjdGlvbiBpbmNsdWRlZCBhIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXIgb2YgdXNlck5hbWUKLQkJLy9vciBhIGZvcm0gZmllbGQgd2l0aCBuYW1lIG9mIHVzZXJOYW1lCi0JCWlmICh1c2VyTmFtZSAhPSBudWxsKSB7Ci0JCQkKLQkJCW1lc3NhZ2VTdG9yZS5zZXRNZXNzYWdlKCBtZXNzYWdlU3RvcmUuZ2V0TWVzc2FnZSgpICsgIiAiICsgdXNlck5hbWUpOwotCQkJCi0JCX0KLQkJCi0JCWhlbGxvQ291bnQrKzsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCX0KLQotCXB1YmxpYyBNZXNzYWdlU3RvcmUgZ2V0TWVzc2FnZVN0b3JlKCkgewotCQlyZXR1cm4gbWVzc2FnZVN0b3JlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2VTdG9yZShNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlKSB7Ci0JCXRoaXMubWVzc2FnZVN0b3JlID0gbWVzc2FnZVN0b3JlOwotCX0KLQkKLQkKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZjZWViLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5tb2RlbDsKLQotLyoqCi0gKiBNb2RlbCBjbGFzcyB0aGF0IHN0b3JlcyBhIG1lc3NhZ2UuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTWVzc2FnZVN0b3JlIHsKLQkKLQlwcml2YXRlIFN0cmluZyBtZXNzYWdlOwotCQotCXB1YmxpYyBNZXNzYWdlU3RvcmUoKSB7Ci0JCQotCQlzZXRNZXNzYWdlKCJIZWxsbyBTdHJ1dHMgVXNlciIpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2U7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgewotCQl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkKLQkJcmV0dXJuIG1lc3NhZ2UgKyAiIChmcm9tIHRvU3RyaW5nKSI7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YSBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OGYwZTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuZXhjZXB0aW9ucy5TZWN1cml0eUJyZWFjaEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5tb2RlbC5QZXJzb247Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotCi0KLQotLyoqCi0gKiBBY3RzIGFzIGEgY29udHJvbGxlciB0byBoYW5kbGUgYWN0aW9ucyByZWxhdGVkIHRvIHJlZ2lzdGVyaW5nIGEgdXNlci4KLSAqIAotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWdpc3RlciBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQlwcml2YXRlIFBlcnNvbiBwZXJzb25CZWFuOwotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gY2FsbCBTZXJ2aWNlIGNsYXNzIHRvIHN0b3JlIHBlcnNvbkJlYW4ncyBzdGF0ZSBpbiBkYXRhYmFzZQotCi0JCXJldHVybiBTVUNDRVNTOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGhyb3dFeGNlcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJFeGNlcHRpb24gdGhyb3duIGZyb20gdGhyb3dFeGNlcHRpb24iKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRocm93TnVsbFBvaW50ZXJFeGNlcHRpb24oKSB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gewotCi0JCXRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiTnVsbCBQb2ludGVyIEV4Y2VwdGlvbiB0aHJvd24gZnJvbSAiCi0JCQkJKyBSZWdpc3Rlci5jbGFzcy50b1N0cmluZygpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0aHJvd1NlY3VyaXR5RXhjZXB0aW9uKCkgdGhyb3dzIFNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uIHsKLQotCQl0aHJvdyBuZXcgU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24oCi0JCQkJIlNlY3VyaXR5IGJyZWFjaCBleGNlcHRpb24gdGhyb3duIGZyb20gdGhyb3dTZWN1cml0eUV4Y2VwdGlvbiIpOwotCX0KLQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvZXhjZXB0aW9ucy9TZWN1cml0eUJyZWFjaEV4Y2VwdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9leGNlcHRpb25zL1NlY3VyaXR5QnJlYWNoRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjE1MmQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9leGNlcHRpb25zL1NlY3VyaXR5QnJlYWNoRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmV4Y2VwdGlvbnM7DQotDQotcHVibGljIGNsYXNzIFNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsNCi0NCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTEyMzIxMjE1OTQyNjE3MDMzNDFMOw0KLQ0KLQlwdWJsaWMgU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24oKSB7DQotCQkNCi0JCXN1cGVyKCJTZWN1cml0eSBFeGNlcHRpb24iKTsNCi0JCQ0KLQkJDQotCX0NCi0JDQotCXB1YmxpYyBTZWN1cml0eUJyZWFjaEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgew0KLQkJDQotCQlzdXBlcihtZXNzYWdlKTsNCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAyMGJiYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5tb2RlbDsKLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIGludCBhZ2U7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZW1haWwgPSBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFnZSggaW50IGFnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWdlID0gYWdlOwotICAgIH0KLQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAKLSAgICAgICAgIiBFbWFpbDogICAgICAiICsgZ2V0RW1haWwoKSArICIgQWdlOiAgICAgICIgKyBnZXRBZ2UoKSA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWJkOTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMGNiMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3N2IwZGUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCI+Ci0JCi0JPCEtLSBzZXR1cCB0aGUgZGVmYXVsdC1zdGFjayBleGNlcHRpb24gbWFwcGluZyBpbnRlcmNlcHRvciAKLSAJCXNvIHRoYXQgYW55IGV4Y2VwdGlvbnMgbm90IGNhdWdodCBieSB0aGlzIGFwcGxpY2F0aW9uIAotIAkJd2lsbCBiZSBsb2dnZWQgYW5kIHRoZW4gaGFuZGxlZCBieSB0aGUgZ2xvYmFsIGV4Y2VwdGlvbiAKLSAJCW1hcHBpbmcgLS0+Ci0gCQk8aW50ZXJjZXB0b3JzPgotIAkJPGludGVyY2VwdG9yLXN0YWNrIG5hbWU9ImFwcERlZmF1bHQiPgotICAgICAgICAJIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0iZGVmYXVsdFN0YWNrIj4KLSAgICAgIAkJCTxwYXJhbSBuYW1lPSJleGNlcHRpb24ubG9nRW5hYmxlZCI+dHJ1ZTwvcGFyYW0+Ci0gICAgICAJCQk8cGFyYW0gbmFtZT0iZXhjZXB0aW9uLmxvZ0xldmVsIj5FUlJPUjwvcGFyYW0+Ci0gICAJCQk8L2ludGVyY2VwdG9yLXJlZj4KLSAJICAgIDwvaW50ZXJjZXB0b3Itc3RhY2s+Ci0JCTwvaW50ZXJjZXB0b3JzPgotCQkKLQkJPGRlZmF1bHQtaW50ZXJjZXB0b3ItcmVmIG5hbWU9ImFwcERlZmF1bHQiIC8+Ci0JCQotICAgICAgICA8Z2xvYmFsLXJlc3VsdHM+Ci0gIAkJICA8cmVzdWx0IG5hbWU9ImVycm9yIj4vZXJyb3IuanNwPC9yZXN1bHQ+Ci0gIAkJICA8cmVzdWx0IG5hbWU9InNlY3VyaXR5ZXJyb3IiPi9zZWN1cml0eWVycm9yLmpzcDwvcmVzdWx0PgotICAJICAgIDwvZ2xvYmFsLXJlc3VsdHM+Ci0gIAkJCi0KLQkgICAgPGdsb2JhbC1leGNlcHRpb24tbWFwcGluZ3M+Ci0JICAgICAgICA8ZXhjZXB0aW9uLW1hcHBpbmcgZXhjZXB0aW9uPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5leGNlcHRpb25zLlNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uIiByZXN1bHQ9InNlY3VyaXR5ZXJyb3IiIC8+Ci0JICAgICAgICA8ZXhjZXB0aW9uLW1hcHBpbmcgZXhjZXB0aW9uPSJqYXZhLmxhbmcuRXhjZXB0aW9uIiByZXN1bHQ9ImVycm9yIiAvPgotCSAgIAk8L2dsb2JhbC1leGNlcHRpb24tbWFwcGluZ3M+Ci0JICAKLQkgICAgCi0gICAgICAgICAKLSAgICAgICAgPGFjdGlvbiBuYW1lPSJjYXVzZXNlY3VyaXR5ZXhjZXB0aW9uIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9InRocm93U2VjdXJpdHlFeGNlcHRpb24iPgotICAgICAgICAJPHJlc3VsdD4vcmVnaXN0ZXIuanNwPC9yZXN1bHQ+Ci0gICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKLSAgICAgICAgPGFjdGlvbiBuYW1lPSJjYXVzZWV4Y2VwdGlvbiIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbi5SZWdpc3RlciIgbWV0aG9kPSJ0aHJvd0V4Y2VwdGlvbiI+Ci0gICAgICAgIAk8cmVzdWx0Pi9yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9ImNhdXNlbnVsbHBvaW50ZXJleGNlcHRpb24iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5hY3Rpb24uUmVnaXN0ZXIiIG1ldGhvZD0idGhyb3dOdWxsUG9pbnRlckV4Y2VwdGlvbiI+Ci0gICAgICAgIAk8cmVzdWx0Pi9yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9ImFjdGlvbnNwZWNpZmljZXhjZXB0aW9uIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9InRocm93U2VjdXJpdHlFeGNlcHRpb24iPgotICAgICAgICAJPGV4Y2VwdGlvbi1tYXBwaW5nIGV4Y2VwdGlvbj0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuZXhjZXB0aW9ucy5TZWN1cml0eUJyZWFjaEV4Y2VwdGlvbiIgCi0gICAgICAgIAkgICByZXN1bHQ9ImxvZ2luIiAvPgotICAgICAgICAJPHJlc3VsdD4vcmVnaXN0ZXIuanNwPC9yZXN1bHQ+Ci0gICAgICAgIAk8cmVzdWx0IG5hbWU9ImxvZ2luIj4vbG9naW4uanNwPC9yZXN1bHQ+Ci0gICAgICAgIDwvYWN0aW9uPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCQk8IS0tIElmIHRoZSBVUkwgaXMgaGVsbG8uYWN0aW9uIHRoZSBjYWxsIHRoZSBleGVjdXRlIG1ldGhvZCBvZiBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uLgotCQlJZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBleGVjdXRlIG1ldGhvZCBpcyBzdWNjZXNzIHJlbmRlciB0aGUgSGVsbG9Xb3JsZC5qc3AgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaGVsbG8iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbi5IZWxsb1dvcmxkQWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vSGVsbG9Xb3JsZC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotICA8YWN0aW9uIG5hbWU9InJlZ2lzdGVyIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImV4ZWN1dGUiPgotCTxyZXN1bHQgbmFtZT0ic3VjY2VzcyI+L3RoYW5reW91LmpzcDwvcmVzdWx0PgotICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODZhNmFiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5IZWxsbyBXb3JsZCE8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+PHM6cHJvcGVydHkgdmFsdWU9Im1lc3NhZ2VTdG9yZS5tZXNzYWdlIiAvPjwvaDI+Ci08cD5JJ3ZlIHNhaWQgaGVsbG8gPHM6cHJvcGVydHkgdmFsdWU9ImhlbGxvQ291bnQiIC8+IHRpbWVzITwvcD4KLTxwPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUiIC8+PC9wPgotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5NDk1MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGZhOTFjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+RGVidWdnaW5nIFN0cnV0czwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2Vycm9yLmpzcCBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9lcnJvci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODU1MGYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2Vycm9yLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPg0KLTxodG1sPg0KLQ0KLQk8aGVhZD4NCi0gICAgPHRpdGxlPkVycm9yPC90aXRsZT4NCi0JPC9oZWFkPg0KLQ0KLQk8Ym9keT4NCi0JCTxoND5UaGUgYXBwbGljYXRpb24gaGFzIG1hbGZ1bmN0aW9uZWQuPC9oND4NCi0JCTxwPiAgUGxlYXNlIGNvbnRhY3QgdGVjaG5pY2FsIHN1cHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD4gDQotCQkNCi0JCTwhLS0gdGhlIGV4Y2VwdGlvbiBhbmQgZXhjZXB0aW9uU3RhY2sgYmVhbiBwcm9wZXJ0aWVzDQotCQl3ZXJlIGNyZWF0ZWQgYnkgU3RydXRzMidzIEV4Y2VwdGlvbiBJbnRlcmNlcHRlciAoc2VlIHBhZ2UgODkpIC0tPg0KLQkJPGg0PkV4Y2VwdGlvbiBOYW1lOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uIiAvPiA8L2g0Pg0KLQkJPGg0PkV4Y2VwdGlvbiBEZXRhaWxzOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uU3RhY2siIC8+PC9oND4gDQotCQkNCi0JDQotCSAgICA8cD48YSBocmVmPSJpbmRleC5qc3AiPlJldHVybiB0byB0aGUgaG9tZSBwYWdlLjwvYT48L3A+DQotCSAgDQotCQkNCi0JPC9ib2R5Pg0KLQkNCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YWFmZDkuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08czpoZWFkLz4gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5EZWJ1Z2dpbmcgU3RydXRzIDIgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2hlbGxvJy8+Ij5IZWxsbyBXb3JsZDwvYT48L3A+Ci08czp1cmwgYWN0aW9uPSJoZWxsbyIgdmFyPSJoZWxsb0xpbmsiPgotICA8czpwYXJhbSBuYW1lPSJ1c2VyTmFtZSI+QnJ1Y2UgUGhpbGxpcHM8L3M6cGFyYW0+Ci08L3M6dXJsPgotPHA+PGEgaHJlZj0iJHtoZWxsb0xpbmt9Ij5IZWxsbyBCcnVjZSBQaGlsbGlwczwvYT48L3A+Ci0KLTxwPkdldCB5b3VyIG93biBwZXJzb25hbCBoZWxsbyBieSBmaWxsaW5nIG91dCBhbmQgc3VibWl0dGluZyB0aGlzIGZvcm0uPC9wPgotCi08czpmb3JtIGFjdGlvbj0iaGVsbG8iPgotCi0JPHM6dGV4dGZpZWxkIG5hbWU9InVzZXJOYW1lIiBsYWJlbD0iWW91ciBuYW1lIiAvPgotCQotCTxzOnN1Ym1pdCB2YWx1ZT0iU3VibWl0IiAvPgotCi08L3M6Zm9ybT4KLQotPHA+PGEgaHJlZj0icmVnaXN0ZXIuanNwIj5QbGVhc2UgcmVnaXN0ZXI8L2E+IGZvciBvdXIgcHJpemUgZHJhd2luZy48L3A+Ci0KLTxwPjxhIGhyZWY9JzxzOnVybCBhY3Rpb249ImNhdXNlZXhjZXB0aW9uIiAvPicgPkNhdXNlIEV4Y2VwdGlvbjwvYT48L3A+IAotCi08cD48YSBocmVmPSc8czp1cmwgYWN0aW9uPSJjYXVzZW51bGxwb2ludGVyZXhjZXB0aW9uIiAvPicgPkNhdXNlIE51bGwgUG9pbnRlciBFeGNlcHRpb248L2E+PC9wPiAKLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iY2F1c2VzZWN1cml0eWV4Y2VwdGlvbiIgLz4nID5DYXVzZSBHbG9iYWwgU2VjdXJpdHkgRXhjZXB0aW9uPC9hPjwvcD4gCi0KLTxwPjxhIGhyZWY9JzxzOnVybCBhY3Rpb249ImFjdGlvbnNwZWNpZmljZXhjZXB0aW9uIiAvPicgPkNhdXNlIEFjdGlvblNwZWNpZmljIFNlY3VyaXR5IEV4Y2VwdGlvbjwvYT48L3A+Ci0KLTxociAvPgotPGgzPkRlYnVnZ2luZzwvaDM+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSJpbmRleCIgbmFtZXNwYWNlPSJjb25maWctYnJvd3NlciIgLz4iPkxhdW5jaCB0aGUgY29uZmlndXJhdGlvbiBicm93c2VyPC9hPjwvcD4KLTxzOnVybCBhY3Rpb249ImluZGV4IiB2YXI9ImluZGV4TGluayI+Ci0gIDxzOnBhcmFtIG5hbWU9ImRlYnVnIj5icm93c2VyPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7aW5kZXhMaW5rfSI+UmVsb2FkIHRoaXMgcGFnZSB3aXRoIGRlYnVnZ2luZzwvYT48L3A+Ci0KLSAgCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2xvZ2luLmpzcCBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9sb2dpbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNTkzOTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2xvZ2luLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5FeGNlcHRpb24gSGFuZGxpbmcgU3RydXRzIDIgQXBwbGljYXRpb24gLSBMb2dpbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5Zb3UgTXVzdCBMb2dpbjwvaDE+Ci08cD5QbGVhc2UgbG9naW48L3A+Ci0KLTxwPjxhIGhyZWY9ImluZGV4LmpzcCI+UmV0dXJuIHRvIHRoZSBob21lIHBhZ2UuPC9hPjwvcD4KLQkgIAotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWRhYzc2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5SZWdpc3RlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMz5SZWdpc3RlciBmb3IgYSBwcml6ZSBieSBjb21wbGV0aW5nIHRoaXMgZm9ybS48L2gzPgotCi08czpmb3JtIGFjdGlvbj0icmVnaXN0ZXIiPgotCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZmlyc3ROYW1lIiBsYWJlbD0iRmlyc3QgbmFtZSIgLz4KLSAJICA8czp0ZXh0ZmllbGQgIG5hbWU9InBlcnNvbkJlYW4ubGFzdE5hbWUiIGxhYmVsPSJMYXN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZW1haWwiICBsYWJlbCA9IkVtYWlsIi8+ICAKLSAJICA8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uQmVhbi5hZ2UiICBsYWJlbD0iQWdlIiAgLz4KLSAJICAKLSAgIAkgIDxzOnN1Ym1pdC8+Ci0gICAJICAKLTwvczpmb3JtPgkKLSAKLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvc2VjdXJpdHllcnJvci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZGVidWdnaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvc2VjdXJpdHllcnJvci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MDU3ZTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL3NlY3VyaXR5ZXJyb3IuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4NCi08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+DQotPGh0bWw+DQotDQotCTxoZWFkPg0KLSAgICA8dGl0bGU+U2VjdXJpdHkgRXJyb3I8L3RpdGxlPg0KLQk8L2hlYWQ+DQotDQotCTxib2R5Pg0KLQkJPGg0PlRoZXJlIGhhcyBiZWVuIGEgc2VjdXJpdHkgZXJyb3IuPC9oND4NCi0JCTxwPiAgUGxlYXNlIGNvbnRhY3QgdGVjaG5pY2FsIHN1cHBvcnQgd2l0aCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD4gDQotCQkNCi0JCTwhLS0gdGhlIGV4Y2VwdGlvbiBhbmQgZXhjZXB0aW9uU3RhY2sgYmVhbiBwcm9wZXJ0aWVzDQotCQl3ZXJlIGNyZWF0ZWQgYnkgU3RydXRzMidzIEV4Y2VwdGlvbiBJbnRlcmNlcHRlciAoc2VlIHBhZ2UgODkpIC0tPg0KLQkJPGg0PkV4Y2VwdGlvbiBOYW1lOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uIiAvPiA8L2g0Pg0KLQkJPGg0PkV4Y2VwdGlvbiBEZXRhaWxzOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uU3RhY2siIC8+PC9oND4gDQotCQkNCi0JDQotCSAgICA8cD48YSBocmVmPSJpbmRleC5qc3AiPlJldHVybiB0byB0aGUgaG9tZSBwYWdlLjwvYT48L3A+DQotCSAgDQotCQkNCi0JPC9ib2R5Pg0KLQkNCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcCBiL3N0cnV0czJleGFtcGxlcy9kZWJ1Z2dpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjODQ1YmMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2RlYnVnZ2luZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdHJhdGlvbiBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgzPlRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgZm9yIGEgcHJpemUuPC9oMz4KLQotPHA+WW91ciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb246IDxzOnByb3BlcnR5IHZhbHVlPSJwZXJzb25CZWFuIiAvPiA8L3A+Ci0KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2luZGV4JyAvPiIgPlJldHVybiB0byBob21lIHBhZ2U8L2E+LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ3OTM3Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBFeGNlcHRpb24gSGFuZGxpbmcgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvZXhjZXB0aW9uX2hhbmRsaW5nL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ1NmI2Mi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotCi0gIDxhcnRpZmFjdElkPmV4Y2VwdGlvbl9oYW5kbGluZzwvYXJ0aWZhY3RJZD4KLQotICA8bmFtZT5FeGNlcHRpb24gaGFuZGxpbmc8L25hbWU+Ci0KLTxkZXNjcmlwdGlvbj5FeGNlcHRpb24gaGFuZGxpbmcgZXhhbXBsZSBhcHBsaWNhdGlvbiBmb3IgdGhlIAotICBTdHJ1dHMgMiBnZXR0aW5nIHN0YXJ0ZWQgdHV0b3JpYWxzPC9kZXNjcmlwdGlvbj4KLSAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLSAgCi0gICAgICA8YnVpbGQ+Ci0JCTxmaW5hbE5hbWU+ZXhjZXB0aW9uX2hhbmRsaW5nPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmRhNDkuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5hY3Rpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLm1vZGVsLk1lc3NhZ2VTdG9yZTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIFN0cnV0cyAyIGNvbnRyb2xsZXIgdGhhdCByZXNwb25kcwotICogdG8gYSB1c2VyIGFjdGlvbiBieSBzZXR0aW5nIHRoZSB2YWx1ZQotICogb2YgdGhlIE1lc3NhZ2UgbW9kZWwgY2xhc3MsIGFuZCByZXR1cm5zIGEgU3RyaW5nIAotICogcmVzdWx0LgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24gZXh0ZW5kcyBBY3Rpb25TdXBwb3J0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCS8qKgotCSAqIFRoZSBtb2RlbCBjbGFzcyB0aGF0IHN0b3JlcyB0aGUgbWVzc2FnZQotCSAqIHRvIGRpc3BsYXkgaW4gdGhlIHZpZXcuCi0JICovCi0JcHJpdmF0ZSBNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlOwotCQotCXByaXZhdGUgc3RhdGljIGludCBoZWxsb0NvdW50ID0gMDsKLQkKLQlwdWJsaWMgaW50IGdldEhlbGxvQ291bnQoKSB7Ci0JCXJldHVybiBoZWxsb0NvdW50OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEhlbGxvQ291bnQoaW50IGhlbGxvQ291bnQpIHsKLQkJSGVsbG9Xb3JsZEFjdGlvbi5oZWxsb0NvdW50ID0gaGVsbG9Db3VudDsKLQl9Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgdXNlck5hbWU7Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgewotCQlyZXR1cm4gdXNlck5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VXNlck5hbWUoU3RyaW5nIHVzZXJOYW1lKSB7Ci0JCXRoaXMudXNlck5hbWUgPSB1c2VyTmFtZTsKLQl9Ci0KLQkvKgotCSAqIENyZWF0ZXMgdGhlIE1lc3NhZ2VTdG9yZSBtb2RlbCBvYmplY3QsIAotCSAqIGluY3JlYXNlIGhlbGxvQ291bnQgYnkgMSBhbmQgCi0JICogcmV0dXJucyBzdWNjZXNzLiAgVGhlIE1lc3NhZ2VTdG9yZSBtb2RlbAotCSAqIG9iamVjdCB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgdmlldy4KLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0I2V4ZWN1dGUoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJbWVzc2FnZVN0b3JlID0gbmV3IE1lc3NhZ2VTdG9yZSgpIDsKLQkJCi0JCS8vQWN0aW9uIGluY2x1ZGVkIGEgcXVlcnkgc3RyaW5nIHBhcmFtZXRlciBvZiB1c2VyTmFtZQotCQkvL29yIGEgZm9ybSBmaWVsZCB3aXRoIG5hbWUgb2YgdXNlck5hbWUKLQkJaWYgKHVzZXJOYW1lICE9IG51bGwpIHsKLQkJCQotCQkJbWVzc2FnZVN0b3JlLnNldE1lc3NhZ2UoIG1lc3NhZ2VTdG9yZS5nZXRNZXNzYWdlKCkgKyAiICIgKyB1c2VyTmFtZSk7Ci0JCQkKLQkJfQotCQkKLQkJaGVsbG9Db3VudCsrOwotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCi0JcHVibGljIE1lc3NhZ2VTdG9yZSBnZXRNZXNzYWdlU3RvcmUoKSB7Ci0JCXJldHVybiBtZXNzYWdlU3RvcmU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZVN0b3JlKE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmUpIHsKLQkJdGhpcy5tZXNzYWdlU3RvcmUgPSBtZXNzYWdlU3RvcmU7Ci0JfQotCQotCQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2ZjZWViLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLm1vZGVsOwotCi0vKioKLSAqIE1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIGEgbWVzc2FnZS4KLSAqIEBhdXRob3IgQnJ1Y2UgUGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlU3RvcmUgewotCQotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7Ci0JCi0JcHVibGljIE1lc3NhZ2VTdG9yZSgpIHsKLQkJCi0JCXNldE1lc3NhZ2UoIkhlbGxvIFN0cnV0cyBVc2VyIik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlyZXR1cm4gbWVzc2FnZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7Ci0JCXRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQotCQlyZXR1cm4gbWVzc2FnZSArICIgKGZyb20gdG9TdHJpbmcpIjsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5OGYwZTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2FjdGlvbi9SZWdpc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5hY3Rpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5leGNlcHRpb25zLlNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsLlBlcnNvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLQotCi0vKioKLSAqIEFjdHMgYXMgYSBjb250cm9sbGVyIHRvIGhhbmRsZSBhY3Rpb25zIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdGVyIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCXByaXZhdGUgUGVyc29uIHBlcnNvbkJlYW47Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyBjYWxsIFNlcnZpY2UgY2xhc3MgdG8gc3RvcmUgcGVyc29uQmVhbidzIHN0YXRlIGluIGRhdGFiYXNlCi0KLQkJcmV0dXJuIFNVQ0NFU1M7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0aHJvd0V4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXRocm93IG5ldyBFeGNlcHRpb24oIkV4Y2VwdGlvbiB0aHJvd24gZnJvbSB0aHJvd0V4Y2VwdGlvbiIpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGhyb3dOdWxsUG9pbnRlckV4Y2VwdGlvbigpIHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiB7Ci0KLQkJdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJOdWxsIFBvaW50ZXIgRXhjZXB0aW9uIHRocm93biBmcm9tICIKLQkJCQkrIFJlZ2lzdGVyLmNsYXNzLnRvU3RyaW5nKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRocm93U2VjdXJpdHlFeGNlcHRpb24oKSB0aHJvd3MgU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24gewotCi0JCXRocm93IG5ldyBTZWN1cml0eUJyZWFjaEV4Y2VwdGlvbigKLQkJCQkiU2VjdXJpdHkgYnJlYWNoIGV4Y2VwdGlvbiB0aHJvd24gZnJvbSB0aHJvd1NlY3VyaXR5RXhjZXB0aW9uIik7Ci0JfQotCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCi0JCXJldHVybiBwZXJzb25CZWFuOwotCi0JfQotCi0JcHVibGljIHZvaWQgc2V0UGVyc29uQmVhbihQZXJzb24gcGVyc29uKSB7Ci0KLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2V4Y2VwdGlvbnMvU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9leGNlcHRpb25zL1NlY3VyaXR5QnJlYWNoRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjE1MmQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2V4Y2VwdGlvbnMvU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuZXhjZXB0aW9uczsNCi0NCi1wdWJsaWMgY2xhc3MgU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gew0KLQ0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtMTIzMjEyMTU5NDI2MTcwMzM0MUw7DQotDQotCXB1YmxpYyBTZWN1cml0eUJyZWFjaEV4Y2VwdGlvbigpIHsNCi0JCQ0KLQkJc3VwZXIoIlNlY3VyaXR5IEV4Y2VwdGlvbiIpOw0KLQkJDQotCQkNCi0JfQ0KLQkNCi0JcHVibGljIFNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7DQotCQkNCi0JCXN1cGVyKG1lc3NhZ2UpOw0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAyMGJiYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvbW9kZWwvUGVyc29uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsOwotCi0KLS8qKgotICogTW9kZWxzIGEgUGVyc29uIHdobyByZWdpc3RlcnMuCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGVyc29uCi17Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZmlyc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIGxhc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIGVtYWlsOwotICAgIHByaXZhdGUgaW50IGFnZTsKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rmlyc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBmaXJzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMYXN0TmFtZShTdHJpbmcgbGFzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpCi0gICAgewotICAgICAgICByZXR1cm4gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RW1haWwoU3RyaW5nIGVtYWlsKQotICAgIHsKLSAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0QWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWdlKCBpbnQgYWdlKQotICAgIHsKLSAgICAgICAgdGhpcy5hZ2UgPSBhZ2U7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiRmlyc3QgTmFtZTogIiArIGdldEZpcnN0TmFtZSgpICsgIiBMYXN0IE5hbWU6ICAiICsgZ2V0TGFzdE5hbWUoKSArIAotICAgICAgICAiIEVtYWlsOiAgICAgICIgKyBnZXRFbWFpbCgpICsgIiBBZ2U6ICAgICAgIiArIGdldEFnZSgpIDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWJkOTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMGNiMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzMiI+Ci0gICAgCSA8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotICAKLSAgIDwhLS0gZm9yIGFsbCBvdGhlciBsb2dnZXJzIGxvZyBvbmx5IGRlYnVnIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+Ci0gICAgIDxyb290PgotICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4gCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IAotICAgICA8L3Jvb3Q+IAotICAgIAotPC9sb2c0ajpjb25maWd1cmF0aW9uPiAKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3N2IwZGUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQkKLQk8IS0tIHNldHVwIHRoZSBkZWZhdWx0LXN0YWNrIGV4Y2VwdGlvbiBtYXBwaW5nIGludGVyY2VwdG9yIAotIAkJc28gdGhhdCBhbnkgZXhjZXB0aW9ucyBub3QgY2F1Z2h0IGJ5IHRoaXMgYXBwbGljYXRpb24gCi0gCQl3aWxsIGJlIGxvZ2dlZCBhbmQgdGhlbiBoYW5kbGVkIGJ5IHRoZSBnbG9iYWwgZXhjZXB0aW9uIAotIAkJbWFwcGluZyAtLT4KLSAJCTxpbnRlcmNlcHRvcnM+Ci0gCQk8aW50ZXJjZXB0b3Itc3RhY2sgbmFtZT0iYXBwRGVmYXVsdCI+Ci0gICAgICAgIAkgPGludGVyY2VwdG9yLXJlZiBuYW1lPSJkZWZhdWx0U3RhY2siPgotICAgICAgCQkJPHBhcmFtIG5hbWU9ImV4Y2VwdGlvbi5sb2dFbmFibGVkIj50cnVlPC9wYXJhbT4KLSAgICAgIAkJCTxwYXJhbSBuYW1lPSJleGNlcHRpb24ubG9nTGV2ZWwiPkVSUk9SPC9wYXJhbT4KLSAgIAkJCTwvaW50ZXJjZXB0b3ItcmVmPgotIAkgICAgPC9pbnRlcmNlcHRvci1zdGFjaz4KLQkJPC9pbnRlcmNlcHRvcnM+Ci0JCQotCQk8ZGVmYXVsdC1pbnRlcmNlcHRvci1yZWYgbmFtZT0iYXBwRGVmYXVsdCIgLz4KLQkJCi0gICAgICAgIDxnbG9iYWwtcmVzdWx0cz4KLSAgCQkgIDxyZXN1bHQgbmFtZT0iZXJyb3IiPi9lcnJvci5qc3A8L3Jlc3VsdD4KLSAgCQkgIDxyZXN1bHQgbmFtZT0ic2VjdXJpdHllcnJvciI+L3NlY3VyaXR5ZXJyb3IuanNwPC9yZXN1bHQ+Ci0gIAkgICAgPC9nbG9iYWwtcmVzdWx0cz4KLSAgCQkKLQotCSAgICA8Z2xvYmFsLWV4Y2VwdGlvbi1tYXBwaW5ncz4KLQkgICAgICAgIDxleGNlcHRpb24tbWFwcGluZyBleGNlcHRpb249Im9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmV4Y2VwdGlvbnMuU2VjdXJpdHlCcmVhY2hFeGNlcHRpb24iIHJlc3VsdD0ic2VjdXJpdHllcnJvciIgLz4KLQkgICAgICAgIDxleGNlcHRpb24tbWFwcGluZyBleGNlcHRpb249ImphdmEubGFuZy5FeGNlcHRpb24iIHJlc3VsdD0iZXJyb3IiIC8+Ci0JICAgCTwvZ2xvYmFsLWV4Y2VwdGlvbi1tYXBwaW5ncz4KLQkgIAotCSAgICAKLSAgICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9ImNhdXNlc2VjdXJpdHlleGNlcHRpb24iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5hY3Rpb24uUmVnaXN0ZXIiIG1ldGhvZD0idGhyb3dTZWN1cml0eUV4Y2VwdGlvbiI+Ci0gICAgICAgIAk8cmVzdWx0Pi9yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLSAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9ImNhdXNlZXhjZXB0aW9uIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9InRocm93RXhjZXB0aW9uIj4KLSAgICAgICAgCTxyZXN1bHQ+L3JlZ2lzdGVyLmpzcDwvcmVzdWx0PgotICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCi0gICAgICAgIDxhY3Rpb24gbmFtZT0iY2F1c2VudWxscG9pbnRlcmV4Y2VwdGlvbiIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbi5SZWdpc3RlciIgbWV0aG9kPSJ0aHJvd051bGxQb2ludGVyRXhjZXB0aW9uIj4KLSAgICAgICAgCTxyZXN1bHQ+L3JlZ2lzdGVyLmpzcDwvcmVzdWx0PgotICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCi0gICAgICAgIDxhY3Rpb24gbmFtZT0iYWN0aW9uc3BlY2lmaWNleGNlcHRpb24iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5hY3Rpb24uUmVnaXN0ZXIiIG1ldGhvZD0idGhyb3dTZWN1cml0eUV4Y2VwdGlvbiI+Ci0gICAgICAgIAk8ZXhjZXB0aW9uLW1hcHBpbmcgZXhjZXB0aW9uPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5leGNlcHRpb25zLlNlY3VyaXR5QnJlYWNoRXhjZXB0aW9uIiAKLSAgICAgICAgCSAgIHJlc3VsdD0ibG9naW4iIC8+Ci0gICAgICAgIAk8cmVzdWx0Pi9yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLSAgICAgICAgCTxyZXN1bHQgbmFtZT0ibG9naW4iPi9sb2dpbi5qc3A8L3Jlc3VsdD4KLSAgICAgICAgPC9hY3Rpb24+Ci0KLSAgICAgICAgPCEtLSBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3N1bWUgc3VjY2VzcyBhbmQgCi0gICAgICAgIHJlbmRlciB0aGUgcmVzdWx0IGluZGV4LmpzcCAtLT4KLSAgICAgICAgPCEtLSBJZiBubyBuYW1lIHZhbHVlIGZvciB0aGUgcmVzdWx0IG5vZGUgaXMgc3BlY2lmaWVkIHRoZSBzdWNjZXNzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IC0tPgotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JCTwhLS0gSWYgdGhlIFVSTCBpcyBoZWxsby5hY3Rpb24gdGhlIGNhbGwgdGhlIGV4ZWN1dGUgbWV0aG9kIG9mIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24uCi0JCUlmIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGV4ZWN1dGUgbWV0aG9kIGlzIHN1Y2Nlc3MgcmVuZGVyIHRoZSBIZWxsb1dvcmxkLmpzcCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJoZWxsbyIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uLkhlbGxvV29ybGRBY3Rpb24iIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi9IZWxsb1dvcmxkLmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0gIDxhY3Rpb24gbmFtZT0icmVnaXN0ZXIiIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5hY3Rpb24uUmVnaXN0ZXIiIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vdGhhbmt5b3UuanNwPC9yZXN1bHQ+Ci0gIDwvYWN0aW9uPgotCi0JPC9wYWNrYWdlPgotCi08L3N0cnV0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODZhNmFiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkhlbGxvIFdvcmxkITwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj48czpwcm9wZXJ0eSB2YWx1ZT0ibWVzc2FnZVN0b3JlLm1lc3NhZ2UiIC8+PC9oMj4KLTxwPkkndmUgc2FpZCBoZWxsbyA8czpwcm9wZXJ0eSB2YWx1ZT0iaGVsbG9Db3VudCIgLz4gdGltZXMhPC9wPgotPHA+PHM6cHJvcGVydHkgdmFsdWU9Im1lc3NhZ2VTdG9yZSIgLz48L3A+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5NDk1MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQ2xhc3MtUGF0aDogDQotDQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZkMWY0Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotPGRpc3BsYXktbmFtZT5FeGNlcHRpb24gSGFuZGxpbmc8L2Rpc3BsYXktbmFtZT4KLSAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci0gIAotICAJCQkJCSAKLSAgICA8ZmlsdGVyPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubmcuZmlsdGVyLlN0cnV0c1ByZXBhcmVBbmRFeGVjdXRlRmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+Ci0KLSAgICAgPGZpbHRlci1tYXBwaW5nPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0gICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL2Vycm9yLmpzcCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL2Vycm9yLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRhODA0NC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9lcnJvci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAlPg0KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4NCi08aHRtbD4NCi0NCi0JPGhlYWQ+DQotICAgIDx0aXRsZT5FcnJvcjwvdGl0bGU+DQotCTwvaGVhZD4NCi0NCi0JPGJvZHk+DQotCQk8aDQ+VGhlIGFwcGxpY2F0aW9uIGhhcyBtYWxmdW5jdGlvbmVkLjwvaDQ+DQotCQk8cD4gIFBsZWFzZSBjb250YWN0IHRlY2huaWNhbCBzdXBwb3J0IHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+IA0KLQkJDQotCQk8IS0tIHRoZSBleGNlcHRpb24gYW5kIGV4Y2VwdGlvblN0YWNrIGJlYW4gcHJvcGVydGllcw0KLQkJd2VyZSBjcmVhdGVkIGJ5IFN0cnV0czIncyBFeGNlcHRpb24gSW50ZXJjZXB0ZXIgIC0tPg0KLQkJPGg0PkV4Y2VwdGlvbiBOYW1lOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uIiAvPiA8L2g0Pg0KLQkJPGg0PkV4Y2VwdGlvbiBEZXRhaWxzOiA8czpwcm9wZXJ0eSB2YWx1ZT0iZXhjZXB0aW9uU3RhY2siIC8+PC9oND4gDQotCQkNCi0JDQotCSAgICA8cD48YSBocmVmPSJpbmRleC5qc3AiPlJldHVybiB0byB0aGUgaG9tZSBwYWdlLjwvYT48L3A+DQotCSAgDQotCQkNCi0JPC9ib2R5Pg0KLQkNCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTM4YmNjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5FeGNlcHRpb24gSGFuZGxpbmcgU3RydXRzIDIgQXBwbGljYXRpb24gLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2hlbGxvJy8+Ij5IZWxsbyBXb3JsZDwvYT48L3A+Ci08czp1cmwgYWN0aW9uPSJoZWxsbyIgdmFyPSJoZWxsb0xpbmsiPgotICA8czpwYXJhbSBuYW1lPSJ1c2VyTmFtZSI+QnJ1Y2UgUGhpbGxpcHM8L3M6cGFyYW0+Ci08L3M6dXJsPgotPHA+PGEgaHJlZj0iJHtoZWxsb0xpbmt9Ij5IZWxsbyBCcnVjZSBQaGlsbGlwczwvYT48L3A+Ci0KLTxwPkdldCB5b3VyIG93biBwZXJzb25hbCBoZWxsbyBieSBmaWxsaW5nIG91dCBhbmQgc3VibWl0dGluZyB0aGlzIGZvcm0uPC9wPgotCi08czpmb3JtIGFjdGlvbj0iaGVsbG8iPgotCi0JPHM6dGV4dGZpZWxkIG5hbWU9InVzZXJOYW1lIiBsYWJlbD0iWW91ciBuYW1lIiAvPgotCQotCTxzOnN1Ym1pdCB2YWx1ZT0iU3VibWl0IiAvPgotCi08L3M6Zm9ybT4KLQotPHA+PGEgaHJlZj0icmVnaXN0ZXIuanNwIj5QbGVhc2UgcmVnaXN0ZXI8L2E+IGZvciBvdXIgcHJpemUgZHJhd2luZy48L3A+Ci0KLTxwPjxhIGhyZWY9JzxzOnVybCBhY3Rpb249ImNhdXNlZXhjZXB0aW9uIiAvPicgPkNhdXNlIEV4Y2VwdGlvbjwvYT48L3A+IAotCi08cD48YSBocmVmPSc8czp1cmwgYWN0aW9uPSJjYXVzZW51bGxwb2ludGVyZXhjZXB0aW9uIiAvPicgPkNhdXNlIE51bGwgUG9pbnRlciBFeGNlcHRpb248L2E+PC9wPiAKLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iY2F1c2VzZWN1cml0eWV4Y2VwdGlvbiIgLz4nID5DYXVzZSBHbG9iYWwgU2VjdXJpdHkgRXhjZXB0aW9uPC9hPjwvcD4gCi0KLTxwPjxhIGhyZWY9JzxzOnVybCBhY3Rpb249ImFjdGlvbnNwZWNpZmljZXhjZXB0aW9uIiAvPicgPkNhdXNlIEFjdGlvblNwZWNpZmljIFNlY3VyaXR5IEV4Y2VwdGlvbjwvYT48L3A+Ci0gIAotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL2xvZ2luLmpzcCBiL3N0cnV0czJleGFtcGxlcy9leGNlcHRpb25faGFuZGxpbmcvc3JjL21haW4vd2ViYXBwL2xvZ2luLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1OTM5Mi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9sb2dpbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+RXhjZXB0aW9uIEhhbmRsaW5nIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gTG9naW48L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+WW91IE11c3QgTG9naW48L2gxPgotPHA+UGxlYXNlIGxvZ2luPC9wPgotCi08cD48YSBocmVmPSJpbmRleC5qc3AiPlJldHVybiB0byB0aGUgaG9tZSBwYWdlLjwvYT48L3A+Ci0JICAKLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZGFjNzYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0ZXI8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+UmVnaXN0ZXIgZm9yIGEgcHJpemUgYnkgY29tcGxldGluZyB0aGlzIGZvcm0uPC9oMz4KLQotPHM6Zm9ybSBhY3Rpb249InJlZ2lzdGVyIj4KLQotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgbGFiZWw9IkZpcnN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkICBuYW1lPSJwZXJzb25CZWFuLmxhc3ROYW1lIiBsYWJlbD0iTGFzdCBuYW1lIiAvPgotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmVtYWlsIiAgbGFiZWwgPSJFbWFpbCIvPiAgCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uYWdlIiAgbGFiZWw9IkFnZSIgIC8+Ci0gCSAgCi0gICAJICA8czpzdWJtaXQvPgotICAgCSAgCi08L3M6Zm9ybT4JCi0gCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvc2VjdXJpdHllcnJvci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9zZWN1cml0eWVycm9yLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODczYzQ2Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC9zZWN1cml0eWVycm9yLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiICU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPg0KLTxodG1sPg0KLQ0KLQk8aGVhZD4NCi0gICAgPHRpdGxlPlNlY3VyaXR5IEVycm9yPC90aXRsZT4NCi0JPC9oZWFkPg0KLQ0KLQk8Ym9keT4NCi0JCTxoND5UaGVyZSBoYXMgYmVlbiBhIHNlY3VyaXR5IGVycm9yLjwvaDQ+DQotCQk8cD4gIFBsZWFzZSBjb250YWN0IHRlY2huaWNhbCBzdXBwb3J0IHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+IA0KLQkJDQotCQk8IS0tIHRoZSBleGNlcHRpb24gYW5kIGV4Y2VwdGlvblN0YWNrIGJlYW4gcHJvcGVydGllcw0KLQkJd2VyZSBjcmVhdGVkIGJ5IFN0cnV0czIncyBFeGNlcHRpb24gSW50ZXJjZXB0ZXIgLS0+DQotCQk8aDQ+RXhjZXB0aW9uIE5hbWU6IDxzOnByb3BlcnR5IHZhbHVlPSJleGNlcHRpb24iIC8+IDwvaDQ+DQotCQk8aDQ+RXhjZXB0aW9uIERldGFpbHM6IDxzOnByb3BlcnR5IHZhbHVlPSJleGNlcHRpb25TdGFjayIgLz48L2g0PiANCi0JCQ0KLQkNCi0JICAgIDxwPjxhIGhyZWY9ImluZGV4LmpzcCI+UmV0dXJuIHRvIHRoZSBob21lIHBhZ2UuPC9hPjwvcD4NCi0JICANCi0JCQ0KLQk8L2JvZHk+DQotCQ0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjZXB0aW9uX2hhbmRsaW5nL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjODQ1YmMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2VwdGlvbl9oYW5kbGluZy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0cmF0aW9uIFN1Y2Nlc3NmdWw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+VGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBmb3IgYSBwcml6ZS48L2gzPgotCi08cD5Zb3VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDI2ODE1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIEV4Y2x1ZGUgUGFyYW1zIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2V4Y2x1ZGVfcGFyYW1ldGVycy9pbmRleC5hY3Rpb24uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCi1UaGUgYXBwbGljYXRpb24gd3JpdGVzIGxvZyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS4gIEluIFRvbWNhdCB0aGUgCi1sb2cgbWVzc2FnZXMgY2FuIGJlIGZvdW5kIGluIGNhdGFsaW5hLm91dCAoW3RvbWNhdCBob21lXS9sb2dzKS4KLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDdlYTg4Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+ZXhjbHVkZV9wYXJhbWV0ZXJzPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPmV4Y2x1ZGVfcGFyYW1ldGVyczwvbmFtZT4KLSAgCi0gICAgIDxkZXNjcmlwdGlvbj5TdHJ1dHMgMiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUKLSAgZXhjbHVkZSBwYXJhbWV0ZXJzIGdldHRpbmcgc3RhcnRlZCB0dXRvcmlhbDwvZGVzY3JpcHRpb24+Ci0KLSAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLSAgCi0gIAk8YnVpbGQ+Ci0JCTxmaW5hbE5hbWU+ZXhjbHVkZV9wYXJhbWV0ZXJzPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLQkKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTc2YTlkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LmFjdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuU3RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkNhck1vZGVsc1NlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkNhck1vZGVsc1NlcnZpY2VIYXJkQ29kZWQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkVkaXRTZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZUluTWVtb3J5OwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5QcmVwYXJhYmxlOwotCi0vKioKLSAqIEFjdHMgYXMgYSBjb250cm9sbGVyIHRvIGhhbmRsZSBhY3Rpb25zCi0gKiByZWxhdGVkIHRvIGVkaXRpbmcgYSBQZXJzb24uCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRWRpdEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgaW1wbGVtZW50cyBQcmVwYXJhYmxlIHsKLQkKLQlwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nID0gTG9nZ2VyLmdldExvZ2dlciggRWRpdEFjdGlvbi5jbGFzcy5nZXROYW1lKCkgKTsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQlwcml2YXRlIEVkaXRTZXJ2aWNlIGVkaXRTZXJ2aWNlID0gbmV3IEVkaXRTZXJ2aWNlSW5NZW1vcnkoKTsKLQkKLQlwcml2YXRlIENhck1vZGVsc1NlcnZpY2UgY2FyTW9kZWxzU2VydmljZSA9IG5ldyBDYXJNb2RlbHNTZXJ2aWNlSGFyZENvZGVkKCkgOwotCQotCXByaXZhdGUgUGVyc29uIHBlcnNvbkJlYW47Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gc3BvcnRzID0geyJmb290YmFsbCIsICJiYXNlYmFsbCIsICJiYXNrZXRiYWxsIiB9OwotCQotCXByaXZhdGUgU3RyaW5nIFtdIGdlbmRlcnMgPSB7Im1hbGUiLCAiZmVtYWxlIiwgIm5vdCBzdXJlIiB9OwotCQotCXByaXZhdGUgTGlzdDxTdGF0ZT4gc3RhdGVzIDsKLQotCXByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsc0F2YWlsYWJsZSA7Ci0JCi0JCi0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBwcmVwYXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlsb2cuaW5mbygiSW4gcHJlcGFyZSBtZXRob2QuLi4iKTsKLQkJCi0JCWNhck1vZGVsc0F2YWlsYWJsZSA9IGNhck1vZGVsc1NlcnZpY2UuZ2V0Q2FyTW9kZWxzKCkgOwotCQkKLQkJc2V0UGVyc29uQmVhbiggZWRpdFNlcnZpY2UuZ2V0UGVyc29uKCkgKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHByZXBhcmVFeGVjdXRlKCkgewotCQkKLQkJbG9nLmluZm8oIkluIHByZXBhcmVFeGVjdXRlIG1ldGhvZC4uLiIpOwotCQkKLQkJCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJbG9nLmluZm8gKCJJbiBleGVjdXRlIG1ldGhvZC4uLiIpOwotCQkKLQkgICAgZWRpdFNlcnZpY2Uuc2F2ZVBlcnNvbiggZ2V0UGVyc29uQmVhbigpICk7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHByZXBhcmVJbnB1dCgpIHsKLQkJCi0JCWxvZy5pbmZvKCJJbiBwcmVwYXJlSW5wdXQgbWV0aG9kLi4uIik7Ci0JCQotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGlucHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlsb2cuaW5mbygiSW4gaW5wdXQgbWV0aG9kLi4uIik7Ci0JCQotCQkKLQkJcmV0dXJuIElOUFVUOwotCX0KLQkKLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbkJlYW4oKSB7Ci0JCQotCQkKLQkJcmV0dXJuIHBlcnNvbkJlYW47Ci0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQZXJzb25CZWFuKFBlcnNvbiBwZXJzb24pIHsKLQkJCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0JCQotCX0KLQotCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTcG9ydHMoKSB7Ci0JCXJldHVybiBBcnJheXMuYXNMaXN0KHNwb3J0cyk7Ci0JfQotCQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0R2VuZGVycygpIHsKLQkJCi0JCXJldHVybiBBcnJheXMuYXNMaXN0KGdlbmRlcnMpOwotCQkKLQl9Ci0KLQotCi0JcHVibGljIExpc3Q8U3RhdGU+IGdldFN0YXRlcygpIHsKLQkJCi0JCXN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RhdGU+KCk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiQVoiLCAiQXJpem9uYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiQ0EiLCAiQ2FsaWZvcm5pYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiRkwiLCAiRmxvcmlkYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiS1MiLCAiS2Fuc2FzIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJOWSIsICJOZXcgWW9yayIpICk7Ci0JCQotCQlyZXR1cm4gc3RhdGVzOwotCX0KLQotCi0KLQlwdWJsaWMgU3RyaW5nIFtdIGdldENhck1vZGVsc0F2YWlsYWJsZSgpIHsKLQkJcmV0dXJuIGNhck1vZGVsc0F2YWlsYWJsZTsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvUGVyc29uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxMjdlYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc3BvcnQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc2lkZW5jeTsKLSAgICBwcml2YXRlIGJvb2xlYW4gb3ZlcjIxOwotICAgIHByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsczsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIFN0cmluZyBwaG9uZU51bWJlcjsKLSAgIAotIAotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICB9Ci0KLQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTcG9ydChTdHJpbmcgc3BvcnQpIHsKLQkJdGhpcy5zcG9ydCA9IHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEdlbmRlcihTdHJpbmcgZ2VuZGVyKSB7Ci0JCXRoaXMuZ2VuZGVyID0gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0R2VuZGVyKCkgewotCQlyZXR1cm4gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3BvcnQoKSB7Ci0JCXJldHVybiBzcG9ydDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNpZGVuY3koU3RyaW5nIHJlc2lkZW5jeSkgewotCQl0aGlzLnJlc2lkZW5jeSA9IHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlc2lkZW5jeSgpIHsKLQkJcmV0dXJuIHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRPdmVyMjEoYm9vbGVhbiBvdmVyMjEpIHsKLQkJdGhpcy5vdmVyMjEgPSBvdmVyMjE7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNPdmVyMjEoKSB7Ci0JCXJldHVybiBvdmVyMjE7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FyTW9kZWxzKFN0cmluZyBbXSBjYXJNb2RlbHMpIHsKLQkJdGhpcy5jYXJNb2RlbHMgPSBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBbXSBnZXRDYXJNb2RlbHMoKSB7Ci0JCXJldHVybiBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBMYXN0IE5hbWU6ICAiICsgZ2V0TGFzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBGYXZvcml0ZSBTcG9ydDogIiArIGdldFNwb3J0KCkgKyAiIHwgIiArCi0gICAgICAgICIgR2VuZGVyOiAiICsgZ2V0R2VuZGVyKCkgKyAiIHwgIiArICAKLSAgICAgICAgIiBSZXNpZGVuY3k6ICIgKyBnZXRSZXNpZGVuY3koKSArICIgfCAiICsKLSAgICAgICAgIiBPdmVyIDIxOiAiICsgaXNPdmVyMjEoKSAgKyAiIHwgIiArCi0gICAgICAgICIgQ2FyIG1vZGVsczogIiArIEFycmF5cy5hc0xpc3QoIGdldENhck1vZGVscygpICkgKyAiIHwgIiArCi0gICAgICAgICIgRW1haWw6ICIgKyBnZXRFbWFpbCgpICsgIiB8ICIgKwotICAgICAgICAiIFBob25lOiAiICsgZ2V0UGhvbmVOdW1iZXIoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgIH0KLQotCXB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgewotCQl0aGlzLmVtYWlsID0gZW1haWw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKLQkJcmV0dXJuIGVtYWlsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBob25lTnVtYmVyKFN0cmluZyBwaG9uZU51bWJlcikgewotCQl0aGlzLnBob25lTnVtYmVyID0gcGhvbmVOdW1iZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQaG9uZU51bWJlcigpIHsKLQkJcmV0dXJuIHBob25lTnVtYmVyOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5MjdlMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU3RhdGUgewotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlQWJicjsKLQkKLQlwcml2YXRlIFN0cmluZyBzdGF0ZU5hbWU7Ci0JCi0JcHVibGljIFN0YXRlIChTdHJpbmcgc3RhdGVBYmJyLCBTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCQotCQl0aGlzLnN0YXRlQWJiciA9IHN0YXRlQWJicjsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlQWJicihTdHJpbmcgc3RhdGVBYmJyKSB7Ci0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVBYmJyKCkgewotCQlyZXR1cm4gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlTmFtZShTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCXRoaXMuc3RhdGVOYW1lID0gc3RhdGVOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVOYW1lKCkgewotCQlyZXR1cm4gc3RhdGVOYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkKLQkJcmV0dXJuIGdldFN0YXRlQWJicigpIDsKLQkJCi0JfQotCQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0Nhck1vZGVsc1NlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvQ2FyTW9kZWxzU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTMxZGJlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvQ2FyTW9kZWxzU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyoqCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7Ci0KLS8qKgotICogU3BlY2lmaWVzIHdoYXQgbWV0aG9kcyBhIENhck1vZGVsU2VydmljZQotICogY2xhc3MgbXVzdCBpbXBsZW1lbnQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbgotICogYWJvdXQgY2FyIG1vZGVscy4KLSAqIEBhdXRob3IgYnBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENhck1vZGVsc1NlcnZpY2UgewotCQotCQotCVN0cmluZyBbXSBnZXRDYXJNb2RlbHMoKSA7Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvQ2FyTW9kZWxzU2VydmljZUhhcmRDb2RlZC5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9DYXJNb2RlbHNTZXJ2aWNlSGFyZENvZGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkN2ViMjAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9DYXJNb2RlbHNTZXJ2aWNlSGFyZENvZGVkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsKLQotLyoqCi0gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBjYXIgbW9kZWxzIHVzaW5nIGRhdGEgaGFyZC1jb2RlZAotICogaW4gdGhpcyBjbGFzcy4KLSAqIEBhdXRob3IgYnBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQ2FyTW9kZWxzU2VydmljZUhhcmRDb2RlZCBpbXBsZW1lbnRzIENhck1vZGVsc1NlcnZpY2UgewotCQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZ1tdIGdldENhck1vZGVscygpIHsKLQkJCi0JCVN0cmluZyBbXSBjYXJNb2RlbHNBdmFpbGFibGUgPSB7IkZvcmQiLCJDaHJ5c2xlciIsIlRveW90YSIsIk5pc3NhbiJ9OwotCQkKLQkJcmV0dXJuIGNhck1vZGVsc0F2YWlsYWJsZSA7Ci0JCQotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZTA1My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247DQotDQotcHVibGljIGludGVyZmFjZSBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JUGVyc29uIGdldFBlcnNvbigpIDsNCi0NCi0Jdm9pZCBzYXZlUGVyc29uKFBlcnNvbiBwZXJzb25CZWFuKTsNCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkMzVlMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLQ0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi0vKioNCi0gKiBJbXBsZW1lbnQgU2VydmljZXMgbmVlZGVkIHRvIGVkaXQgYW5kIHNhdmUNCi0gKiBhIFBlcnNvbiBvYmplY3QncyBzdGF0ZS4gIEluIHRoaXMgaW1wbGVtZW50YXRpb24NCi0gKiB0aGUgUGVyc29uIG9iamVjdCdzIHN0YXRlIGlzIHN0b3JlZCBpbiBtZW1vcnkNCi0gKiBAYXV0aG9yIGJydWNlcGhpbGxpcHMNCi0gKg0KLSAqLw0KLQ0KLXB1YmxpYyBjbGFzcyBFZGl0U2VydmljZUluTWVtb3J5IGltcGxlbWVudHMgRWRpdFNlcnZpY2Ugew0KLQkNCi0JDQotCXByaXZhdGUgc3RhdGljIFBlcnNvbiBwZXJzb24gOw0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgW10gY2FyTW9kZWxzID0geyJGb3JkIiwiTmlzc2FuIn07DQotDQotCQ0KLQlzdGF0aWMgew0KLQkJDQotCQlwZXJzb24gPSBuZXcgUGVyc29uKCk7DQotCQlwZXJzb24uc2V0Rmlyc3ROYW1lKCJCcnVjZSIpOw0KLQkJcGVyc29uLnNldExhc3ROYW1lKCJQaGlsbGlwcyIpOw0KLQkJcGVyc29uLnNldEVtYWlsKCJicGhpbGxpcHNAa3UuZWR1Iik7DQotCQlwZXJzb24uc2V0U3BvcnQoImJhc2tldGJhbGwiKTsNCi0JCXBlcnNvbi5zZXRHZW5kZXIoIm5vdCBzdXJlIik7DQotCQlwZXJzb24uc2V0UmVzaWRlbmN5KCJLUyIpOw0KLQkJcGVyc29uLnNldE92ZXIyMSh0cnVlKTsJCQ0KLQkJcGVyc29uLnNldENhck1vZGVscyggY2FyTW9kZWxzKTsJDQotCQlwZXJzb24uc2V0UGhvbmVOdW1iZXIoIjEyMy00NTYtOTk5OSIpOw0KLQ0KLQkJDQotDQotCX0NCi0NCi0JDQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uKCkgew0KLQkJDQotCQlyZXR1cm4gRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb247DQotCX0NCi0NCi0NCi0JcHVibGljIHZvaWQgc2F2ZVBlcnNvbihQZXJzb24gcGVyc29uQmVhbikgew0KLQ0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0Rmlyc3ROYW1lKHBlcnNvbkJlYW4uZ2V0Rmlyc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldExhc3ROYW1lKHBlcnNvbkJlYW4uZ2V0TGFzdE5hbWUoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0U3BvcnQocGVyc29uQmVhbi5nZXRTcG9ydCgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRHZW5kZXIoIHBlcnNvbkJlYW4uZ2V0R2VuZGVyKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFJlc2lkZW5jeSggcGVyc29uQmVhbi5nZXRSZXNpZGVuY3koKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0T3ZlcjIxKCBwZXJzb25CZWFuLmlzT3ZlcjIxKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldENhck1vZGVscyhwZXJzb25CZWFuLmdldENhck1vZGVscygpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRFbWFpbCggcGVyc29uQmVhbi5nZXRFbWFpbCgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRQaG9uZU51bWJlciggcGVyc29uQmVhbi5nZXRQaG9uZU51bWJlcigpICk7DQotDQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24tdmFsaWRhdGlvbi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTg4NGZmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24tdmFsaWRhdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08IURPQ1RZUEUgdmFsaWRhdG9ycyBQVUJMSUMKLSAgICAgICAgICItLy9BcGFjaGUgU3RydXRzLy9YV29yayBWYWxpZGF0b3IgMS4wLjMvL0VOIgotICAgICAgICAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMveHdvcmstdmFsaWRhdG9yLTEuMC4zLmR0ZCI+Ci08dmFsaWRhdG9ycz4KLSA8dmFsaWRhdG9yIHR5cGU9InJlcXVpcmVkc3RyaW5nIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5maXJzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5GaXJzdCBuYW1lIGlzIHJlcXVpcmVkLjwvbWVzc2FnZT4KLSA8L3ZhbGlkYXRvcj4KLSAgPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ubGFzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5MYXN0IG5hbWUgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotIDx2YWxpZGF0b3IgdHlwZT0icmVxdWlyZWRzdHJpbmciPgotIAk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLmVtYWlsPC9wYXJhbT4KLSAJPG1lc3NhZ2U+RW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJlbWFpbCI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4uZW1haWw8L3BhcmFtPgotIAk8bWVzc2FnZT5FbWFpbCBhZGRyZXNzIG5vdCB2YWxpZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ucGhvbmVOdW1iZXI8L3BhcmFtPgotIAk8bWVzc2FnZT5QaG9uZSBudW1iZXIgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotPHZhbGlkYXRvciB0eXBlPSJyZWdleCI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5waG9uZU51bWJlcjwvcGFyYW0+Ci0JPHBhcmFtIG5hbWU9InJlZ2V4Ij48IVtDREFUQVtcZHszfS1cZHszfS1cZHs0fV1dPjwvcGFyYW0+Ci0JPG1lc3NhZ2U+UGhvbmUgbnVtYmVyIG11c3QgYmUgZW50ZXJlZCBhcyA5OTktOTk5LTk5OTkuPC9tZXNzYWdlPgotPC92YWxpZGF0b3I+Ci08dmFsaWRhdG9yIHR5cGU9ImZpZWxkZXhwcmVzc2lvbiI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5jYXJNb2RlbHM8L3BhcmFtPgotCTxwYXJhbSBuYW1lPSJleHByZXNzaW9uIj48IVtDREFUQVtwZXJzb25CZWFuLmNhck1vZGVscy5sZW5ndGggPiAwXV0+PC9wYXJhbT4KLQk8bWVzc2FnZT5Zb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGNhciBtb2RlbC48L21lc3NhZ2U+Ci08L3ZhbGlkYXRvcj4KLTwvdmFsaWRhdG9ycz4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcyBiL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmNDAwYS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1GaXJzdCBuYW1lDQotcGVyc29uQmVhbi5sYXN0TmFtZT1MYXN0IG5hbWUNCi1wZXJzb25CZWFuLmVtYWlsPUVtYWlsIGFkZHJlc3MNCi1wZXJzb25CZWFuLnBob25lTnVtYmVyPVBob25lIG51bWJlciAoOTk5LTk5OS05OTk5KQ0KLXBlcnNvbkJlYW4uc3BvcnQ9RmF2b3JpdGUgc3BvcnQNCi1wZXJzb25CZWFuLmdlbmRlcj1HZW5kZXINCi1wZXJzb25CZWFuLnJlc2lkZW5jeT1TdGF0ZSByZXNpZGVudA0KLXBlcnNvbkJlYW4ub3ZlcjIxPTIxIG9yIG9sZGVyDQotcGVyc29uQmVhbi5jYXJNb2RlbHM9Q2FyIG1vZGVscyBvd25lZA0KLXN1Ym1pdD1TYXZlIENoYW5nZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBlZTYyZC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiID4KLQkKLQkgICAgPGludGVyY2VwdG9ycz4KLQkgCQk8aW50ZXJjZXB0b3Itc3RhY2sgbmFtZT0iYXBwRGVmYXVsdCI+Ci0JICAgICAgICAJIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0iZGVmYXVsdFN0YWNrIj4KLQkgICAgICAJCQk8cGFyYW0gbmFtZT0iZXhjZXB0aW9uLmxvZ0VuYWJsZWQiPnRydWU8L3BhcmFtPgotCSAgICAgIAkJCTxwYXJhbSBuYW1lPSJleGNlcHRpb24ubG9nTGV2ZWwiPkVSUk9SPC9wYXJhbT4KLQkgICAgICAJCQk8cGFyYW0gbmFtZT0icGFyYW1zLmV4Y2x1ZGVQYXJhbXMiPmRvam9cLi4qLF5zdHJ1dHNcLi4qLF5zZXNzaW9uXC4uKixecmVxdWVzdFwuLiosXmFwcGxpY2F0aW9uXC4uKixec2VydmxldChSZXF1ZXN0fFJlc3BvbnNlKVwuLioscGFyYW1ldGVyc1wuLi4qLHN1Ym1pdDwvcGFyYW0+Ci0JICAgCQkJPC9pbnRlcmNlcHRvci1yZWY+Ci0JIAkgICAgPC9pbnRlcmNlcHRvci1zdGFjaz4KLQkJPC9pbnRlcmNlcHRvcnM+Ci0JCQotCQk8ZGVmYXVsdC1pbnRlcmNlcHRvci1yZWYgbmFtZT0iYXBwRGVmYXVsdCIgLz4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiPi9lZGl0LmpzcDwvcmVzdWx0PgotCSAgICAJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vdGhhbmt5b3UuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCi0JPC9wYWNrYWdlPgotCi08L3N0cnV0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjk4ODMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPkV4Y2x1ZGUgUGFyYW1ldGVyczwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhOTkwMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZXhjbHVkZV9wYXJhbWV0ZXJzL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08czpoZWFkIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBFZGl0IFBlcnNvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5VcGRhdGUgSW5mb3JtYXRpb248L2gxPgotCi08cD5Vc2UgdGhlIGZvcm0gYmVsb3cgdG8gZWRpdCB5b3VyIGluZm9ybWF0aW9uLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249InNhdmUiIG1ldGhvZD0icG9zdCI+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgLz4gCi08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAvPiAKLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uZW1haWwiIC8+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLnBob25lTnVtYmVyIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5zcG9ydCIgbGlzdD0ic3BvcnRzIiAvPgotPHM6cmFkaW8ga2V5PSJwZXJzb25CZWFuLmdlbmRlciIgbGlzdD0iZ2VuZGVycyIgLz4KLTxzOnNlbGVjdCBrZXk9InBlcnNvbkJlYW4ucmVzaWRlbmN5IiBsaXN0PSJzdGF0ZXMiIGxpc3RLZXk9InN0YXRlQWJiciIgbGlzdFZhbHVlPSJzdGF0ZU5hbWUiIC8+Ci08czpjaGVja2JveCBrZXk9InBlcnNvbkJlYW4ub3ZlcjIxIiAvPgotPHM6Y2hlY2tib3hsaXN0IGtleT0icGVyc29uQmVhbi5jYXJNb2RlbHMiIGxpc3Q9ImNhck1vZGVsc0F2YWlsYWJsZSIgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODIwOWQ4Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwIGIvc3RydXRzMmV4YW1wbGVzL2V4Y2x1ZGVfcGFyYW1ldGVycy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmEzMDZmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9leGNsdWRlX3BhcmFtZXRlcnMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjc0OTViLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3NpbmcvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFByb2Nlc3NpbmcgRm9ybXMgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvZm9ybV9wcm9jZXNzaW5nL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3NpbmcvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3NpbmcvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjNzdjYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotICA8YXJ0aWZhY3RJZD5mb3JtX3Byb2Nlc3Npbmc8L2FydGlmYWN0SWQ+Ci0KLSAgPG5hbWU+Rm9ybSBQcm9jZXNzaW5nPC9uYW1lPgotIAotICA8ZGVzY3JpcHRpb24+Rm9ybSBwcm9jZXNzaW5nIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmZvcm1fcHJvY2Vzc2luZzwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZGE0OS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWwuTWVzc2FnZVN0b3JlOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgU3RydXRzIDIgY29udHJvbGxlciB0aGF0IHJlc3BvbmRzCi0gKiB0byBhIHVzZXIgYWN0aW9uIGJ5IHNldHRpbmcgdGhlIHZhbHVlCi0gKiBvZiB0aGUgTWVzc2FnZSBtb2RlbCBjbGFzcywgYW5kIHJldHVybnMgYSBTdHJpbmcgCi0gKiByZXN1bHQuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JLyoqCi0JICogVGhlIG1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBtZXNzYWdlCi0JICogdG8gZGlzcGxheSBpbiB0aGUgdmlldy4KLQkgKi8KLQlwcml2YXRlIE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmU7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGhlbGxvQ291bnQgPSAwOwotCQotCXB1YmxpYyBpbnQgZ2V0SGVsbG9Db3VudCgpIHsKLQkJcmV0dXJuIGhlbGxvQ291bnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVsbG9Db3VudChpbnQgaGVsbG9Db3VudCkgewotCQlIZWxsb1dvcmxkQWN0aW9uLmhlbGxvQ291bnQgPSBoZWxsb0NvdW50OwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyB1c2VyTmFtZTsKLQotCXB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB7Ci0JCXJldHVybiB1c2VyTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VyTmFtZShTdHJpbmcgdXNlck5hbWUpIHsKLQkJdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lOwotCX0KLQotCS8qCi0JICogQ3JlYXRlcyB0aGUgTWVzc2FnZVN0b3JlIG1vZGVsIG9iamVjdCwgCi0JICogaW5jcmVhc2UgaGVsbG9Db3VudCBieSAxIGFuZCAKLQkgKiByZXR1cm5zIHN1Y2Nlc3MuICBUaGUgTWVzc2FnZVN0b3JlIG1vZGVsCi0JICogb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSB2aWV3LgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQjZXhlY3V0ZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQltZXNzYWdlU3RvcmUgPSBuZXcgTWVzc2FnZVN0b3JlKCkgOwotCQkKLQkJLy9BY3Rpb24gaW5jbHVkZWQgYSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVyIG9mIHVzZXJOYW1lCi0JCS8vb3IgYSBmb3JtIGZpZWxkIHdpdGggbmFtZSBvZiB1c2VyTmFtZQotCQlpZiAodXNlck5hbWUgIT0gbnVsbCkgewotCQkJCi0JCQltZXNzYWdlU3RvcmUuc2V0TWVzc2FnZSggbWVzc2FnZVN0b3JlLmdldE1lc3NhZ2UoKSArICIgIiArIHVzZXJOYW1lKTsKLQkJCQotCQl9Ci0JCQotCQloZWxsb0NvdW50Kys7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLQlwdWJsaWMgTWVzc2FnZVN0b3JlIGdldE1lc3NhZ2VTdG9yZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2VTdG9yZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlU3RvcmUoTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZSkgewotCQl0aGlzLm1lc3NhZ2VTdG9yZSA9IG1lc3NhZ2VTdG9yZTsKLQl9Ci0JCi0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZmNlZWIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWw7Ci0KLS8qKgotICogTW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgYSBtZXNzYWdlLgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VTdG9yZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKLQkKLQlwdWJsaWMgTWVzc2FnZVN0b3JlKCkgewotCQkKLQkJc2V0TWVzc2FnZSgiSGVsbG8gU3RydXRzIFVzZXIiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBtZXNzYWdlICsgIiAoZnJvbSB0b1N0cmluZykiOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmMmU3My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsLlBlcnNvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdGVyIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQotCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQkvL2NhbGwgU2VydmljZSBjbGFzcyB0byBzdG9yZSBwZXJzb25CZWFuJ3Mgc3RhdGUgaW4gZGF0YWJhc2UKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCQkKLQl9Ci0JCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCQkKLQkJcmV0dXJuIHBlcnNvbkJlYW47Ci0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQZXJzb25CZWFuKFBlcnNvbiBwZXJzb24pIHsKLQkJCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDIwYmJiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIubW9kZWw7Ci0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7Ci0gICAgcHJpdmF0ZSBpbnQgYWdlOwotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEVtYWlsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpCi0gICAgewotICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRBZ2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBZ2UoIGludCBhZ2UpCi0gICAgewotICAgICAgICB0aGlzLmFnZSA9IGFnZTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJGaXJzdCBOYW1lOiAiICsgZ2V0Rmlyc3ROYW1lKCkgKyAiIExhc3QgTmFtZTogICIgKyBnZXRMYXN0TmFtZSgpICsgCi0gICAgICAgICIgRW1haWw6ICAgICAgIiArIGdldEVtYWlsKCkgKyAiIEFnZTogICAgICAiICsgZ2V0QWdlKCkgOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2YjU5NC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCQk8IS0tIElmIHRoZSBVUkwgaXMgaGVsbG8uYWN0aW9uIHRoZSBjYWxsIHRoZSBleGVjdXRlIG1ldGhvZCBvZiBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uLgotCQlJZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBleGVjdXRlIG1ldGhvZCBpcyBzdWNjZXNzIHJlbmRlciB0aGUgSGVsbG9Xb3JsZC5qc3AgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaGVsbG8iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbi5IZWxsb1dvcmxkQWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vSGVsbG9Xb3JsZC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCSAgPGFjdGlvbiBuYW1lPSJyZWdpc3RlciIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbi5SZWdpc3RlciIgbWV0aG9kPSJleGVjdXRlIj4KLQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vdGhhbmt5b3UuanNwPC9yZXN1bHQ+Ci0JICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2YTZhYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5IZWxsbyBXb3JsZCE8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+PHM6cHJvcGVydHkgdmFsdWU9Im1lc3NhZ2VTdG9yZS5tZXNzYWdlIiAvPjwvaDI+Ci08cD5JJ3ZlIHNhaWQgaGVsbG8gPHM6cHJvcGVydHkgdmFsdWU9ImhlbGxvQ291bnQiIC8+IHRpbWVzITwvcD4KLTxwPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUiIC8+PC9wPgotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmZTg4MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+Rm9ybV9Qcm9jZXNzaW5nX1N0cnV0czJfTXZuPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MWY1MDUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdoZWxsbycvPiI+SGVsbG8gV29ybGQ8L2E+PC9wPgotPHM6dXJsIGFjdGlvbj0iaGVsbG8iIHZhcj0iaGVsbG9MaW5rIj4KLSAgPHM6cGFyYW0gbmFtZT0idXNlck5hbWUiPkJydWNlIFBoaWxsaXBzPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7aGVsbG9MaW5rfSI+SGVsbG8gQnJ1Y2UgUGhpbGxpcHM8L2E+PC9wPgotCi08cD5HZXQgeW91ciBvd24gcGVyc29uYWwgaGVsbG8gYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhpcyBmb3JtLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249ImhlbGxvIj4KLQotCTxzOnRleHRmaWVsZCBuYW1lPSJ1c2VyTmFtZSIgbGFiZWw9IllvdXIgbmFtZSIgLz4KLQkKLQk8czpzdWJtaXQgdmFsdWU9IlN1Ym1pdCIgLz4KLQotPC9zOmZvcm0+Ci0KLTxwPjxhIGhyZWY9InJlZ2lzdGVyLmpzcCI+UGxlYXNlIHJlZ2lzdGVyPC9hPiBmb3Igb3VyIHByaXplIGRyYXdpbmcuPC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vd2ViYXBwL3JlZ2lzdGVyLmpzcCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3Byb2Nlc3Npbmcvc3JjL21haW4vd2ViYXBwL3JlZ2lzdGVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYWM3Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5SZWdpc3RlcjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMz5SZWdpc3RlciBmb3IgYSBwcml6ZSBieSBjb21wbGV0aW5nIHRoaXMgZm9ybS48L2gzPgotCi08czpmb3JtIGFjdGlvbj0icmVnaXN0ZXIiPgotCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZmlyc3ROYW1lIiBsYWJlbD0iRmlyc3QgbmFtZSIgLz4KLSAJICA8czp0ZXh0ZmllbGQgIG5hbWU9InBlcnNvbkJlYW4ubGFzdE5hbWUiIGxhYmVsPSJMYXN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uZW1haWwiICBsYWJlbCA9IkVtYWlsIi8+ICAKLSAJICA8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uQmVhbi5hZ2UiICBsYWJlbD0iQWdlIiAgLz4KLSAJICAKLSAgIAkgIDxzOnN1Ym1pdC8+Ci0gICAJICAKLTwvczpmb3JtPgkKLSAKLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV9wcm9jZXNzaW5nL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjODQ1YmMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fcHJvY2Vzc2luZy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0cmF0aW9uIFN1Y2Nlc3NmdWw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+VGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBmb3IgYSBwcml6ZS48L2gzPgotCi08cD5Zb3VyIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjY4NTRmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3MvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIEZvcm0gVGFncyB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLVRoZSB3YXIgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSB0YXJnZXQgc3ViLWZvbGRlci4KLQotQ29weSB0aGUgd2FyIGZpbGUgdG8geW91ciBTZXJ2bGV0IGNvbnRhaW5lciAoZS5nLiBUb21jYXQsIEdsYXNzRmlzaCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9mb3JtX3RhZ3MvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjhmOGZmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3MvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+Zm9ybV90YWdzPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPmZvcm1fdGFnczwvbmFtZT4KLQotICA8ZGVzY3JpcHRpb24+Rm9ybSB0YWdzIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gICAgICA8YnVpbGQ+Ci0JCTxmaW5hbE5hbWU+Zm9ybV90YWdzPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMDdmZjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlN0YXRlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuRWRpdFNlcnZpY2VJbk1lbW9yeTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gZWRpdGluZyBhIFBlcnNvbi4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBFZGl0U2VydmljZSBlZGl0U2VydmljZSA9IG5ldyBFZGl0U2VydmljZUluTWVtb3J5KCk7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBzcG9ydHMgPSB7ImZvb3RiYWxsIiwgImJhc2ViYWxsIiwgImJhc2tldGJhbGwiIH07Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gZ2VuZGVycyA9IHsibWFsZSIsICJmZW1hbGUiLCAibm90IHN1cmUiIH07Ci0JCi0JcHJpdmF0ZSBMaXN0PFN0YXRlPiBzdGF0ZXMgOwotCi0JcHJpdmF0ZSBTdHJpbmcgW10gY2FyTW9kZWxzQXZhaWxhYmxlID0geyJGb3JkIiwiQ2hyeXNsZXIiLCJUb3lvdGEiLCJOaXNzYW4ifTsKLQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkgICAgZWRpdFNlcnZpY2Uuc2F2ZVBlcnNvbiggZ2V0UGVyc29uQmVhbigpICk7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCQotCXB1YmxpYyBTdHJpbmcgaW5wdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXNldFBlcnNvbkJlYW4oIGVkaXRTZXJ2aWNlLmdldFBlcnNvbigpICk7Ci0JCQotCQlyZXR1cm4gSU5QVVQ7Ci0JfQotCQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQkJCi0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFNwb3J0cygpIHsKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3Qoc3BvcnRzKTsKLQl9Ci0JCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRHZW5kZXJzKCkgewotCQkKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3QoZ2VuZGVycyk7Ci0JCQotCX0KLQotCi0KLQlwdWJsaWMgTGlzdDxTdGF0ZT4gZ2V0U3RhdGVzKCkgewotCQkKLQkJc3RhdGVzID0gbmV3IEFycmF5TGlzdDxTdGF0ZT4oKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJBWiIsICJBcml6b25hIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJDQSIsICJDYWxpZm9ybmlhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJGTCIsICJGbG9yaWRhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJLUyIsICJLYW5zYXMiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIk5ZIiwgIk5ldyBZb3JrIikgKTsKLQkJCi0JCXJldHVybiBzdGF0ZXM7Ci0JfQotCi0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzQXZhaWxhYmxlKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzQXZhaWxhYmxlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvUGVyc29uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkyYThkZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc3BvcnQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc2lkZW5jeTsKLSAgICBwcml2YXRlIGJvb2xlYW4gb3ZlcjIxOwotICAgIHByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsczsKLSAKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rmlyc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBmaXJzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMYXN0TmFtZShTdHJpbmcgbGFzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7Ci0gICAgfQotCi0KLQotCi0JcHVibGljIHZvaWQgc2V0U3BvcnQoU3RyaW5nIHNwb3J0KSB7Ci0JCXRoaXMuc3BvcnQgPSBzcG9ydDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHZW5kZXIoU3RyaW5nIGdlbmRlcikgewotCQl0aGlzLmdlbmRlciA9IGdlbmRlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEdlbmRlcigpIHsKLQkJcmV0dXJuIGdlbmRlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNwb3J0KCkgewotCQlyZXR1cm4gc3BvcnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UmVzaWRlbmN5KFN0cmluZyByZXNpZGVuY3kpIHsKLQkJdGhpcy5yZXNpZGVuY3kgPSByZXNpZGVuY3k7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRSZXNpZGVuY3koKSB7Ci0JCXJldHVybiByZXNpZGVuY3k7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3ZlcjIxKGJvb2xlYW4gb3ZlcjIxKSB7Ci0JCXRoaXMub3ZlcjIxID0gb3ZlcjIxOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzT3ZlcjIxKCkgewotCQlyZXR1cm4gb3ZlcjIxOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhck1vZGVscyhTdHJpbmcgW10gY2FyTW9kZWxzKSB7Ci0JCXRoaXMuY2FyTW9kZWxzID0gY2FyTW9kZWxzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJGaXJzdCBOYW1lOiAiICsgZ2V0Rmlyc3ROYW1lKCkgKyAiIHwgIiArCi0gICAgICAgICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAiIHwgIiArCi0gICAgICAgICIgRmF2b3JpdGUgU3BvcnQ6ICIgKyBnZXRTcG9ydCgpICsgIiB8ICIgKwotICAgICAgICAiIEdlbmRlcjogIiArIGdldEdlbmRlcigpICsgIiB8ICIgKyAgCi0gICAgICAgICIgUmVzaWRlbmN5OiAiICsgZ2V0UmVzaWRlbmN5KCkgKyAiIHwgIiArCi0gICAgICAgICIgT3ZlciAyMTogIiArIGlzT3ZlcjIxKCkgICsgIiB8ICIgKwotICAgICAgICAiIENhciBtb2RlbHM6ICIgKyBBcnJheXMuYXNMaXN0KCBnZXRDYXJNb2RlbHMoKSApIDsKLSAgICAgICAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiOTI3ZTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotcHVibGljIGNsYXNzIFN0YXRlIHsKLQkKLQlwcml2YXRlIFN0cmluZyBzdGF0ZUFiYnI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdGVOYW1lOwotCQotCXB1YmxpYyBTdGF0ZSAoU3RyaW5nIHN0YXRlQWJiciwgU3RyaW5nIHN0YXRlTmFtZSkgewotCQkKLQkJdGhpcy5zdGF0ZUFiYnIgPSBzdGF0ZUFiYnI7Ci0JCXRoaXMuc3RhdGVOYW1lID0gc3RhdGVOYW1lOwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZUFiYnIoU3RyaW5nIHN0YXRlQWJicikgewotCQl0aGlzLnN0YXRlQWJiciA9IHN0YXRlQWJicjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXRlQWJicigpIHsKLQkJcmV0dXJuIHN0YXRlQWJicjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZU5hbWUoU3RyaW5nIHN0YXRlTmFtZSkgewotCQl0aGlzLnN0YXRlTmFtZSA9IHN0YXRlTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXRlTmFtZSgpIHsKLQkJcmV0dXJuIHN0YXRlTmFtZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBnZXRTdGF0ZUFiYnIoKSA7Ci0JCQotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTJlMDUzLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIEVkaXRTZXJ2aWNlIHsNCi0JDQotCQ0KLQlQZXJzb24gZ2V0UGVyc29uKCkgOw0KLQ0KLQl2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pOw0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjliMWQwLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOw0KLQ0KLS8qKg0KLSAqIEltcGxlbWVudCBTZXJ2aWNlcyBuZWVkZWQgdG8gZWRpdCBhbmQgc2F2ZQ0KLSAqIGEgUGVyc29uIG9iamVjdCdzIHN0YXRlLiAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbg0KLSAqIHRoZSBQZXJzb24gb2JqZWN0J3Mgc3RhdGUgaXMgc3RvcmVkIGluIG1lbW9yeQ0KLSAqIEBhdXRob3IgYnJ1Y2VwaGlsbGlwcw0KLSAqDQotICovDQotcHVibGljIGNsYXNzIEVkaXRTZXJ2aWNlSW5NZW1vcnkgaW1wbGVtZW50cyBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgUGVyc29uIHBlcnNvbiA7DQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBbXSBjYXJNb2RlbHMgPSB7IkZvcmQiLCJOaXNzYW4ifTsNCi0NCi0JDQotCXN0YXRpYyB7DQotCQkNCi0JCXBlcnNvbiA9IG5ldyBQZXJzb24oKTsNCi0JCXBlcnNvbi5zZXRGaXJzdE5hbWUoIkJydWNlIik7DQotCQlwZXJzb24uc2V0TGFzdE5hbWUoIlBoaWxsaXBzIik7DQotCQlwZXJzb24uc2V0U3BvcnQoImJhc2tldGJhbGwiKTsNCi0JCXBlcnNvbi5zZXRHZW5kZXIoIm5vdCBzdXJlIik7DQotCQlwZXJzb24uc2V0UmVzaWRlbmN5KCJLUyIpOw0KLQkJcGVyc29uLnNldE92ZXIyMSh0cnVlKTsJCQ0KLQkJcGVyc29uLnNldENhck1vZGVscyggY2FyTW9kZWxzKTsJCQ0KLQ0KLQl9DQotDQotCQ0KLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbigpIHsNCi0JCQ0KLQkJcmV0dXJuIEVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uOw0KLQl9DQotDQotDQotCXB1YmxpYyB2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pIHsNCi0NCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEZpcnN0TmFtZShwZXJzb25CZWFuLmdldEZpcnN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRMYXN0TmFtZShwZXJzb25CZWFuLmdldExhc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFNwb3J0KHBlcnNvbkJlYW4uZ2V0U3BvcnQoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0R2VuZGVyKCBwZXJzb25CZWFuLmdldEdlbmRlcigpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRSZXNpZGVuY3koIHBlcnNvbkJlYW4uZ2V0UmVzaWRlbmN5KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldE92ZXIyMSggcGVyc29uQmVhbi5pc092ZXIyMSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRDYXJNb2RlbHMocGVyc29uQmVhbi5nZXRDYXJNb2RlbHMoKSApOw0KLQ0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyODY5ZGIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1GaXJzdCBuYW1lDQotcGVyc29uQmVhbi5sYXN0TmFtZT1MYXN0IG5hbWUNCi1wZXJzb25CZWFuLnNwb3J0PUZhdm9yaXRlIHNwb3J0DQotcGVyc29uQmVhbi5nZW5kZXI9R2VuZGVyDQotcGVyc29uQmVhbi5yZXNpZGVuY3k9U3RhdGUgcmVzaWRlbnQNCi1wZXJzb25CZWFuLm92ZXIyMT0yMSBvciBvbGRlcg0KLXBlcnNvbkJlYW4uY2FyTW9kZWxzPUNhciBtb2RlbHMgb3duZWQNCi1zdWJtaXQ9U2F2ZSBDaGFuZ2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYzVlNWQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgCTxyZXN1bHQgbmFtZT0ic3VjY2VzcyI+L3RoYW5reW91LmpzcDwvcmVzdWx0PgotCSAgICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5NDk1MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQ2xhc3MtUGF0aDogDQotDQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWRkOTMzLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotPGRpc3BsYXktbmFtZT5Gb3JtIFRhZ3M8L2Rpc3BsYXktbmFtZT4KLSAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci0gIAotICAJCQkJCSAKLSAgICA8ZmlsdGVyPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubmcuZmlsdGVyLlN0cnV0c1ByZXBhcmVBbmRFeGVjdXRlRmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+Ci0KLSAgICAgPGZpbHRlci1tYXBwaW5nPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0gICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3RhZ3Mvc3JjL21haW4vd2ViYXBwL2VkaXQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OGY2M2UuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPHM6aGVhZCAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+U3RydXRzIDIgRm9ybSBUYWdzIC0gRWRpdCBQZXJzb248L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+VXBkYXRlIEluZm9ybWF0aW9uPC9oMT4KLQotPHA+VXNlIHRoZSBmb3JtIGJlbG93IHRvIGVkaXQgeW91ciBpbmZvcm1hdGlvbi48L3A+Ci0KLTxzOmZvcm0gYWN0aW9uPSJzYXZlIiBtZXRob2Q9InBvc3QiPgotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5maXJzdE5hbWUiIC8+IAotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5sYXN0TmFtZSIgLz4gCi08czpzZWxlY3Qga2V5PSJwZXJzb25CZWFuLnNwb3J0IiBsaXN0PSJzcG9ydHMiIC8+Ci08czpyYWRpbyBrZXk9InBlcnNvbkJlYW4uZ2VuZGVyIiBsaXN0PSJnZW5kZXJzIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5yZXNpZGVuY3kiIGxpc3Q9InN0YXRlcyIgbGlzdEtleT0ic3RhdGVBYmJyIiBsaXN0VmFsdWU9InN0YXRlTmFtZSIgLz4KLTxzOmNoZWNrYm94IGtleT0icGVyc29uQmVhbi5vdmVyMjEiIC8+Ci08czpjaGVja2JveGxpc3Qga2V5PSJwZXJzb25CZWFuLmNhck1vZGVscyIgbGlzdD0iY2FyTW9kZWxzQXZhaWxhYmxlIiAvPgotPHM6c3VibWl0IGtleT0ic3VibWl0IiAvPgotPC9zOmZvcm0+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjA5ZDguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlN0cnV0cyAyIEZvcm0gVGFncyAtIFdlbGNvbWU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+V2VsY29tZSBUbyBTdHJ1dHMgMiE8L2gxPgotCi08cD48YSBocmVmPSc8czp1cmwgYWN0aW9uPSJlZGl0IiAvPicgPkVkaXQgeW91ciBpbmZvcm1hdGlvbjwvYT48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV90YWdzL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTMwNmYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdGFncy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+VXBkYXRlIFN1Y2Nlc3NmdWw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxoMT5VcGRhdGVkIEluZm9ybWF0aW9uPC9oMT4KLQotCi08cD5Zb3VyIGluZm9ybWF0aW9uOiA8czpwcm9wZXJ0eSB2YWx1ZT0icGVyc29uQmVhbiIgLz4gPC9wPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMWJmMDIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotVGhpcyBpcyB0aGUgZXhhbXBsZSBwcm9qZWN0IHJlZmVycmVkIHRvIGluIHRoZQotU3RydXRzIDIgZG9jdW1lbnRhdGlvbiwgRm9ybSBWYWxpZGF0aW9uIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zvcm1fdmFsaWRhdGlvbi9pbmRleC5hY3Rpb24uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhN2I2MzkuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxwYXJlbnQ+Ci0gICAgPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+c3RydXRzMmV4YW1wbGVzPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotICA8L3BhcmVudD4KLQotICA8YXJ0aWZhY3RJZD5mb3JtX3ZhbGlkYXRpb248L2FydGlmYWN0SWQ+Ci0KLSAgPG5hbWU+Rm9ybSB2YWxpZGF0aW9uPC9uYW1lPgotCi08ZGVzY3JpcHRpb24+Rm9ybSB2YWxpZGF0aW9uIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmZvcm1fdmFsaWRhdGlvbjwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0JCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZGE0OS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWwuTWVzc2FnZVN0b3JlOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgU3RydXRzIDIgY29udHJvbGxlciB0aGF0IHJlc3BvbmRzCi0gKiB0byBhIHVzZXIgYWN0aW9uIGJ5IHNldHRpbmcgdGhlIHZhbHVlCi0gKiBvZiB0aGUgTWVzc2FnZSBtb2RlbCBjbGFzcywgYW5kIHJldHVybnMgYSBTdHJpbmcgCi0gKiByZXN1bHQuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JLyoqCi0JICogVGhlIG1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBtZXNzYWdlCi0JICogdG8gZGlzcGxheSBpbiB0aGUgdmlldy4KLQkgKi8KLQlwcml2YXRlIE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmU7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGhlbGxvQ291bnQgPSAwOwotCQotCXB1YmxpYyBpbnQgZ2V0SGVsbG9Db3VudCgpIHsKLQkJcmV0dXJuIGhlbGxvQ291bnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVsbG9Db3VudChpbnQgaGVsbG9Db3VudCkgewotCQlIZWxsb1dvcmxkQWN0aW9uLmhlbGxvQ291bnQgPSBoZWxsb0NvdW50OwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyB1c2VyTmFtZTsKLQotCXB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB7Ci0JCXJldHVybiB1c2VyTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VyTmFtZShTdHJpbmcgdXNlck5hbWUpIHsKLQkJdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lOwotCX0KLQotCS8qCi0JICogQ3JlYXRlcyB0aGUgTWVzc2FnZVN0b3JlIG1vZGVsIG9iamVjdCwgCi0JICogaW5jcmVhc2UgaGVsbG9Db3VudCBieSAxIGFuZCAKLQkgKiByZXR1cm5zIHN1Y2Nlc3MuICBUaGUgTWVzc2FnZVN0b3JlIG1vZGVsCi0JICogb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSB2aWV3LgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQjZXhlY3V0ZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQltZXNzYWdlU3RvcmUgPSBuZXcgTWVzc2FnZVN0b3JlKCkgOwotCQkKLQkJLy9BY3Rpb24gaW5jbHVkZWQgYSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVyIG9mIHVzZXJOYW1lCi0JCS8vb3IgYSBmb3JtIGZpZWxkIHdpdGggbmFtZSBvZiB1c2VyTmFtZQotCQlpZiAodXNlck5hbWUgIT0gbnVsbCkgewotCQkJCi0JCQltZXNzYWdlU3RvcmUuc2V0TWVzc2FnZSggbWVzc2FnZVN0b3JlLmdldE1lc3NhZ2UoKSArICIgIiArIHVzZXJOYW1lKTsKLQkJCQotCQl9Ci0JCQotCQloZWxsb0NvdW50Kys7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLQlwdWJsaWMgTWVzc2FnZVN0b3JlIGdldE1lc3NhZ2VTdG9yZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2VTdG9yZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlU3RvcmUoTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZSkgewotCQl0aGlzLm1lc3NhZ2VTdG9yZSA9IG1lc3NhZ2VTdG9yZTsKLQl9Ci0JCi0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZmNlZWIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWw7Ci0KLS8qKgotICogTW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgYSBtZXNzYWdlLgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VTdG9yZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKLQkKLQlwdWJsaWMgTWVzc2FnZVN0b3JlKCkgewotCQkKLQkJc2V0TWVzc2FnZSgiSGVsbG8gU3RydXRzIFVzZXIiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBtZXNzYWdlICsgIiAoZnJvbSB0b1N0cmluZykiOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5ODdjYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsLlBlcnNvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdGVyIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQotCQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJLy9jYWxsIFNlcnZpY2UgY2xhc3MgdG8gc3RvcmUgcGVyc29uQmVhbidzIHN0YXRlIGluIGRhdGFiYXNlCi0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCl7Ci0JCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0Rmlyc3ROYW1lKCkubGVuZ3RoKCkgPT0gMCApewkKLQotCQkJYWRkRmllbGRFcnJvciggInBlcnNvbkJlYW4uZmlyc3ROYW1lIiwgIkZpcnN0IG5hbWUgaXMgcmVxdWlyZWQuIiApOwotCQkJCi0JCX0KLQkJCi0JCQkJCi0JCWlmICggcGVyc29uQmVhbi5nZXRFbWFpbCgpLmxlbmd0aCgpID09IDAgKXsJCi0KLQkJCWFkZEZpZWxkRXJyb3IoICJwZXJzb25CZWFuLmVtYWlsIiwgIkVtYWlsIGlzIHJlcXVpcmVkLiIgKTsKLQkJCQotCQl9Ci0JCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0QWdlKCkgPCAxOCApewkKLQotCQkJYWRkRmllbGRFcnJvciggInBlcnNvbkJlYW4uYWdlIiwgIkFnZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSAxOCBvciBvbGRlciIgKTsKLQkJCQotCQl9Ci0JCQotCQkKLQl9Ci0KLQkKLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbkJlYW4oKSB7Ci0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvbW9kZWwvUGVyc29uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvbW9kZWwvUGVyc29uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMjBiYmIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5tb2RlbDsKLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIGludCBhZ2U7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZW1haWwgPSBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFnZSggaW50IGFnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWdlID0gYWdlOwotICAgIH0KLQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAKLSAgICAgICAgIiBFbWFpbDogICAgICAiICsgZ2V0RW1haWwoKSArICIgQWdlOiAgICAgICIgKyBnZXRBZ2UoKSA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4KLQotPCEtLSBWZXJzaW9uOiAxLjIgLS0+Ci0KLTwhLS0gQSBjb25maWd1cmF0aW9uIGVsZW1lbnQgY29uc2lzdHMgb2Ygb3B0aW9uYWwgcmVuZGVyZXIKLWVsZW1lbnRzLGFwcGVuZGVyIGVsZW1lbnRzLCBjYXRlZ29yaWVzIGFuZCBhbiBvcHRpb25hbCByb290Ci1lbGVtZW50LiAtLT4KLQotPCFFTEVNRU5UIGxvZzRqOmNvbmZpZ3VyYXRpb24gKHJlbmRlcmVyKiwgYXBwZW5kZXIqLHBsdWdpbiosIChjYXRlZ29yeXxsb2dnZXIpKixyb290PywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+Ci0KLTwhLS0gVGhlICJ0aHJlc2hvbGQiIGF0dHJpYnV0ZSB0YWtlcyBhIGxldmVsIHZhbHVlIGJlbG93IHdoaWNoIC0tPgotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+Ci0KLTwhLS0gU2V0dGluZyB0aGUgImRlYnVnIiBlbmFibGUgdGhlIHByaW50aW5nIG9mIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgICAtLT4KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCEtLSBCeSBkZWZhdWx0LCBkZWJ1ZyBhdHRyaWJ1dGUgaXMgIm51bGwiLCBtZWFuaW5nIHRoYXQgd2Ugbm90IGRvIHRvdWNoIC0tPgotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPgotPCEtLSBhdHRyaWJ1dGUgY2FuIGJlIG1pc2xlYWRpbmcuIFRoZSB0aHJlc2hvbGQgZmllbGQgb2YgYSByZXBvc2l0b3J5CSAtLT4KLTwhLS0gY2Fubm90IGJlIHNldCB0byBudWxsLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSAtLT4KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gCi08IS0tIGtlZXBzIGl0cyBvbGQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgIAotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB0aHJlc2hvbGQgICAgICAgICAgICAgICAgKGFsbHx0cmFjZXxkZWJ1Z3xpbmZvfHdhcm58ZXJyb3J8ZmF0YWx8b2ZmfG51bGwpICJudWxsIgotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIgotICByZXNldCAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2UpICJmYWxzZSIKLT4KLQotPCEtLSByZW5kZXJlciBlbGVtZW50cyBhbGxvdyB0aGUgdXNlciB0byBjdXN0b21pemUgdGhlIGNvbnZlcnNpb24gb2YgIC0tPgotPCEtLSBtZXNzYWdlIG9iamVjdHMgdG8gU3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IUVMRU1FTlQgcmVuZGVyZXIgRU1QVFk+Ci08IUFUVExJU1QgcmVuZGVyZXIKLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVECi0gIHJlbmRlcmluZ0NsYXNzIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIEFwcGVuZGVycyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBhIGNsYXNzLiAtLT4KLTwhLS0gQXBwZW5kZXJzIG1heSBjb250YWluIGFuIGVycm9yIGhhbmRsZXIsIGEgbGF5b3V0LCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+Ci08IUVMRU1FTlQgYXBwZW5kZXIgKGVycm9ySGFuZGxlcj8sIHBhcmFtKiwKLSAgICAgIHJvbGxpbmdQb2xpY3k/LCB0cmlnZ2VyaW5nUG9saWN5PywgY29ubmVjdGlvblNvdXJjZT8sCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBhcHBlbmRlcgotICBuYW1lIAkJQ0RBVEEgCSNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+Ci08IUFUVExJU1QgbGF5b3V0Ci0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGZpbHRlciAocGFyYW0qKT4KLTwhQVRUTElTVCBmaWx0ZXIKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IS0tIEVycm9ySGFuZGxlcnMgY2FuIGJlIG9mIGFueSBjbGFzcy4gVGhleSBjYW4gYWRtaXQgYW55IG51bWJlciBvZiAtLT4KLTwhLS0gcGFyYW1ldGVycy4gLS0+Ci0KLTwhRUxFTUVOVCBlcnJvckhhbmRsZXIgKHBhcmFtKiwgcm9vdC1yZWY/LCBsb2dnZXItcmVmKiwgIGFwcGVuZGVyLXJlZj8pPiAKLTwhQVRUTElTVCBlcnJvckhhbmRsZXIKLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCAKLT4KLQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPgotCi08IUVMRU1FTlQgbG9nZ2VyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBsb2dnZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPgotPCFBVFRMSVNUIHBhcmFtCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVECi0gIHZhbHVlCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotCi08IS0tIFRoZSBwcmlvcml0eSBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+Ci08IUFUVExJU1QgcHJpb3JpdHkKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+Ci08IUVMRU1FTlQgbGV2ZWwgKHBhcmFtKik+Ci08IUFUVExJU1QgbGV2ZWwKLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRAotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+Ci08IUVMRU1FTlQgY2F0ZWdvcnkgKHBhcmFtKiwocHJpb3JpdHl8bGV2ZWwpPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBjYXRlZ29yeQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLTwhLS0gSWYgbm8gbGV2ZWwgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPgotPCFFTEVNRU5UIGxvZ2dlciAobGV2ZWw/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGxvZ2dlcgotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotCi08IUVMRU1FTlQgY2F0ZWdvcnlGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSAKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPgotPCFBVFRMSVNUIGxvZ2dlckZhY3RvcnkKLSAgIGNsYXNzICAgICAgICBDREFUQSAjUkVRVUlSRUQ+Ci0KLTwhRUxFTUVOVCBhcHBlbmRlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgYXBwZW5kZXItcmVmCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPgotPCFFTEVNRU5UIHBsdWdpbiAocGFyYW0qLCBjb25uZWN0aW9uU291cmNlPyk+Ci08IUFUVExJU1QgcGx1Z2luCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBjb25uZWN0aW9uU291cmNlIChkYXRhU291cmNlPywgcGFyYW0qKT4KLTwhQVRUTElTVCBjb25uZWN0aW9uU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPgotPCFBVFRMSVNUIGRhdGFTb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHRyaWdnZXJpbmdQb2xpY3kgKChwYXJhbXxmaWx0ZXIpKik+Ci08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCByb2xsaW5nUG9saWN5IChwYXJhbSopPgotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4KLTwhLS0gdG91Y2ggdGhlIHByaW9yaXR5IG9mIHJvb3QuIC0tPgotPCEtLSBUaGUgcm9vdCBjYXRlZ29yeSBhbHdheXMgZXhpc3RzIGFuZCBjYW5ub3QgYmUgc3ViY2xhc3NlZC4gLS0+Ci08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gICAgICAgICAgICAgICAgICAgICAgIEEgbG9nZ2luZyBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50U2V0Ci0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgIENEQVRBICNGSVhFRCAiaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iIAotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiAKLSAgaW5jbHVkZXNMb2NhdGlvbkluZm8gICAodHJ1ZXxmYWxzZSkgInRydWUiCi0+Ci0KLQotCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIAotICAgICAgICAgICAgICAgICAgICAgICBsb2c0ajpsb2NhdGlvbkluZm8/LCBsb2c0ajpwcm9wZXJ0aWVzPykgPgotCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnQKLSAgICBsb2dnZXIgICAgIENEQVRBICNSRVFVSVJFRAotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGhyZWFkICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lc3RhbXAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGxvZzRqOk5EQyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6bG9jYXRpb25JbmZvIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbwotICBjbGFzcyAgQ0RBVEEJI1JFUVVJUkVECi0gIG1ldGhvZCBDREFUQQkjUkVRVUlSRUQKLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRAotICBsaW5lICAgQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpwcm9wZXJ0aWVzIChsb2c0ajpkYXRhKik+Ci0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPgotPCFBVFRMSVNUIGxvZzRqOmRhdGEKLSAgbmFtZSAgIENEQVRBCSNSRVFVSVJFRAotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVECi0+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4KLQotPGxvZzRqOmNvbmZpZ3VyYXRpb24geG1sbnM6bG9nNGo9Imh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIj4KLSAgICAKLSAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dCI+IAotICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb252ZXJzaW9uUGF0dGVybiIgdmFsdWU9IiVkICUtNXAgJWMuJU06JUwgLSAlbSVuIi8+IAotICAgICAgIDwvbGF5b3V0PiAKLSAgICA8L2FwcGVuZGVyPgotIAotICAgIDwhLS0gc3BlY2lmeSB0aGUgbG9nZ2luZyBsZXZlbCBmb3IgbG9nZ2VycyBmcm9tIG90aGVyIGxpYnJhcmllcyAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9ImNvbS5vcGVuc3ltcGhvbnkiPgotICAgIAk8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjMxZDQyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCI+Ci0KLSAgICAgICAgPCEtLSBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3N1bWUgc3VjY2VzcyBhbmQgCi0gICAgICAgIHJlbmRlciB0aGUgcmVzdWx0IGluZGV4LmpzcCAtLT4KLSAgICAgICAgPCEtLSBJZiBubyBuYW1lIHZhbHVlIGZvciB0aGUgcmVzdWx0IG5vZGUgaXMgc3BlY2lmaWVkIHRoZSBzdWNjZXNzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IC0tPgotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JCTwhLS0gSWYgdGhlIFVSTCBpcyBoZWxsby5hY3Rpb24gdGhlIGNhbGwgdGhlIGV4ZWN1dGUgbWV0aG9kIG9mIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24uCi0JCUlmIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGV4ZWN1dGUgbWV0aG9kIGlzIHN1Y2Nlc3MgcmVuZGVyIHRoZSBIZWxsb1dvcmxkLmpzcCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJoZWxsbyIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uLkhlbGxvV29ybGRBY3Rpb24iIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi9IZWxsb1dvcmxkLmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JICA8YWN0aW9uIG5hbWU9InJlZ2lzdGVyIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi90aGFua3lvdS5qc3A8L3Jlc3VsdD4KLQkJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L3JlZ2lzdGVyLmpzcDwvcmVzdWx0PgotCSAgPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NmE2YWIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SGVsbG8gV29ybGQhPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUubWVzc2FnZSIgLz48L2gyPgotPHA+SSd2ZSBzYWlkIGhlbGxvIDxzOnByb3BlcnR5IHZhbHVlPSJoZWxsb0NvdW50IiAvPiB0aW1lcyE8L3A+Ci08cD48czpwcm9wZXJ0eSB2YWx1ZT0ibWVzc2FnZVN0b3JlIiAvPjwvcD4KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2luZGV4JyAvPiIgPlJldHVybiB0byBob21lIHBhZ2U8L2E+LjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYzY2NDQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPkZvcm0gVmFsaWRhdGlvbjwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTFmNTA1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5CYXNpYyBTdHJ1dHMgMiBBcHBsaWNhdGlvbiAtIFdlbGNvbWU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+V2VsY29tZSBUbyBTdHJ1dHMgMiE8L2gxPgotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naGVsbG8nLz4iPkhlbGxvIFdvcmxkPC9hPjwvcD4KLTxzOnVybCBhY3Rpb249ImhlbGxvIiB2YXI9ImhlbGxvTGluayI+Ci0gIDxzOnBhcmFtIG5hbWU9InVzZXJOYW1lIj5CcnVjZSBQaGlsbGlwczwvczpwYXJhbT4KLTwvczp1cmw+Ci08cD48YSBocmVmPSIke2hlbGxvTGlua30iPkhlbGxvIEJydWNlIFBoaWxsaXBzPC9hPjwvcD4KLQotPHA+R2V0IHlvdXIgb3duIHBlcnNvbmFsIGhlbGxvIGJ5IGZpbGxpbmcgb3V0IGFuZCBzdWJtaXR0aW5nIHRoaXMgZm9ybS48L3A+Ci0KLTxzOmZvcm0gYWN0aW9uPSJoZWxsbyI+Ci0KLQk8czp0ZXh0ZmllbGQgbmFtZT0idXNlck5hbWUiIGxhYmVsPSJZb3VyIG5hbWUiIC8+Ci0JCi0JPHM6c3VibWl0IHZhbHVlPSJTdWJtaXQiIC8+Ci0KLTwvczpmb3JtPgotCi08cD48YSBocmVmPSJyZWdpc3Rlci5qc3AiPlBsZWFzZSByZWdpc3RlcjwvYT4gZm9yIG91ciBwcml6ZSBkcmF3aW5nLjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YWNiMTUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0ZXI8L3RpdGxlPgotPHM6aGVhZCAvPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+UmVnaXN0ZXIgZm9yIGEgcHJpemUgYnkgY29tcGxldGluZyB0aGlzIGZvcm0uPC9oMz4KLQotPHM6Zm9ybSBhY3Rpb249InJlZ2lzdGVyIj4KLQotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgbGFiZWw9IkZpcnN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkICBuYW1lPSJwZXJzb25CZWFuLmxhc3ROYW1lIiBsYWJlbD0iTGFzdCBuYW1lIiAvPgotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmVtYWlsIiAgbGFiZWwgPSJFbWFpbCIvPiAgCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uYWdlIiAgbGFiZWw9IkFnZSIgIC8+Ci0gCSAgCi0gICAJICA8czpzdWJtaXQvPgotICAgCSAgCi08L3M6Zm9ybT4JCi0gCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1fdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg0NWJjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdHJhdGlvbiBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgzPlRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgZm9yIGEgcHJpemUuPC9oMz4KLQotPHA+WW91ciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb246IDxzOnByb3BlcnR5IHZhbHVlPSJwZXJzb25CZWFuIiAvPiA8L3A+Ci0KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2luZGV4JyAvPiIgPlJldHVybiB0byBob21lIHBhZ2U8L2E+LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjFhODBjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBGb3JtIFhNTCBWYWxpZGF0aW9uIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zvcm1feG1sX3ZhbGlkYXRpb24vaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNzVlNTUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+Zm9ybV94bWxfdmFsaWRhdGlvbjwvYXJ0aWZhY3RJZD4KLQotICA8bmFtZT5mb3JtX3htbF92YWxpZGF0aW9uPC9uYW1lPgotICAKLTxkZXNjcmlwdGlvbj5Gb3JtIFhNTCB2YWxpZGF0aW9uIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmZvcm1feG1sX3ZhbGlkYXRpb248L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEwN2ZmMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlN0YXRlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuRWRpdFNlcnZpY2VJbk1lbW9yeTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gZWRpdGluZyBhIFBlcnNvbi4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBFZGl0U2VydmljZSBlZGl0U2VydmljZSA9IG5ldyBFZGl0U2VydmljZUluTWVtb3J5KCk7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBzcG9ydHMgPSB7ImZvb3RiYWxsIiwgImJhc2ViYWxsIiwgImJhc2tldGJhbGwiIH07Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gZ2VuZGVycyA9IHsibWFsZSIsICJmZW1hbGUiLCAibm90IHN1cmUiIH07Ci0JCi0JcHJpdmF0ZSBMaXN0PFN0YXRlPiBzdGF0ZXMgOwotCi0JcHJpdmF0ZSBTdHJpbmcgW10gY2FyTW9kZWxzQXZhaWxhYmxlID0geyJGb3JkIiwiQ2hyeXNsZXIiLCJUb3lvdGEiLCJOaXNzYW4ifTsKLQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkgICAgZWRpdFNlcnZpY2Uuc2F2ZVBlcnNvbiggZ2V0UGVyc29uQmVhbigpICk7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCQotCXB1YmxpYyBTdHJpbmcgaW5wdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXNldFBlcnNvbkJlYW4oIGVkaXRTZXJ2aWNlLmdldFBlcnNvbigpICk7Ci0JCQotCQlyZXR1cm4gSU5QVVQ7Ci0JfQotCQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQkJCi0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFNwb3J0cygpIHsKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3Qoc3BvcnRzKTsKLQl9Ci0JCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRHZW5kZXJzKCkgewotCQkKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3QoZ2VuZGVycyk7Ci0JCQotCX0KLQotCi0KLQlwdWJsaWMgTGlzdDxTdGF0ZT4gZ2V0U3RhdGVzKCkgewotCQkKLQkJc3RhdGVzID0gbmV3IEFycmF5TGlzdDxTdGF0ZT4oKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJBWiIsICJBcml6b25hIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJDQSIsICJDYWxpZm9ybmlhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJGTCIsICJGbG9yaWRhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJLUyIsICJLYW5zYXMiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIk5ZIiwgIk5ldyBZb3JrIikgKTsKLQkJCi0JCXJldHVybiBzdGF0ZXM7Ci0JfQotCi0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzQXZhaWxhYmxlKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzQXZhaWxhYmxlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDEyN2ViLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc3BvcnQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc2lkZW5jeTsKLSAgICBwcml2YXRlIGJvb2xlYW4gb3ZlcjIxOwotICAgIHByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsczsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIFN0cmluZyBwaG9uZU51bWJlcjsKLSAgIAotIAotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICB9Ci0KLQotCi0KLQlwdWJsaWMgdm9pZCBzZXRTcG9ydChTdHJpbmcgc3BvcnQpIHsKLQkJdGhpcy5zcG9ydCA9IHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEdlbmRlcihTdHJpbmcgZ2VuZGVyKSB7Ci0JCXRoaXMuZ2VuZGVyID0gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0R2VuZGVyKCkgewotCQlyZXR1cm4gZ2VuZGVyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3BvcnQoKSB7Ci0JCXJldHVybiBzcG9ydDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNpZGVuY3koU3RyaW5nIHJlc2lkZW5jeSkgewotCQl0aGlzLnJlc2lkZW5jeSA9IHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlc2lkZW5jeSgpIHsKLQkJcmV0dXJuIHJlc2lkZW5jeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRPdmVyMjEoYm9vbGVhbiBvdmVyMjEpIHsKLQkJdGhpcy5vdmVyMjEgPSBvdmVyMjE7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNPdmVyMjEoKSB7Ci0JCXJldHVybiBvdmVyMjE7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FyTW9kZWxzKFN0cmluZyBbXSBjYXJNb2RlbHMpIHsKLQkJdGhpcy5jYXJNb2RlbHMgPSBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBbXSBnZXRDYXJNb2RlbHMoKSB7Ci0JCXJldHVybiBjYXJNb2RlbHM7Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBMYXN0IE5hbWU6ICAiICsgZ2V0TGFzdE5hbWUoKSArICIgfCAiICsKLSAgICAgICAgIiBGYXZvcml0ZSBTcG9ydDogIiArIGdldFNwb3J0KCkgKyAiIHwgIiArCi0gICAgICAgICIgR2VuZGVyOiAiICsgZ2V0R2VuZGVyKCkgKyAiIHwgIiArICAKLSAgICAgICAgIiBSZXNpZGVuY3k6ICIgKyBnZXRSZXNpZGVuY3koKSArICIgfCAiICsKLSAgICAgICAgIiBPdmVyIDIxOiAiICsgaXNPdmVyMjEoKSAgKyAiIHwgIiArCi0gICAgICAgICIgQ2FyIG1vZGVsczogIiArIEFycmF5cy5hc0xpc3QoIGdldENhck1vZGVscygpICkgKyAiIHwgIiArCi0gICAgICAgICIgRW1haWw6ICIgKyBnZXRFbWFpbCgpICsgIiB8ICIgKwotICAgICAgICAiIFBob25lOiAiICsgZ2V0UGhvbmVOdW1iZXIoKTsKLSAgICAgICAgCi0gICAgICAgIAotICAgIH0KLQotCXB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkgewotCQl0aGlzLmVtYWlsID0gZW1haWw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRFbWFpbCgpIHsKLQkJcmV0dXJuIGVtYWlsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBob25lTnVtYmVyKFN0cmluZyBwaG9uZU51bWJlcikgewotCQl0aGlzLnBob25lTnVtYmVyID0gcGhvbmVOdW1iZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQaG9uZU51bWJlcigpIHsKLQkJcmV0dXJuIHBob25lTnVtYmVyOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjkyN2UxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsOwotCi1wdWJsaWMgY2xhc3MgU3RhdGUgewotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlQWJicjsKLQkKLQlwcml2YXRlIFN0cmluZyBzdGF0ZU5hbWU7Ci0JCi0JcHVibGljIFN0YXRlIChTdHJpbmcgc3RhdGVBYmJyLCBTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCQotCQl0aGlzLnN0YXRlQWJiciA9IHN0YXRlQWJicjsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JCQotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlQWJicihTdHJpbmcgc3RhdGVBYmJyKSB7Ci0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVBYmJyKCkgewotCQlyZXR1cm4gc3RhdGVBYmJyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0YXRlTmFtZShTdHJpbmcgc3RhdGVOYW1lKSB7Ci0JCXRoaXMuc3RhdGVOYW1lID0gc3RhdGVOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U3RhdGVOYW1lKCkgewotCQlyZXR1cm4gc3RhdGVOYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkKLQkJcmV0dXJuIGdldFN0YXRlQWJicigpIDsKLQkJCi0JfQotCQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZTA1My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOw0KLQ0KLXB1YmxpYyBpbnRlcmZhY2UgRWRpdFNlcnZpY2Ugew0KLQkNCi0JDQotCVBlcnNvbiBnZXRQZXJzb24oKSA7DQotDQotCXZvaWQgc2F2ZVBlcnNvbihQZXJzb24gcGVyc29uQmVhbik7DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YSBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkMzVlMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsNCi0NCi0NCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247DQotDQotLyoqDQotICogSW1wbGVtZW50IFNlcnZpY2VzIG5lZWRlZCB0byBlZGl0IGFuZCBzYXZlDQotICogYSBQZXJzb24gb2JqZWN0J3Mgc3RhdGUuICBJbiB0aGlzIGltcGxlbWVudGF0aW9uDQotICogdGhlIFBlcnNvbiBvYmplY3QncyBzdGF0ZSBpcyBzdG9yZWQgaW4gbWVtb3J5DQotICogQGF1dGhvciBicnVjZXBoaWxsaXBzDQotICoNCi0gKi8NCi0NCi1wdWJsaWMgY2xhc3MgRWRpdFNlcnZpY2VJbk1lbW9yeSBpbXBsZW1lbnRzIEVkaXRTZXJ2aWNlIHsNCi0JDQotCQ0KLQlwcml2YXRlIHN0YXRpYyBQZXJzb24gcGVyc29uIDsNCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFtdIGNhck1vZGVscyA9IHsiRm9yZCIsIk5pc3NhbiJ9Ow0KLQ0KLQkNCi0Jc3RhdGljIHsNCi0JCQ0KLQkJcGVyc29uID0gbmV3IFBlcnNvbigpOw0KLQkJcGVyc29uLnNldEZpcnN0TmFtZSgiQnJ1Y2UiKTsNCi0JCXBlcnNvbi5zZXRMYXN0TmFtZSgiUGhpbGxpcHMiKTsNCi0JCXBlcnNvbi5zZXRFbWFpbCgiYnBoaWxsaXBzQGt1LmVkdSIpOw0KLQkJcGVyc29uLnNldFNwb3J0KCJiYXNrZXRiYWxsIik7DQotCQlwZXJzb24uc2V0R2VuZGVyKCJub3Qgc3VyZSIpOw0KLQkJcGVyc29uLnNldFJlc2lkZW5jeSgiS1MiKTsNCi0JCXBlcnNvbi5zZXRPdmVyMjEodHJ1ZSk7CQkNCi0JCXBlcnNvbi5zZXRDYXJNb2RlbHMoIGNhck1vZGVscyk7CQ0KLQkJcGVyc29uLnNldFBob25lTnVtYmVyKCIxMjMtNDU2LTk5OTkiKTsNCi0NCi0JCQ0KLQ0KLQl9DQotDQotCQ0KLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbigpIHsNCi0JCQ0KLQkJcmV0dXJuIEVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uOw0KLQl9DQotDQotDQotCXB1YmxpYyB2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pIHsNCi0NCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEZpcnN0TmFtZShwZXJzb25CZWFuLmdldEZpcnN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRMYXN0TmFtZShwZXJzb25CZWFuLmdldExhc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFNwb3J0KHBlcnNvbkJlYW4uZ2V0U3BvcnQoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0R2VuZGVyKCBwZXJzb25CZWFuLmdldEdlbmRlcigpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRSZXNpZGVuY3koIHBlcnNvbkJlYW4uZ2V0UmVzaWRlbmN5KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldE92ZXIyMSggcGVyc29uQmVhbi5pc092ZXIyMSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRDYXJNb2RlbHMocGVyc29uQmVhbi5nZXRDYXJNb2RlbHMoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0RW1haWwoIHBlcnNvbkJlYW4uZ2V0RW1haWwoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0UGhvbmVOdW1iZXIoIHBlcnNvbkJlYW4uZ2V0UGhvbmVOdW1iZXIoKSApOw0KLQ0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi12YWxpZGF0aW9uLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjkxYjk3Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIHZhbGlkYXRvcnMgUFVCTElDICItLy9BcGFjaGUgU3RydXRzLy9YV29yayBWYWxpZGF0b3IgMS4wLjMvL0VOIgotCQkiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMveHdvcmstdmFsaWRhdG9yLTEuMC4zLmR0ZCI+Ci08dmFsaWRhdG9ycz4KLSA8dmFsaWRhdG9yIHR5cGU9InJlcXVpcmVkc3RyaW5nIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5maXJzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5GaXJzdCBuYW1lIGlzIHJlcXVpcmVkLjwvbWVzc2FnZT4KLSA8L3ZhbGlkYXRvcj4KLSAgPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ubGFzdE5hbWU8L3BhcmFtPgotIAk8bWVzc2FnZT5MYXN0IG5hbWUgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotIDx2YWxpZGF0b3IgdHlwZT0icmVxdWlyZWRzdHJpbmciPgotIAk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLmVtYWlsPC9wYXJhbT4KLSAJPG1lc3NhZ2U+RW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJlbWFpbCI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4uZW1haWw8L3BhcmFtPgotIAk8bWVzc2FnZT5FbWFpbCBhZGRyZXNzIG5vdCB2YWxpZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4ucGhvbmVOdW1iZXI8L3BhcmFtPgotIAk8bWVzc2FnZT5QaG9uZSBudW1iZXIgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotPHZhbGlkYXRvciB0eXBlPSJyZWdleCI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5waG9uZU51bWJlcjwvcGFyYW0+Ci0JPHBhcmFtIG5hbWU9InJlZ2V4Ij48IVtDREFUQVtcZHszfS1cZHszfS1cZHs0fV1dPjwvcGFyYW0+Ci0JPG1lc3NhZ2U+UGhvbmUgbnVtYmVyIG11c3QgYmUgZW50ZXJlZCBhcyA5OTktOTk5LTk5OTkuPC9tZXNzYWdlPgotPC92YWxpZGF0b3I+Ci08dmFsaWRhdG9yIHR5cGU9ImZpZWxkZXhwcmVzc2lvbiI+Ci0JPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5jYXJNb2RlbHM8L3BhcmFtPgotCTxwYXJhbSBuYW1lPSJleHByZXNzaW9uIj48IVtDREFUQVtwZXJzb25CZWFuLmNhck1vZGVscy5sZW5ndGggPiAwXV0+PC9wYXJhbT4KLQk8bWVzc2FnZT5Zb3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGNhciBtb2RlbC48L21lc3NhZ2U+Ci08L3ZhbGlkYXRvcj4KLTwvdmFsaWRhdG9ycz4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Y0MDBhLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1GaXJzdCBuYW1lDQotcGVyc29uQmVhbi5sYXN0TmFtZT1MYXN0IG5hbWUNCi1wZXJzb25CZWFuLmVtYWlsPUVtYWlsIGFkZHJlc3MNCi1wZXJzb25CZWFuLnBob25lTnVtYmVyPVBob25lIG51bWJlciAoOTk5LTk5OS05OTk5KQ0KLXBlcnNvbkJlYW4uc3BvcnQ9RmF2b3JpdGUgc3BvcnQNCi1wZXJzb25CZWFuLmdlbmRlcj1HZW5kZXINCi1wZXJzb25CZWFuLnJlc2lkZW5jeT1TdGF0ZSByZXNpZGVudA0KLXBlcnNvbkJlYW4ub3ZlcjIxPTIxIG9yIG9sZGVyDQotcGVyc29uQmVhbi5jYXJNb2RlbHM9Q2FyIG1vZGVscyBvd25lZA0KLXN1Ym1pdD1TYXZlIENoYW5nZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTMwMTlkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQkgICAgPGFjdGlvbiBuYW1lPSJlZGl0IiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJpbnB1dCI+Ci0JICAgIAk8cmVzdWx0IG5hbWU9ImlucHV0Ij4vZWRpdC5qc3A8L3Jlc3VsdD4KLQkgICAgPC9hY3Rpb24+Ci0JICAgIAotCSAgICA8YWN0aW9uIG5hbWU9InNhdmUiIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LmFjdGlvbi5FZGl0QWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCSAgICAgICAgPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIAk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi90aGFua3lvdS5qc3A8L3Jlc3VsdD4KLQkgICAgPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5NDk1MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvZm9ybV94bWxfdmFsaWRhdGlvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJkMGQ3Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+Rm9ybSBYTUwgVmFsaWRhdGlvbjwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2VkaXQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2E5OTAxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08czpoZWFkIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBFZGl0IFBlcnNvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5VcGRhdGUgSW5mb3JtYXRpb248L2gxPgotCi08cD5Vc2UgdGhlIGZvcm0gYmVsb3cgdG8gZWRpdCB5b3VyIGluZm9ybWF0aW9uLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249InNhdmUiIG1ldGhvZD0icG9zdCI+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgLz4gCi08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAvPiAKLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uZW1haWwiIC8+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLnBob25lTnVtYmVyIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5zcG9ydCIgbGlzdD0ic3BvcnRzIiAvPgotPHM6cmFkaW8ga2V5PSJwZXJzb25CZWFuLmdlbmRlciIgbGlzdD0iZ2VuZGVycyIgLz4KLTxzOnNlbGVjdCBrZXk9InBlcnNvbkJlYW4ucmVzaWRlbmN5IiBsaXN0PSJzdGF0ZXMiIGxpc3RLZXk9InN0YXRlQWJiciIgbGlzdFZhbHVlPSJzdGF0ZU5hbWUiIC8+Ci08czpjaGVja2JveCBrZXk9InBlcnNvbkJlYW4ub3ZlcjIxIiAvPgotPHM6Y2hlY2tib3hsaXN0IGtleT0icGVyc29uQmVhbi5jYXJNb2RlbHMiIGxpc3Q9ImNhck1vZGVsc0F2YWlsYWJsZSIgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjA5ZDguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcCBiL3N0cnV0czJleGFtcGxlcy9mb3JtX3htbF92YWxpZGF0aW9uL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTMwNmYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2Zvcm1feG1sX3ZhbGlkYXRpb24vc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZkYmJhMzEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIEhlbGxvIFdvcmxkIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9oZWxsb193b3JsZC9pbmRleC5hY3Rpb24uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2hlbGxvd29ybGQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgwZTUzMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdAotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiCi0JeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxwYXJlbnQ+Ci0JCTxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCTxhcnRpZmFjdElkPmhlbGxvd29ybGQ8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQk8bmFtZT5IZWxsbyBXb3JsZCBTdHJ1dHMgMiBFeGFtcGxlIEFwcGxpY2F0aW9uPC9uYW1lPgotCTxkZXNjcmlwdGlvbj5IZWxsbyB3b3JsZCBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUgCi0gIFN0cnV0cyAyIEdldHRpbmcgU3RhcnRlZCB0dXRvcmlhbHM8L2Rlc2NyaXB0aW9uPgotCTxidWlsZD4KLQkJPGZpbmFsTmFtZT5oZWxsb193b3JsZDwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiOTZkYmRhLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWwuTWVzc2FnZVN0b3JlOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgU3RydXRzIDIgY29udHJvbGxlciB0aGF0IHJlc3BvbmRzCi0gKiB0byBhIHVzZXIgYWN0aW9uIGJ5IHNldHRpbmcgdGhlIHZhbHVlCi0gKiBvZiB0aGUgTWVzc2FnZSBtb2RlbCBjbGFzcywgYW5kIHJldHVybnMgYSBTdHJpbmcgCi0gKiByZXN1bHQuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JLyoqCi0JICogVGhlIG1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBtZXNzYWdlCi0JICogdG8gZGlzcGxheSBpbiB0aGUgdmlldy4KLQkgKi8KLQlwcml2YXRlIE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmU7Ci0JCi0JLyoKLQkgKiBDcmVhdGVzIHRoZSBNZXNzYWdlU3RvcmUgbW9kZWwgb2JqZWN0IGFuZCAKLQkgKiByZXR1cm5zIHN1Y2Nlc3MuICBUaGUgTWVzc2FnZVN0b3JlIG1vZGVsCi0JICogb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSB2aWV3LgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQjZXhlY3V0ZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQltZXNzYWdlU3RvcmUgPSBuZXcgTWVzc2FnZVN0b3JlKCkgOwotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLQlwdWJsaWMgTWVzc2FnZVN0b3JlIGdldE1lc3NhZ2VTdG9yZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2VTdG9yZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlU3RvcmUoTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZSkgewotCQl0aGlzLm1lc3NhZ2VTdG9yZSA9IG1lc3NhZ2VTdG9yZTsKLQl9Ci0JCi0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDNkODdkMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWw7Ci0KLS8qKgotICogTW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgYSBtZXNzYWdlLgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VTdG9yZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKLQkKLQlwdWJsaWMgTWVzc2FnZVN0b3JlKCkgewotCQkKLQkJc2V0TWVzc2FnZSgiSGVsbG8gU3RydXRzIFVzZXIiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2hlbGxvd29ybGQvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2hlbGxvd29ybGQvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0MTEyZDIzLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCQk8IS0tIElmIHRoZSBVUkwgaXMgaGVsbG8uYWN0aW9uIHRoZSBjYWxsIHRoZSBleGVjdXRlIG1ldGhvZCBvZiBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uLgotCQlJZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBleGVjdXRlIG1ldGhvZCBpcyBzdWNjZXNzIHJlbmRlciB0aGUgSGVsbG9Xb3JsZC5qc3AgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaGVsbG8iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbi5IZWxsb1dvcmxkQWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vSGVsbG9Xb3JsZC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcCBiL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjc5NTYxMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SGVsbG8gV29ybGQhPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUubWVzc2FnZSIgLz48L2gyPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3NmVmM2NkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+SGVsbG8gV29ybGQgU3RydXRzIDI8L2Rpc3BsYXktbmFtZT4KLSAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci0gIAotICAJCQkJCSAKLSAgICA8ZmlsdGVyPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubmcuZmlsdGVyLlN0cnV0c1ByZXBhcmVBbmRFeGVjdXRlRmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+Ci0KLSAgICAgPGZpbHRlci1tYXBwaW5nPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0gICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZGMxZTc4Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+QmFzaWMgU3RydXRzIDIgQXBwbGljYXRpb24gLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2hlbGxvJy8+Ij5IZWxsbyBXb3JsZDwvYT48L3A+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTY4OTBiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIEhUVFAgU2Vzc2lvbiB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLVRoZSB3YXIgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSB0YXJnZXQgc3ViLWZvbGRlci4KLQotQ29weSB0aGUgd2FyIGZpbGUgdG8geW91ciBTZXJ2bGV0IGNvbnRhaW5lciAoZS5nLiBUb21jYXQsIEdsYXNzRmlzaCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9odHRwX3Nlc3Npb24vaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFiNjQzLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0KLSAgPGFydGlmYWN0SWQ+aHR0cF9zZXNzaW9uPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPmh0dHBfc2Vzc2lvbjwvbmFtZT4KLQotIDxkZXNjcmlwdGlvbj5TdHJ1dHMgMiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUKLSAgSFRUUCBTZXNzc2lvbiBnZXR0aW5nIHN0YXJ0ZWQgdHV0b3JpYWw8L2Rlc2NyaXB0aW9uPgotCi0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAJPGJ1aWxkPgotCQk8ZmluYWxOYW1lPmh0dHBfc2Vzc2lvbjwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwNjc5Mi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5hY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuaGVsbG93b3JsZC5tb2RlbC5NZXNzYWdlU3RvcmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmludGVyY2VwdG9yLlNlc3Npb25Bd2FyZTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuaW50ZXJjZXB0b3IuUGFyYW1ldGVyTmFtZUF3YXJlOwotCi0vKioKLSAqIEFjdHMgYXMgYSBTdHJ1dHMgMiBjb250cm9sbGVyIHRoYXQgcmVzcG9uZHMKLSAqIHRvIGEgdXNlciBhY3Rpb24gYnkgc2V0dGluZyB0aGUgdmFsdWUKLSAqIG9mIHRoZSBNZXNzYWdlIG1vZGVsIGNsYXNzLCBhbmQgcmV0dXJucyBhIFN0cmluZyAKLSAqIHJlc3VsdC4KLSAqIEBhdXRob3IgQnJ1Y2UgUGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCBpbXBsZW1lbnRzIFNlc3Npb25Bd2FyZSwgUGFyYW1ldGVyTmFtZUF3YXJlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCS8qKgotCSAqIFRoZSBtb2RlbCBjbGFzcyB0aGF0IHN0b3JlcyB0aGUgbWVzc2FnZQotCSAqIHRvIGRpc3BsYXkgaW4gdGhlIHZpZXcuCi0JICovCi0JcHJpdmF0ZSBNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlOwotCQotCXByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiB1c2VyU2Vzc2lvbiA7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhFTExPX0NPVU5UID0gImhlbGxvQ291bnQiOwotCQotCQotCQotCXByaXZhdGUgU3RyaW5nIHVzZXJOYW1lOwotCi0JcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHsKLQkJcmV0dXJuIHVzZXJOYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFVzZXJOYW1lKFN0cmluZyB1c2VyTmFtZSkgewotCQl0aGlzLnVzZXJOYW1lID0gdXNlck5hbWU7Ci0JfQotCi0JLyoKLQkgKiBDcmVhdGVzIHRoZSBNZXNzYWdlU3RvcmUgbW9kZWwgb2JqZWN0LCAKLQkgKiBpbmNyZWFzZSBoZWxsb0NvdW50IHN0b3JlZCBpbiB0aGUgSFRUUCBzZXNzaW9uIGJ5IDEgYW5kIAotCSAqIHJldHVybnMgc3VjY2Vzcy4gIFRoZSBNZXNzYWdlU3RvcmUgbW9kZWwKLQkgKiBvYmplY3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHZpZXcuCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydCNleGVjdXRlKCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCW1lc3NhZ2VTdG9yZSA9IG5ldyBNZXNzYWdlU3RvcmUoKSA7Ci0JCQotCQkvL0FjdGlvbiBpbmNsdWRlZCBhIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXIgb2YgdXNlck5hbWUKLQkJLy9vciBhIGZvcm0gZmllbGQgd2l0aCBuYW1lIG9mIHVzZXJOYW1lCi0JCWlmICh1c2VyTmFtZSAhPSBudWxsKSB7Ci0JCQkKLQkJCW1lc3NhZ2VTdG9yZS5zZXRNZXNzYWdlKCBtZXNzYWdlU3RvcmUuZ2V0TWVzc2FnZSgpICsgIiAiICsgdXNlck5hbWUpOwotCQkJCi0JCX0KLQkJCi0JCWluY3JlYXNlSGVsbG9Db3VudCgpOwotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCQotCS8qKgotCSAqIEluY3JlYXNlIHRoZSB2YWx1ZSBvZiBIRUxMT19DT1VOVCBzdG9yZWQgaW4gdGhlIHVzZXIncyAKLQkgKiBIVFRQIHNlc3Npb24uICAKLQkgKi8KLQlwcml2YXRlIHZvaWQgaW5jcmVhc2VIZWxsb0NvdW50KCkgewotCQkJCi0JCUludGVnZXIgaGVsbG9Db3VudCA9IChJbnRlZ2VyKSB1c2VyU2Vzc2lvbi5nZXQoSEVMTE9fQ09VTlQpOwotCQkKLQkJaWYgKGhlbGxvQ291bnQgPT0gbnVsbCApIHsKLQkJCi0JCQloZWxsb0NvdW50ID0gMTsKLQkJCQotCQl9IGVsc2UgewotCQkJCi0JCQloZWxsb0NvdW50Kys7Ci0JCX0KLQkJCi0JCXVzZXJTZXNzaW9uLnB1dChIRUxMT19DT1VOVCwgaGVsbG9Db3VudCk7Ci0JCi0JfQotCi0JcHVibGljIE1lc3NhZ2VTdG9yZSBnZXRNZXNzYWdlU3RvcmUoKSB7Ci0JCXJldHVybiBtZXNzYWdlU3RvcmU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0TWVzc2FnZVN0b3JlKE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmUpIHsKLQkJdGhpcy5tZXNzYWdlU3RvcmUgPSBtZXNzYWdlU3RvcmU7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbihNYXA8U3RyaW5nLCBPYmplY3Q+IHNlc3Npb24pIHsKLQkJCi0JCXVzZXJTZXNzaW9uID0gc2Vzc2lvbiA7Ci0KLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gYWNjZXB0YWJsZVBhcmFtZXRlck5hbWUoU3RyaW5nIHBhcmFtZXRlck5hbWUpIHsKLQkJCi0JCWJvb2xlYW4gYWxsb3dlZFBhcmFtZXRlck5hbWUgPSB0cnVlIDsKLQkJCi0JCWlmICggcGFyYW1ldGVyTmFtZS5jb250YWlucygic2Vzc2lvbiIpICB8fCBwYXJhbWV0ZXJOYW1lLmNvbnRhaW5zKCJyZXF1ZXN0IikgKSB7Ci0JCQotCQkJYWxsb3dlZFBhcmFtZXRlck5hbWUgPSBmYWxzZSA7Ci0JCQkKLQkJfSAKLQkJCi0JCXJldHVybiBhbGxvd2VkUGFyYW1ldGVyTmFtZTsKLQl9Ci0JCi0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9oZWxsb3dvcmxkL21vZGVsL01lc3NhZ2VTdG9yZS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZmNlZWIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWw7Ci0KLS8qKgotICogTW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgYSBtZXNzYWdlLgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VTdG9yZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKLQkKLQlwdWJsaWMgTWVzc2FnZVN0b3JlKCkgewotCQkKLQkJc2V0TWVzc2FnZSgiSGVsbG8gU3RydXRzIFVzZXIiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBtZXNzYWdlICsgIiAoZnJvbSB0b1N0cmluZykiOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg4Mjc2NC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotCQotCQk8IS0tIHNldHVwIHRoZSBkZWZhdWx0LXN0YWNrIGV4Y2VwdGlvbiBtYXBwaW5nIGludGVyY2VwdG9yIAotIAkJc28gdGhhdCBhbnkgZXhjZXB0aW9ucyBub3QgY2F1Z2h0IGJ5IHRoaXMgYXBwbGljYXRpb24gCi0gCQl3aWxsIGJlIGxvZ2dlZCBhbmQgdGhlbiBoYW5kbGVkIGJ5IHRoZSBnbG9iYWwgZXhjZXB0aW9uIAotIAkJbWFwcGluZyAKLSAJCWFsc28gbW9kaWZ5IHRoZSBwYXJhbXMgaW50ZXJjZXB0b3Igc28gaXQgZXhjbHVkZXMgCi0gCQlyZXF1ZXN0IGF0dHJpYnV0ZXMgdGhhdCBzdGFydCB3aXRoIHNlc3Npb24gb3IgcmVxdWVzdC0tPgotIAkJPGludGVyY2VwdG9ycz4KLQkgCQk8aW50ZXJjZXB0b3Itc3RhY2sgbmFtZT0iYXBwRGVmYXVsdCI+Ci0JICAgICAgICAJIDxpbnRlcmNlcHRvci1yZWYgbmFtZT0iZGVmYXVsdFN0YWNrIj4KLQkgICAgICAJCQk8cGFyYW0gbmFtZT0iZXhjZXB0aW9uLmxvZ0VuYWJsZWQiPnRydWU8L3BhcmFtPgotCSAgICAgIAkJCTxwYXJhbSBuYW1lPSJleGNlcHRpb24ubG9nTGV2ZWwiPkVSUk9SPC9wYXJhbT4KLQkgICAgICAJCQk8cGFyYW0gbmFtZT0icGFyYW1zLmV4Y2x1ZGVQYXJhbXMiPmRvam9cLi4qLF5zdHJ1dHNcLi4qLF5zZXNzaW9uXC4uKixecmVxdWVzdFwuLiosXmFwcGxpY2F0aW9uXC4uKixec2VydmxldChSZXF1ZXN0fFJlc3BvbnNlKVwuLioscGFyYW1ldGVyc1wuLi4qPC9wYXJhbT4KLQkgICAJCQk8L2ludGVyY2VwdG9yLXJlZj4KLQkgCSAgICA8L2ludGVyY2VwdG9yLXN0YWNrPgotCQk8L2ludGVyY2VwdG9ycz4KLQkJCi0JCTxkZWZhdWx0LWludGVyY2VwdG9yLXJlZiBuYW1lPSJhcHBEZWZhdWx0IiAvPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCQk8IS0tIElmIHRoZSBVUkwgaXMgaGVsbG8uYWN0aW9uIHRoZSBjYWxsIHRoZSBleGVjdXRlIG1ldGhvZCBvZiBjbGFzcyBIZWxsb1dvcmxkQWN0aW9uLgotCQlJZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBleGVjdXRlIG1ldGhvZCBpcyBzdWNjZXNzIHJlbmRlciB0aGUgSGVsbG9Xb3JsZC5qc3AgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaGVsbG8iIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbi5IZWxsb1dvcmxkQWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vSGVsbG9Xb3JsZC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vd2ViYXBwL0hlbGxvV29ybGQuanNwIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NDY4MDQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SGVsbG8gV29ybGQhPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUubWVzc2FnZSIgLz48L2gyPgotPHA+SSd2ZSBzYWlkIGhlbGxvIHRvIHlvdSA8czpwcm9wZXJ0eSB2YWx1ZT0iI3Nlc3Npb24uaGVsbG9Db3VudCIgLz4gdGltZXMhPC9wPgotPHA+PHM6cHJvcGVydHkgdmFsdWU9Im1lc3NhZ2VTdG9yZSIgLz48L3A+Ci08aHIgLz4KLTxwPjxhIGhyZWY9JzxzOnVybCBhY3Rpb249ImluZGV4IiAvPic+UmV0dXJuIEhvbWU8L2E+PC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3N0cnV0czJleGFtcGxlcy9odHRwX3Nlc3Npb24vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwZjY4OS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+SFRUUCBTZXNzaW9uIFN0cnV0cyAyPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvaHR0cF9zZXNzaW9uL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTU0NDQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2h0dHBfc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdoZWxsbycvPiI+SGVsbG8gV29ybGQ8L2E+PC9wPgotPHM6dXJsIGFjdGlvbj0iaGVsbG8iIHZhcj0iaGVsbG9MaW5rIj4KLSAgPHM6cGFyYW0gbmFtZT0idXNlck5hbWUiPkJydWNlIFBoaWxsaXBzPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7aGVsbG9MaW5rfSI+SGVsbG8gQnJ1Y2UgUGhpbGxpcHM8L2E+PC9wPgotCi08cD5HZXQgeW91ciBvd24gcGVyc29uYWwgaGVsbG8gYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhpcyBmb3JtLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249ImhlbGxvIj4KLQotCTxzOnRleHRmaWVsZCBuYW1lPSJ1c2VyTmFtZSIgbGFiZWw9IiV7J1lvdXIgbmFtZSd9IiAvPgotCQotCTxzOnN1Ym1pdCB2YWx1ZT0iJXsnU3VibWl0J30iIC8+Ci0KLTwvczpmb3JtPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlMmFlNS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBTdHJ1dHMgMiBJbnRlcmNlcHRvcnMgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvaW50ZXJjZXB0b3JzL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5OTYxMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotCi0gIDxhcnRpZmFjdElkPmludGVyY2VwdG9yczwvYXJ0aWZhY3RJZD4KLQotICA8bmFtZT5TdHJ1dHMgMiBJbnRlcmNlcHRvcnM8L25hbWU+Ci0gIAotICA8ZGVzY3JpcHRpb24+Rm9ybSBYTUwgdmFsaWRhdGlvbiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUgCi0gIFN0cnV0cyAyIGdldHRpbmcgc3RhcnRlZCB0dXRvcmlhbHM8L2Rlc2NyaXB0aW9uPgotICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAKLSAgICAgIDxidWlsZD4KLQkJPGZpbmFsTmFtZT5pbnRlcmNlcHRvcnM8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2FjdGlvbi9SZWdpc3Rlci5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2FjdGlvbi9SZWdpc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDk4N2NiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIubW9kZWwuUGVyc29uOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgY29udHJvbGxlciB0byBoYW5kbGUgYWN0aW9ucwotICogcmVsYXRlZCB0byByZWdpc3RlcmluZyBhIHVzZXIuCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUmVnaXN0ZXIgZXh0ZW5kcyBBY3Rpb25TdXBwb3J0IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQlwcml2YXRlIFBlcnNvbiBwZXJzb25CZWFuOwotCi0JCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQkvL2NhbGwgU2VydmljZSBjbGFzcyB0byBzdG9yZSBwZXJzb25CZWFuJ3Mgc3RhdGUgaW4gZGF0YWJhc2UKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdmFsaWRhdGUoKXsKLQkJCi0JCWlmICggcGVyc29uQmVhbi5nZXRGaXJzdE5hbWUoKS5sZW5ndGgoKSA9PSAwICl7CQotCi0JCQlhZGRGaWVsZEVycm9yKCAicGVyc29uQmVhbi5maXJzdE5hbWUiLCAiRmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iICk7Ci0JCQkKLQkJfQotCQkKLQkJCQkKLQkJaWYgKCBwZXJzb25CZWFuLmdldEVtYWlsKCkubGVuZ3RoKCkgPT0gMCApewkKLQotCQkJYWRkRmllbGRFcnJvciggInBlcnNvbkJlYW4uZW1haWwiLCAiRW1haWwgaXMgcmVxdWlyZWQuIiApOwotCQkJCi0JCX0KLQkJCi0JCWlmICggcGVyc29uQmVhbi5nZXRBZ2UoKSA8IDE4ICl7CQotCi0JCQlhZGRGaWVsZEVycm9yKCAicGVyc29uQmVhbi5hZ2UiLCAiQWdlIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIDE4IG9yIG9sZGVyIiApOwotCQkJCi0JCX0KLQkJCi0JCQotCX0KLQotCQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQkJCi0JCXJldHVybiBwZXJzb25CZWFuOwotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGVyc29uQmVhbihQZXJzb24gcGVyc29uKSB7Ci0JCQotCQlwZXJzb25CZWFuID0gcGVyc29uOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAyMGJiYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvbW9kZWwvUGVyc29uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsOwotCi0KLS8qKgotICogTW9kZWxzIGEgUGVyc29uIHdobyByZWdpc3RlcnMuCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGVyc29uCi17Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZmlyc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIGxhc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIGVtYWlsOwotICAgIHByaXZhdGUgaW50IGFnZTsKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rmlyc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBmaXJzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMYXN0TmFtZShTdHJpbmcgbGFzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFbWFpbCgpCi0gICAgewotICAgICAgICByZXR1cm4gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RW1haWwoU3RyaW5nIGVtYWlsKQotICAgIHsKLSAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0QWdlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWdlKCBpbnQgYWdlKQotICAgIHsKLSAgICAgICAgdGhpcy5hZ2UgPSBhZ2U7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiRmlyc3QgTmFtZTogIiArIGdldEZpcnN0TmFtZSgpICsgIiBMYXN0IE5hbWU6ICAiICsgZ2V0TGFzdE5hbWUoKSArIAotICAgICAgICAiIEVtYWlsOiAgICAgICIgKyBnZXRFbWFpbCgpICsgIiBBZ2U6ICAgICAgIiArIGdldEFnZSgpIDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWJkOTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzNTNmNi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iSU5GTyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iSU5GTyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzYwY2UwLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCIgPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0JCQotCTxhY3Rpb24gbmFtZT0icmVnaXN0ZXJfaW5wdXQiIAljbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImlucHV0Ij4KLQkJPHJlc3VsdCBuYW1lPSJpbnB1dCI+cmVnaXN0ZXIuanNwPC9yZXN1bHQ+Ci0JICA8L2FjdGlvbj4KLQotICAgICAgPCEtLSBmb3IgbG9nZ2VyIGludGVyY2VwdG9yIHNlZTogaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLzIuMi4xL2RvY3MvbG9nZ2VyLWludGVyY2VwdG9yLmh0bWwgLS0+Ci0gICAgICA8IS0tIGZvciB0aW1lciBpbnRlcmNlcHRvciBzZWUgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLzIuMi4xL2RvY3MvdGltZXItaW50ZXJjZXB0b3IuaHRtbCAtLT4JCQotCSAgPGFjdGlvbiBuYW1lPSJyZWdpc3RlciIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbi5SZWdpc3RlciIgbWV0aG9kPSJleGVjdXRlIj4KLQkgIAkJPGludGVyY2VwdG9yLXJlZiBuYW1lPSJ0aW1lciIgLz4KLQkJCTxpbnRlcmNlcHRvci1yZWYgbmFtZT0ibG9nZ2VyIiAvPgotCQkJPGludGVyY2VwdG9yLXJlZiBuYW1lPSJkZWZhdWx0U3RhY2siPgotCQkJICAgPHBhcmFtIG5hbWU9ImV4Y2VwdGlvbi5sb2dFbmFibGVkIj50cnVlPC9wYXJhbT4KLQkJCSAgIDxwYXJhbSBuYW1lPSJleGNlcHRpb24ubG9nTGV2ZWwiPkVSUk9SPC9wYXJhbT4KLQkJCTwvaW50ZXJjZXB0b3ItcmVmPgotCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPnRoYW5reW91LmpzcDwvcmVzdWx0PgotCQk8cmVzdWx0IG5hbWU9ImlucHV0Ij5yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLQkgIDwvYWN0aW9uPgotCi0JPC9wYWNrYWdlPgotCi08L3N0cnV0cz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxODFkMjQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOndlYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCIgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMy4wIj4KLTxkaXNwbGF5LW5hbWU+SW50ZXJjZXB0b3JzIFN0cnV0cyAyPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODk4N2YuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci0KLQotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdyZWdpc3Rlcl9pbnB1dCcgIC8+IiA+UGxlYXNlIHJlZ2lzdGVyPC9hPiBmb3Igb3VyIHByaXplIGRyYXdpbmcuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwIGIvc3RydXRzMmV4YW1wbGVzL2ludGVyY2VwdG9ycy9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGFjYjE1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vd2ViYXBwL3JlZ2lzdGVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdGVyPC90aXRsZT4KLTxzOmhlYWQgLz4KLTwvaGVhZD4KLTxib2R5PgotPGgzPlJlZ2lzdGVyIGZvciBhIHByaXplIGJ5IGNvbXBsZXRpbmcgdGhpcyBmb3JtLjwvaDM+Ci0KLTxzOmZvcm0gYWN0aW9uPSJyZWdpc3RlciI+Ci0KLSAJICA8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uQmVhbi5maXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBuYW1lIiAvPgotIAkgIDxzOnRleHRmaWVsZCAgbmFtZT0icGVyc29uQmVhbi5sYXN0TmFtZSIgbGFiZWw9Ikxhc3QgbmFtZSIgLz4KLSAJICA8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uQmVhbi5lbWFpbCIgIGxhYmVsID0iRW1haWwiLz4gIAotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmFnZSIgIGxhYmVsPSJBZ2UiICAvPgotIAkgIAotICAgCSAgPHM6c3VibWl0Lz4KLSAgIAkgIAotPC9zOmZvcm0+CQotIAotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcCBiL3N0cnV0czJleGFtcGxlcy9pbnRlcmNlcHRvcnMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IzZDdiZC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvaW50ZXJjZXB0b3JzL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5SZWdpc3RyYXRpb24gU3VjY2Vzc2Z1bDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMz5UaGFuayB5b3UgZm9yIHJlZ2lzdGVyaW5nIGZvciBhIHByaXplLjwvaDM+Ci0KLTxwPllvdXIgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uOiA8czpwcm9wZXJ0eSB2YWx1ZT0icGVyc29uQmVhbiIgLz4gPC9wPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2UvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZDU5ZjguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2UvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIE1lc3NhZ2UgUmVzb3VyY2UgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvbWVzc2FnZV9yZXNvdXJjZS9pbmRleC5hY3Rpb24uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2UvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2NmQzYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxwYXJlbnQ+Ci0gICAgPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+c3RydXRzMmV4YW1wbGVzPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotICA8L3BhcmVudD4KLQotICA8YXJ0aWZhY3RJZD5tZXNzYWdlX3Jlc291cmNlPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPk1lc3NhZ2UgcmVzb3VyY2U8L25hbWU+Ci0KLTxkZXNjcmlwdGlvbj5NZXNzYWdlIHJlc291cmNlIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSAKLSAgU3RydXRzIDIgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsczwvZGVzY3JpcHRpb24+Ci0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPm1lc3NhZ2VfcmVzb3VyY2U8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvYWN0aW9uL0hlbGxvV29ybGRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZkYTQ5Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5oZWxsb3dvcmxkLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWwuTWVzc2FnZVN0b3JlOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgU3RydXRzIDIgY29udHJvbGxlciB0aGF0IHJlc3BvbmRzCi0gKiB0byBhIHVzZXIgYWN0aW9uIGJ5IHNldHRpbmcgdGhlIHZhbHVlCi0gKiBvZiB0aGUgTWVzc2FnZSBtb2RlbCBjbGFzcywgYW5kIHJldHVybnMgYSBTdHJpbmcgCi0gKiByZXN1bHQuCi0gKiBAYXV0aG9yIEJydWNlIFBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JLyoqCi0JICogVGhlIG1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBtZXNzYWdlCi0JICogdG8gZGlzcGxheSBpbiB0aGUgdmlldy4KLQkgKi8KLQlwcml2YXRlIE1lc3NhZ2VTdG9yZSBtZXNzYWdlU3RvcmU7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGhlbGxvQ291bnQgPSAwOwotCQotCXB1YmxpYyBpbnQgZ2V0SGVsbG9Db3VudCgpIHsKLQkJcmV0dXJuIGhlbGxvQ291bnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0SGVsbG9Db3VudChpbnQgaGVsbG9Db3VudCkgewotCQlIZWxsb1dvcmxkQWN0aW9uLmhlbGxvQ291bnQgPSBoZWxsb0NvdW50OwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyB1c2VyTmFtZTsKLQotCXB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB7Ci0JCXJldHVybiB1c2VyTmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRVc2VyTmFtZShTdHJpbmcgdXNlck5hbWUpIHsKLQkJdGhpcy51c2VyTmFtZSA9IHVzZXJOYW1lOwotCX0KLQotCS8qCi0JICogQ3JlYXRlcyB0aGUgTWVzc2FnZVN0b3JlIG1vZGVsIG9iamVjdCwgCi0JICogaW5jcmVhc2UgaGVsbG9Db3VudCBieSAxIGFuZCAKLQkgKiByZXR1cm5zIHN1Y2Nlc3MuICBUaGUgTWVzc2FnZVN0b3JlIG1vZGVsCi0JICogb2JqZWN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSB2aWV3LgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQjZXhlY3V0ZSgpCi0JICovCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQltZXNzYWdlU3RvcmUgPSBuZXcgTWVzc2FnZVN0b3JlKCkgOwotCQkKLQkJLy9BY3Rpb24gaW5jbHVkZWQgYSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVyIG9mIHVzZXJOYW1lCi0JCS8vb3IgYSBmb3JtIGZpZWxkIHdpdGggbmFtZSBvZiB1c2VyTmFtZQotCQlpZiAodXNlck5hbWUgIT0gbnVsbCkgewotCQkJCi0JCQltZXNzYWdlU3RvcmUuc2V0TWVzc2FnZSggbWVzc2FnZVN0b3JlLmdldE1lc3NhZ2UoKSArICIgIiArIHVzZXJOYW1lKTsKLQkJCQotCQl9Ci0JCQotCQloZWxsb0NvdW50Kys7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQl9Ci0KLQlwdWJsaWMgTWVzc2FnZVN0b3JlIGdldE1lc3NhZ2VTdG9yZSgpIHsKLQkJcmV0dXJuIG1lc3NhZ2VTdG9yZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlU3RvcmUoTWVzc2FnZVN0b3JlIG1lc3NhZ2VTdG9yZSkgewotCQl0aGlzLm1lc3NhZ2VTdG9yZSA9IG1lc3NhZ2VTdG9yZTsKLQl9Ci0JCi0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmY2VlYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQubW9kZWw7Ci0KLS8qKgotICogTW9kZWwgY2xhc3MgdGhhdCBzdG9yZXMgYSBtZXNzYWdlLgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VTdG9yZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKLQkKLQlwdWJsaWMgTWVzc2FnZVN0b3JlKCkgewotCQkKLQkJc2V0TWVzc2FnZSgiSGVsbG8gU3RydXRzIFVzZXIiKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCXJldHVybiBtZXNzYWdlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBtZXNzYWdlICsgIiAoZnJvbSB0b1N0cmluZykiOwotCQkKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2FjdGlvbi9SZWdpc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDk4N2NiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsLlBlcnNvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdGVyIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQotCQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJLy9jYWxsIFNlcnZpY2UgY2xhc3MgdG8gc3RvcmUgcGVyc29uQmVhbidzIHN0YXRlIGluIGRhdGFiYXNlCi0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCl7Ci0JCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0Rmlyc3ROYW1lKCkubGVuZ3RoKCkgPT0gMCApewkKLQotCQkJYWRkRmllbGRFcnJvciggInBlcnNvbkJlYW4uZmlyc3ROYW1lIiwgIkZpcnN0IG5hbWUgaXMgcmVxdWlyZWQuIiApOwotCQkJCi0JCX0KLQkJCi0JCQkJCi0JCWlmICggcGVyc29uQmVhbi5nZXRFbWFpbCgpLmxlbmd0aCgpID09IDAgKXsJCi0KLQkJCWFkZEZpZWxkRXJyb3IoICJwZXJzb25CZWFuLmVtYWlsIiwgIkVtYWlsIGlzIHJlcXVpcmVkLiIgKTsKLQkJCQotCQl9Ci0JCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0QWdlKCkgPCAxOCApewkKLQotCQkJYWRkRmllbGRFcnJvciggInBlcnNvbkJlYW4uYWdlIiwgIkFnZSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSAxOCBvciBvbGRlciIgKTsKLQkJCQotCQl9Ci0JCQotCQkKLQl9Ci0KLQkKLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbkJlYW4oKSB7Ci0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAyMGJiYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5yZWdpc3Rlci5tb2RlbDsKLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbWFpbDsKLSAgICBwcml2YXRlIGludCBhZ2U7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVtYWlsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEVtYWlsKFN0cmluZyBlbWFpbCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZW1haWwgPSBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEFnZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFnZSggaW50IGFnZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYWdlID0gYWdlOwotICAgIH0KLQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIkZpcnN0IE5hbWU6ICIgKyBnZXRGaXJzdE5hbWUoKSArICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAKLSAgICAgICAgIiBFbWFpbDogICAgICAiICsgZ2V0RW1haWwoKSArICIgQWdlOiAgICAgICIgKyBnZXRBZ2UoKSA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2dsb2JhbC5wcm9wZXJ0aWVzIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2dsb2JhbC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjIxYjI5Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9nbG9iYWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWNvbnRhY3Q9Rm9yIGFzc2lzdGFuY2UgY29udGFjdCA8YSBocmVmPSdtYWlsdG86Y29udGFjdEBlbWFpbC5jb20nPmNvbnRhY3RAZW1haWwuY29tPC9hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9nbG9iYWxfZXMucHJvcGVydGllcyBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9nbG9iYWxfZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwMTUxMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvZ2xvYmFsX2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1jb250YWN0PVBhcmEgYXNpc3RlbmNpYSwgY29tdW7tcXVlc2UgPGEgaHJlZj0nbWFpbHRvOmNvbXVu7XF1ZXNlQGVtYWlsLmNvbSc+Y29tdW7tcXVlc2VAZW1haWwuY29tPC9hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcGFja2FnZS5wcm9wZXJ0aWVzIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL3BhY2thZ2UucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjNTY5OC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcGFja2FnZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1ncmVldGluZz1XZWxjb21lIHRvIFRoZSBXb25kZXJmdWwgV29ybGQgb2YgU3RydXRzIDIKLWluc3RydWN0aW9ucz1SZWdpc3RlciBmb3IgYSBwcml6ZSBieSBjb21wbGV0aW5nIHRoaXMgZm9ybS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcGFja2FnZV9lcy5wcm9wZXJ0aWVzIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL3BhY2thZ2VfZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwODU3Yy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcGFja2FnZV9lcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1ncmVldGluZz1CaWVudmVuaWRvIGFsIG1hcmF2aWxsb3NvIG11bmRvIGRlIFN0cnV0cyAyCi1pbnN0cnVjdGlvbnM9UmVn7XN0cmVzZSBwYXJhIG9idGVuZXIgdW4gcHJlbWlvIHBvciBjb21wbGV0YXIgZXN0ZSBmb3JtdWxhcmlvLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIucHJvcGVydGllcyBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY3ZTVkYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXBlcnNvbkJlYW4uZmlyc3ROYW1lPUZpcnN0IG5hbWUKLXBlcnNvbkJlYW4ubGFzdE5hbWU9TGFzdCBuYW1lCi1wZXJzb25CZWFuLmFnZT1BZ2UKLXBlcnNvbkJlYW4uZW1haWw9RW1haWwKLXRoYW5reW91PVRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgJXtwZXJzb25CZWFuLmZpcnN0TmFtZX0uCi1zdWJtaXQ9UmVnaXN0ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyX2VzLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyX2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MjcxMmYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL2FjdGlvbi9SZWdpc3Rlcl9lcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1Ob21icmUKLXBlcnNvbkJlYW4ubGFzdE5hbWU9QXBlbGxpZG9zCi1wZXJzb25CZWFuLmFnZT1FZGFkCi1wZXJzb25CZWFuLmVtYWlsPUNvcnJlbwotdGhhbmt5b3U9R3JhY2lhcyBwb3IgcmVnaXN0cmFyc2UgJXtwZXJzb25CZWFuLmZpcnN0TmFtZX0uCi1zdWJtaXQ9c29tZXRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZmRmMjAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuY3VzdG9tLmkxOG4ucmVzb3VyY2VzIiB2YWx1ZT0iZ2xvYmFsIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCI+Ci0KLSAgICAgICAgPCEtLSBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3N1bWUgc3VjY2VzcyBhbmQgCi0gICAgICAgIHJlbmRlciB0aGUgcmVzdWx0IGluZGV4LmpzcCAtLT4KLSAgICAgICAgPCEtLSBJZiBubyBuYW1lIHZhbHVlIGZvciB0aGUgcmVzdWx0IG5vZGUgaXMgc3BlY2lmaWVkIHRoZSBzdWNjZXNzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IC0tPgotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JCTwhLS0gSWYgdGhlIFVSTCBpcyBoZWxsby5hY3Rpb24gdGhlIGNhbGwgdGhlIGV4ZWN1dGUgbWV0aG9kIG9mIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24uCi0JCUlmIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGV4ZWN1dGUgbWV0aG9kIGlzIHN1Y2Nlc3MgcmVuZGVyIHRoZSBIZWxsb1dvcmxkLmpzcCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJoZWxsbyIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmhlbGxvd29ybGQuYWN0aW9uLkhlbGxvV29ybGRBY3Rpb24iIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi9IZWxsb1dvcmxkLmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQkJCi0JPGFjdGlvbiBuYW1lPSJyZWdpc3RlcklucHV0IiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImlucHV0IiA+Ci0JCTxyZXN1bHQgbmFtZT0iaW5wdXQiPi9yZWdpc3Rlci5qc3A8L3Jlc3VsdD4KLQk8L2FjdGlvbj4KLQkJCi0JICA8YWN0aW9uIG5hbWU9InJlZ2lzdGVyIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi90aGFua3lvdS5qc3A8L3Jlc3VsdD4KLQkJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L3JlZ2lzdGVyLmpzcDwvcmVzdWx0PgotCSAgPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcCBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlMTUwZC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SGVsbG8gV29ybGQhPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPjxzOnRleHQgbmFtZT0iZ3JlZXRpbmciIC8+PC9oMT4KLTxoMj48czpwcm9wZXJ0eSB2YWx1ZT0ibWVzc2FnZVN0b3JlLm1lc3NhZ2UiIC8+PC9oMj4KLTxwPkkndmUgc2FpZCBoZWxsbyA8czpwcm9wZXJ0eSB2YWx1ZT0iaGVsbG9Db3VudCIgLz4gdGltZXMhPC9wPgotPHA+PHM6cHJvcGVydHkgdmFsdWU9Im1lc3NhZ2VTdG9yZSIgLz48L3A+Ci08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci08aHIgLz4KLTxzOnRleHQgbmFtZT0iY29udGFjdCIgLz4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE1ZWM1MC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPk1lc3NhZ2UgUmVzb3VyY2U8L2Rpc3BsYXktbmFtZT4KLSAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgIDx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0gIDwvd2VsY29tZS1maWxlLWxpc3Q+Ci0gIAotICAJCQkJCSAKLSAgICA8ZmlsdGVyPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubmcuZmlsdGVyLlN0cnV0c1ByZXBhcmVBbmRFeGVjdXRlRmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+Ci0KLSAgICAgPGZpbHRlci1tYXBwaW5nPgotICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0gICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0gICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWJjZmI1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+QmFzaWMgU3RydXRzIDIgQXBwbGljYXRpb24gLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgdG8gU3RydXRzIDI8L2gxPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdoZWxsbycvPiI+SGVsbG8gV29ybGQ8L2E+PC9wPgotPHM6dXJsIGFjdGlvbj0iaGVsbG8iIHZhcj0iaGVsbG9MaW5rIj4KLSAgPHM6cGFyYW0gbmFtZT0idXNlck5hbWUiPkJydWNlIFBoaWxsaXBzPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7aGVsbG9MaW5rfSI+SGVsbG8gQnJ1Y2UgUGhpbGxpcHM8L2E+PC9wPgotCi08cD5HZXQgeW91ciBvd24gcGVyc29uYWwgaGVsbG8gYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhpcyBmb3JtLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249ImhlbGxvIj4KLQotCTxzOnRleHRmaWVsZCBuYW1lPSJ1c2VyTmFtZSIgbGFiZWw9IllvdXIgbmFtZSIgLz4KLQkKLQk8czpzdWJtaXQgdmFsdWU9IlN1Ym1pdCIgLz4KLQotPC9zOmZvcm0+Ci0KLTxzOnVybCBhY3Rpb249InJlZ2lzdGVySW5wdXQiIHZhcj0icmVnaXN0ZXJJbnB1dExpbmsiID4KLSA8czpwYXJhbSBuYW1lPSJyZXF1ZXN0X2xvY2FsZSI+ZW48L3M6cGFyYW0+Ci08L3M6dXJsPgotPHA+PGEgaHJlZj0iJHtyZWdpc3RlcklucHV0TGlua30iPlBsZWFzZSByZWdpc3RlcjwvYT4gZm9yIG91ciBwcml6ZSBkcmF3aW5nLjwvcD4KLTxoMz5SZWdpc3RybyBlc3Bh8W9sPC9oMz4KLTxzOnVybCBhY3Rpb249InJlZ2lzdGVySW5wdXQiIHZhcj0icmVnaXN0ZXJJbnB1dExpbmtFUyI+Ci0gICAgPHM6cGFyYW0gbmFtZT0icmVxdWVzdF9sb2NhbGUiPmVzPC9zOnBhcmFtPgotPC9zOnVybD4KLTxwPjxhIGhyZWY9IiR7cmVnaXN0ZXJJbnB1dExpbmtFU30iPlBvciBmYXZvciwgcmVn7XN0cmVzZTwvYT4gcGFyYSBudWVzdHJvIHNvcnRlbzwvcD4KLQotPGhyIC8+Ci08czp0ZXh0IG5hbWU9ImNvbnRhY3QiIC8+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vd2ViYXBwL3JlZ2lzdGVyLmpzcCBiL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NmNhNGUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL21lc3NhZ2VfcmVzb3VyY2Uvc3JjL21haW4vd2ViYXBwL3JlZ2lzdGVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdGVyPC90aXRsZT4KLTxzOmhlYWQgLz4KLTwvaGVhZD4KLTxib2R5PgotPGgxPjxzOnRleHQgbmFtZT0iZ3JlZXRpbmciIC8+PC9oMT4KLTxoMz48czp0ZXh0IG5hbWU9Imluc3RydWN0aW9ucyIgLz48L2gzPgotCi08czpmb3JtIGFjdGlvbj0icmVnaXN0ZXIiPgotCi0gCSAgPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5maXJzdE5hbWUiICAvPgotIAkgIDxzOnRleHRmaWVsZCAga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAgLz4KLSAJICA8czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmVtYWlsIiAgLz4gIAotIAkgIDxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uYWdlIiAgLz4KLSAJICAKLSAgIAkgIDxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLSAgIAkgIAotPC9zOmZvcm0+CQotIDxociAvPgotPHM6dGV4dCBuYW1lPSJjb250YWN0IiAvPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvbWVzc2FnZV9yZXNvdXJjZS9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjhmYjljLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9tZXNzYWdlX3Jlc291cmNlL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KLTx0aXRsZT5SZWdpc3RyYXRpb24gU3VjY2Vzc2Z1bDwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMz48czp0ZXh0IG5hbWU9InRoYW5reW91IiAvPjwvaDM+Ci0KLTxwPllvdXIgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uOiA8czpwcm9wZXJ0eSB2YWx1ZT0icGVyc29uQmVhbiIgLz4gPC9wPgotCi08cD48YSBocmVmPSI8czp1cmwgYWN0aW9uPSdpbmRleCcgLz4iID5SZXR1cm4gdG8gaG9tZSBwYWdlPC9hPi48L3A+Ci08aHIgLz4KLTxzOnRleHQgbmFtZT0iY29udGFjdCIgLz4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGJmNjM2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIDxuYW1lPlN0cnV0cyAyIEV4YW1wbGVzPC9uYW1lPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgVGhpcyBpcyB0aGUgcGFyZW50IHBvbSBmb3IgdGhlIFN0cnV0cyAyIGV4YW1wbGVzIHRoYXQKLSAgICAgICAgZ28gd2l0aCB0aGUgU3RydXRzIDIgR2V0dGluZyBTdGFydGVkIHNlcmllcyBvZiB0dXRvcmlhbHMuCi0gICAgPC9kZXNjcmlwdGlvbj4KLQotICAgIDxwcm9wZXJ0aWVzPgotCi0gICAgICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgotCi0gICAgICAgIDxzdHJ1dHMyLnZlcnNpb24+Mi4zLjE2PC9zdHJ1dHMyLnZlcnNpb24+Ci0KLSAgICAgICAgPGxvZzRqLnZlcnNpb24+MS4yLjE3PC9sb2c0ai52ZXJzaW9uPgotCi0gICAgPC9wcm9wZXJ0aWVzPgotCi0gICAgPGRldmVsb3BlcnM+Ci0gICAgICAgIDxkZXZlbG9wZXI+Ci0gICAgICAgICAgICA8aWQ+YnBoaWxsaXBzPC9pZD4KLSAgICAgICAgICAgIDxuYW1lPkJydWNlIFBoaWxsaXBzPC9uYW1lPgotICAgICAgICAgICAgPGVtYWlsPmJwaGlsbGlwc0BrdS5lZHU8L2VtYWlsPgotICAgICAgICAgICAgPG9yZ2FuaXphdGlvbj5BcGFjaGUgU3RydXRzIDIgQ29tbWl0dGVyPC9vcmdhbml6YXRpb24+Ci0gICAgICAgICAgICA8cm9sZXM+Ci0gICAgICAgICAgICAgICAgPHJvbGU+Q29tbWl0dGVyPC9yb2xlPgotICAgICAgICAgICAgPC9yb2xlcz4KLSAgICAgICAgPC9kZXZlbG9wZXI+Ci0gICAgPC9kZXZlbG9wZXJzPgotCi0gICAgPG1vZHVsZXM+Ci0gICAgICAgIDxtb2R1bGU+YmFzaWNfc3RydXRzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZDwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPnVzaW5nX3RhZ3M8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5jb2RpbmdfYWN0aW9uczwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmZvcm1fcHJvY2Vzc2luZzwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmZvcm1fdmFsaWRhdGlvbjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPm1lc3NhZ2VfcmVzb3VyY2U8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5leGNlcHRpb25faGFuZGxpbmc8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5kZWJ1Z2dpbmdfc3RydXRzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+Zm9ybV90YWdzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+Zm9ybV94bWxfdmFsaWRhdGlvbjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmNvbnRyb2xfdGFnczwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPndpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb248L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT50aGVtZXM8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5zcHJpbmdfc3RydXRzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+YW5ub3RhdGlvbnM8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5pbnRlcmNlcHRvcnM8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT51bml0X3Rlc3Rpbmc8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5odHRwX3Nlc3Npb248L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5wcmVwYXJhYmxlX2ludGVyZmFjZTwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmV4Y2x1ZGVfcGFyYW1ldGVyczwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPnJlc3RmdWwyYWN0aW9ubWFwcGVyPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+YmVhbl92YWxpZGF0aW9uPC9tb2R1bGU+Ci0gICAgPC9tb2R1bGVzPgotCi0KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnN0cnV0czwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0cnV0czItY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3RydXRzMi52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+ICA8IS0tIGV4Y2x1ZGUgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB0byBvbGRlciB2ZXJzaW9uIG9mIGNvbW1vbnMtZmlsZXVwbG9hZCBkdWUgdG8gc2VjdXJpdHkgaXNzdWUgLS0+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtZmlsZXVwbG9hZDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1maWxldXBsb2FkPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgPC9leGNsdXNpb25zPiAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5sb2c0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvZzRqPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtsb2c0ai52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+IDwhLS1leHBsaWNpdGx5IGluY2x1ZGUgZGVwZW5kZW5jeSBvbiBuZXcgdmVyc2lvbiBvZiBjb21tb25zLWZpbGV1cGxvYWQgdGhhdCBmaXhlcyBzZWN1cml0eSBpc3N1ZS0tPgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1maWxldXBsb2FkPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1maWxldXBsb2FkPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4zLjE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0KLQotICAgIDxidWlsZD4KLQotCi0KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4zLjI8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS43PC9zb3VyY2U+Ci0gICAgICAgICAgICAgICAgICAgIDx0YXJnZXQ+MS43PC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2UvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhYTg5Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2UvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFByZXBhcmFibGUgSW50ZXJmYWNlIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3ByZXBhcmFibGVfaW50ZXJmYWNlL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNzM1NTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotCi0gIDxhcnRpZmFjdElkPnByZXBhcmFibGVfaW50ZXJmYWNlPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPlByZXBhcmFibGUgSW50ZXJmYWNlPC9uYW1lPgotICAKLSAgIDxkZXNjcmlwdGlvbj5TdHJ1dHMgMiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUKLSAgcHJlcGFyYWJsZSBpbnRlcmZhY2UgZ2V0dGluZyBzdGFydGVkIHR1dG9yaWFsPC9kZXNjcmlwdGlvbj4KLQotICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAKLSAgCTxidWlsZD4KLQkJPGZpbmFsTmFtZT5wcmVwYXJhYmxlX2ludGVyZmFjZTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gIAotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTc2YTlkLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5TdGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuQ2FyTW9kZWxzU2VydmljZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuQ2FyTW9kZWxzU2VydmljZUhhcmRDb2RlZDsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuRWRpdFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkVkaXRTZXJ2aWNlSW5NZW1vcnk7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLlByZXBhcmFibGU7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gZWRpdGluZyBhIFBlcnNvbi4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBFZGl0QWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCBpbXBsZW1lbnRzIFByZXBhcmFibGUgewotCQotCXByaXZhdGUgc3RhdGljIExvZ2dlciBsb2cgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBFZGl0QWN0aW9uLmNsYXNzLmdldE5hbWUoKSApOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCXByaXZhdGUgRWRpdFNlcnZpY2UgZWRpdFNlcnZpY2UgPSBuZXcgRWRpdFNlcnZpY2VJbk1lbW9yeSgpOwotCQotCXByaXZhdGUgQ2FyTW9kZWxzU2VydmljZSBjYXJNb2RlbHNTZXJ2aWNlID0gbmV3IENhck1vZGVsc1NlcnZpY2VIYXJkQ29kZWQoKSA7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBzcG9ydHMgPSB7ImZvb3RiYWxsIiwgImJhc2ViYWxsIiwgImJhc2tldGJhbGwiIH07Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gZ2VuZGVycyA9IHsibWFsZSIsICJmZW1hbGUiLCAibm90IHN1cmUiIH07Ci0JCi0JcHJpdmF0ZSBMaXN0PFN0YXRlPiBzdGF0ZXMgOwotCi0JcHJpdmF0ZSBTdHJpbmcgW10gY2FyTW9kZWxzQXZhaWxhYmxlIDsKLQkKLQkKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHByZXBhcmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCWxvZy5pbmZvKCJJbiBwcmVwYXJlIG1ldGhvZC4uLiIpOwotCQkKLQkJY2FyTW9kZWxzQXZhaWxhYmxlID0gY2FyTW9kZWxzU2VydmljZS5nZXRDYXJNb2RlbHMoKSA7Ci0JCQotCQlzZXRQZXJzb25CZWFuKCBlZGl0U2VydmljZS5nZXRQZXJzb24oKSApOwotCi0JfQotCi0JcHVibGljIHZvaWQgcHJlcGFyZUV4ZWN1dGUoKSB7Ci0JCQotCQlsb2cuaW5mbygiSW4gcHJlcGFyZUV4ZWN1dGUgbWV0aG9kLi4uIik7Ci0JCQotCQkKLQl9Ci0JCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlsb2cuaW5mbyAoIkluIGV4ZWN1dGUgbWV0aG9kLi4uIik7Ci0JCQotCSAgICBlZGl0U2VydmljZS5zYXZlUGVyc29uKCBnZXRQZXJzb25CZWFuKCkgKTsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgcHJlcGFyZUlucHV0KCkgewotCQkKLQkJbG9nLmluZm8oIkluIHByZXBhcmVJbnB1dCBtZXRob2QuLi4iKTsKLQkJCi0JfQotCQotCXB1YmxpYyBTdHJpbmcgaW5wdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCWxvZy5pbmZvKCJJbiBpbnB1dCBtZXRob2QuLi4iKTsKLQkJCi0JCQotCQlyZXR1cm4gSU5QVVQ7Ci0JfQotCQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uQmVhbigpIHsKLQkJCi0JCQotCQlyZXR1cm4gcGVyc29uQmVhbjsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkJlYW4oUGVyc29uIHBlcnNvbikgewotCQkKLQkJcGVyc29uQmVhbiA9IHBlcnNvbjsKLQkJCi0JfQotCi0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFNwb3J0cygpIHsKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3Qoc3BvcnRzKTsKLQl9Ci0JCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRHZW5kZXJzKCkgewotCQkKLQkJcmV0dXJuIEFycmF5cy5hc0xpc3QoZ2VuZGVycyk7Ci0JCQotCX0KLQotCi0KLQlwdWJsaWMgTGlzdDxTdGF0ZT4gZ2V0U3RhdGVzKCkgewotCQkKLQkJc3RhdGVzID0gbmV3IEFycmF5TGlzdDxTdGF0ZT4oKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJBWiIsICJBcml6b25hIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJDQSIsICJDYWxpZm9ybmlhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJGTCIsICJGbG9yaWRhIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJLUyIsICJLYW5zYXMiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIk5ZIiwgIk5ldyBZb3JrIikgKTsKLQkJCi0JCXJldHVybiBzdGF0ZXM7Ci0JfQotCi0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzQXZhaWxhYmxlKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzQXZhaWxhYmxlOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxMjdlYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLQotCi0vKioKLSAqIE1vZGVscyBhIFBlcnNvbiB3aG8gcmVnaXN0ZXJzLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFBlcnNvbgotewotICAgIHByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBsYXN0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBzcG9ydDsKLSAgICBwcml2YXRlIFN0cmluZyBnZW5kZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgcmVzaWRlbmN5OwotICAgIHByaXZhdGUgYm9vbGVhbiBvdmVyMjE7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgW10gY2FyTW9kZWxzOwotICAgIHByaXZhdGUgU3RyaW5nIGVtYWlsOwotICAgIHByaXZhdGUgU3RyaW5nIHBob25lTnVtYmVyOwotICAgCi0gCi0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotCi0KLQotCXB1YmxpYyB2b2lkIHNldFNwb3J0KFN0cmluZyBzcG9ydCkgewotCQl0aGlzLnNwb3J0ID0gc3BvcnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0R2VuZGVyKFN0cmluZyBnZW5kZXIpIHsKLQkJdGhpcy5nZW5kZXIgPSBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRHZW5kZXIoKSB7Ci0JCXJldHVybiBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHsKLQkJcmV0dXJuIHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc2lkZW5jeShTdHJpbmcgcmVzaWRlbmN5KSB7Ci0JCXRoaXMucmVzaWRlbmN5ID0gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVzaWRlbmN5KCkgewotCQlyZXR1cm4gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE92ZXIyMShib29sZWFuIG92ZXIyMSkgewotCQl0aGlzLm92ZXIyMSA9IG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc092ZXIyMSgpIHsKLQkJcmV0dXJuIG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYXJNb2RlbHMoU3RyaW5nIFtdIGNhck1vZGVscykgewotCQl0aGlzLmNhck1vZGVscyA9IGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIFtdIGdldENhck1vZGVscygpIHsKLQkJcmV0dXJuIGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiRmlyc3QgTmFtZTogIiArIGdldEZpcnN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIExhc3QgTmFtZTogICIgKyBnZXRMYXN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIEZhdm9yaXRlIFNwb3J0OiAiICsgZ2V0U3BvcnQoKSArICIgfCAiICsKLSAgICAgICAgIiBHZW5kZXI6ICIgKyBnZXRHZW5kZXIoKSArICIgfCAiICsgIAotICAgICAgICAiIFJlc2lkZW5jeTogIiArIGdldFJlc2lkZW5jeSgpICsgIiB8ICIgKwotICAgICAgICAiIE92ZXIgMjE6ICIgKyBpc092ZXIyMSgpICArICIgfCAiICsKLSAgICAgICAgIiBDYXIgbW9kZWxzOiAiICsgQXJyYXlzLmFzTGlzdCggZ2V0Q2FyTW9kZWxzKCkgKSArICIgfCAiICsKLSAgICAgICAgIiBFbWFpbDogIiArIGdldEVtYWlsKCkgKyAiIHwgIiArCi0gICAgICAgICIgUGhvbmU6ICIgKyBnZXRQaG9uZU51bWJlcigpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgfQotCi0JcHVibGljIHZvaWQgc2V0RW1haWwoU3RyaW5nIGVtYWlsKSB7Ci0JCXRoaXMuZW1haWwgPSBlbWFpbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEVtYWlsKCkgewotCQlyZXR1cm4gZW1haWw7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UGhvbmVOdW1iZXIoU3RyaW5nIHBob25lTnVtYmVyKSB7Ci0JCXRoaXMucGhvbmVOdW1iZXIgPSBwaG9uZU51bWJlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBob25lTnVtYmVyKCkgewotCQlyZXR1cm4gcGhvbmVOdW1iZXI7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YSBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5MjdlMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdGF0ZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdGVBYmJyOwotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlTmFtZTsKLQkKLQlwdWJsaWMgU3RhdGUgKFN0cmluZyBzdGF0ZUFiYnIsIFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJCi0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCQl0aGlzLnN0YXRlTmFtZSA9IHN0YXRlTmFtZTsKLQkJCi0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVBYmJyKFN0cmluZyBzdGF0ZUFiYnIpIHsKLQkJdGhpcy5zdGF0ZUFiYnIgPSBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZUFiYnIoKSB7Ci0JCXJldHVybiBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVOYW1lKFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZU5hbWUoKSB7Ci0JCXJldHVybiBzdGF0ZU5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQotCQlyZXR1cm4gZ2V0U3RhdGVBYmJyKCkgOwotCQkKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9DYXJNb2RlbHNTZXJ2aWNlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvQ2FyTW9kZWxzU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTMxZGJlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9DYXJNb2RlbHNTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKioKLSAqIAotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsKLQotLyoqCi0gKiBTcGVjaWZpZXMgd2hhdCBtZXRob2RzIGEgQ2FyTW9kZWxTZXJ2aWNlCi0gKiBjbGFzcyBtdXN0IGltcGxlbWVudCB0byBwcm92aWRlIGluZm9ybWF0aW9uCi0gKiBhYm91dCBjYXIgbW9kZWxzLgotICogQGF1dGhvciBicGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ2FyTW9kZWxzU2VydmljZSB7Ci0JCi0JCi0JU3RyaW5nIFtdIGdldENhck1vZGVscygpIDsKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0Nhck1vZGVsc1NlcnZpY2VIYXJkQ29kZWQuamF2YSBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9DYXJNb2RlbHNTZXJ2aWNlSGFyZENvZGVkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkN2ViMjAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0Nhck1vZGVsc1NlcnZpY2VIYXJkQ29kZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOwotCi0vKioKLSAqIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGNhciBtb2RlbHMgdXNpbmcgZGF0YSBoYXJkLWNvZGVkCi0gKiBpbiB0aGlzIGNsYXNzLgotICogQGF1dGhvciBicGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBDYXJNb2RlbHNTZXJ2aWNlSGFyZENvZGVkIGltcGxlbWVudHMgQ2FyTW9kZWxzU2VydmljZSB7Ci0JCi0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nW10gZ2V0Q2FyTW9kZWxzKCkgewotCQkKLQkJU3RyaW5nIFtdIGNhck1vZGVsc0F2YWlsYWJsZSA9IHsiRm9yZCIsIkNocnlzbGVyIiwiVG95b3RhIiwiTmlzc2FuIn07Ci0JCQotCQlyZXR1cm4gY2FyTW9kZWxzQXZhaWxhYmxlIDsKLQkJCi0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZTA1My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIEVkaXRTZXJ2aWNlIHsNCi0JDQotCQ0KLQlQZXJzb24gZ2V0UGVyc29uKCkgOw0KLQ0KLQl2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pOw0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkMzVlMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7DQotDQotDQotDQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOw0KLQ0KLS8qKg0KLSAqIEltcGxlbWVudCBTZXJ2aWNlcyBuZWVkZWQgdG8gZWRpdCBhbmQgc2F2ZQ0KLSAqIGEgUGVyc29uIG9iamVjdCdzIHN0YXRlLiAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbg0KLSAqIHRoZSBQZXJzb24gb2JqZWN0J3Mgc3RhdGUgaXMgc3RvcmVkIGluIG1lbW9yeQ0KLSAqIEBhdXRob3IgYnJ1Y2VwaGlsbGlwcw0KLSAqDQotICovDQotDQotcHVibGljIGNsYXNzIEVkaXRTZXJ2aWNlSW5NZW1vcnkgaW1wbGVtZW50cyBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgUGVyc29uIHBlcnNvbiA7DQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBbXSBjYXJNb2RlbHMgPSB7IkZvcmQiLCJOaXNzYW4ifTsNCi0NCi0JDQotCXN0YXRpYyB7DQotCQkNCi0JCXBlcnNvbiA9IG5ldyBQZXJzb24oKTsNCi0JCXBlcnNvbi5zZXRGaXJzdE5hbWUoIkJydWNlIik7DQotCQlwZXJzb24uc2V0TGFzdE5hbWUoIlBoaWxsaXBzIik7DQotCQlwZXJzb24uc2V0RW1haWwoImJwaGlsbGlwc0BrdS5lZHUiKTsNCi0JCXBlcnNvbi5zZXRTcG9ydCgiYmFza2V0YmFsbCIpOw0KLQkJcGVyc29uLnNldEdlbmRlcigibm90IHN1cmUiKTsNCi0JCXBlcnNvbi5zZXRSZXNpZGVuY3koIktTIik7DQotCQlwZXJzb24uc2V0T3ZlcjIxKHRydWUpOwkJDQotCQlwZXJzb24uc2V0Q2FyTW9kZWxzKCBjYXJNb2RlbHMpOwkNCi0JCXBlcnNvbi5zZXRQaG9uZU51bWJlcigiMTIzLTQ1Ni05OTk5Iik7DQotDQotCQkNCi0NCi0JfQ0KLQ0KLQkNCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb24oKSB7DQotCQkNCi0JCXJldHVybiBFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbjsNCi0JfQ0KLQ0KLQ0KLQlwdWJsaWMgdm9pZCBzYXZlUGVyc29uKFBlcnNvbiBwZXJzb25CZWFuKSB7DQotDQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRGaXJzdE5hbWUocGVyc29uQmVhbi5nZXRGaXJzdE5hbWUoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0TGFzdE5hbWUocGVyc29uQmVhbi5nZXRMYXN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRTcG9ydChwZXJzb25CZWFuLmdldFNwb3J0KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEdlbmRlciggcGVyc29uQmVhbi5nZXRHZW5kZXIoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0UmVzaWRlbmN5KCBwZXJzb25CZWFuLmdldFJlc2lkZW5jeSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRPdmVyMjEoIHBlcnNvbkJlYW4uaXNPdmVyMjEoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0Q2FyTW9kZWxzKHBlcnNvbkJlYW4uZ2V0Q2FyTW9kZWxzKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEVtYWlsKCBwZXJzb25CZWFuLmdldEVtYWlsKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFBob25lTnVtYmVyKCBwZXJzb25CZWFuLmdldFBob25lTnVtYmVyKCkgKTsNCi0NCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzMiI+Ci0gICAgCSA8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotICAKLSAgIDwhLS0gZm9yIGFsbCBvdGhlciBsb2dnZXJzIGxvZyBvbmx5IGRlYnVnIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+Ci0gICAgIDxyb290PgotICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4gCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IAotICAgICA8L3Jvb3Q+IAotICAgIAotPC9sb2c0ajpjb25maWd1cmF0aW9uPiAKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sIGIvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLXZhbGlkYXRpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTg4NGZmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi12YWxpZGF0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTwhRE9DVFlQRSB2YWxpZGF0b3JzIFBVQkxJQwotICAgICAgICAgIi0vL0FwYWNoZSBTdHJ1dHMvL1hXb3JrIFZhbGlkYXRvciAxLjAuMy8vRU4iCi0gICAgICAgICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy94d29yay12YWxpZGF0b3ItMS4wLjMuZHRkIj4KLTx2YWxpZGF0b3JzPgotIDx2YWxpZGF0b3IgdHlwZT0icmVxdWlyZWRzdHJpbmciPgotIAk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLmZpcnN0TmFtZTwvcGFyYW0+Ci0gCTxtZXNzYWdlPkZpcnN0IG5hbWUgaXMgcmVxdWlyZWQuPC9tZXNzYWdlPgotIDwvdmFsaWRhdG9yPgotICA8dmFsaWRhdG9yIHR5cGU9InJlcXVpcmVkc3RyaW5nIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5sYXN0TmFtZTwvcGFyYW0+Ci0gCTxtZXNzYWdlPkxhc3QgbmFtZSBpcyByZXF1aXJlZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci0gPHZhbGlkYXRvciB0eXBlPSJyZXF1aXJlZHN0cmluZyI+Ci0gCTxwYXJhbSBuYW1lPSJmaWVsZG5hbWUiPnBlcnNvbkJlYW4uZW1haWw8L3BhcmFtPgotIAk8bWVzc2FnZT5FbWFpbCBhZGRyZXNzIGlzIHJlcXVpcmVkLjwvbWVzc2FnZT4KLSA8L3ZhbGlkYXRvcj4KLSA8dmFsaWRhdG9yIHR5cGU9ImVtYWlsIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5lbWFpbDwvcGFyYW0+Ci0gCTxtZXNzYWdlPkVtYWlsIGFkZHJlc3Mgbm90IHZhbGlkLjwvbWVzc2FnZT4KLSA8L3ZhbGlkYXRvcj4KLSA8dmFsaWRhdG9yIHR5cGU9InJlcXVpcmVkc3RyaW5nIj4KLSAJPHBhcmFtIG5hbWU9ImZpZWxkbmFtZSI+cGVyc29uQmVhbi5waG9uZU51bWJlcjwvcGFyYW0+Ci0gCTxtZXNzYWdlPlBob25lIG51bWJlciBpcyByZXF1aXJlZC48L21lc3NhZ2U+Ci0gPC92YWxpZGF0b3I+Ci08dmFsaWRhdG9yIHR5cGU9InJlZ2V4Ij4KLQk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLnBob25lTnVtYmVyPC9wYXJhbT4KLQk8cGFyYW0gbmFtZT0icmVnZXgiPjwhW0NEQVRBW1xkezN9LVxkezN9LVxkezR9XV0+PC9wYXJhbT4KLQk8bWVzc2FnZT5QaG9uZSBudW1iZXIgbXVzdCBiZSBlbnRlcmVkIGFzIDk5OS05OTktOTk5OS48L21lc3NhZ2U+Ci08L3ZhbGlkYXRvcj4KLTx2YWxpZGF0b3IgdHlwZT0iZmllbGRleHByZXNzaW9uIj4KLQk8cGFyYW0gbmFtZT0iZmllbGRuYW1lIj5wZXJzb25CZWFuLmNhck1vZGVsczwvcGFyYW0+Ci0JPHBhcmFtIG5hbWU9ImV4cHJlc3Npb24iPjwhW0NEQVRBW3BlcnNvbkJlYW4uY2FyTW9kZWxzLmxlbmd0aCA+IDBdXT48L3BhcmFtPgotCTxtZXNzYWdlPllvdSBtdXN0IHNlbGVjdCBhdCBsZWFzdCBvbmUgY2FyIG1vZGVsLjwvbWVzc2FnZT4KLTwvdmFsaWRhdG9yPgotPC92YWxpZGF0b3JzPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmNDAwYS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBlcnNvbkJlYW4uZmlyc3ROYW1lPUZpcnN0IG5hbWUNCi1wZXJzb25CZWFuLmxhc3ROYW1lPUxhc3QgbmFtZQ0KLXBlcnNvbkJlYW4uZW1haWw9RW1haWwgYWRkcmVzcw0KLXBlcnNvbkJlYW4ucGhvbmVOdW1iZXI9UGhvbmUgbnVtYmVyICg5OTktOTk5LTk5OTkpDQotcGVyc29uQmVhbi5zcG9ydD1GYXZvcml0ZSBzcG9ydA0KLXBlcnNvbkJlYW4uZ2VuZGVyPUdlbmRlcg0KLXBlcnNvbkJlYW4ucmVzaWRlbmN5PVN0YXRlIHJlc2lkZW50DQotcGVyc29uQmVhbi5vdmVyMjE9MjEgb3Igb2xkZXINCi1wZXJzb25CZWFuLmNhck1vZGVscz1DYXIgbW9kZWxzIG93bmVkDQotc3VibWl0PVNhdmUgQ2hhbmdlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzMDE5ZC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPHBhY2thZ2UgbmFtZT0iYmFzaWNzdHJ1dHMyIiBleHRlbmRzPSJzdHJ1dHMtZGVmYXVsdCI+Ci0KLSAgICAgICAgPCEtLSBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIHRoZSBmcmFtZXdvcmsgd2lsbCBhc3N1bWUgc3VjY2VzcyBhbmQgCi0gICAgICAgIHJlbmRlciB0aGUgcmVzdWx0IGluZGV4LmpzcCAtLT4KLSAgICAgICAgPCEtLSBJZiBubyBuYW1lIHZhbHVlIGZvciB0aGUgcmVzdWx0IG5vZGUgaXMgc3BlY2lmaWVkIHRoZSBzdWNjZXNzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IC0tPgotCQk8YWN0aW9uIG5hbWU9ImluZGV4Ij4KLQkJCTxyZXN1bHQ+L2luZGV4LmpzcDwvcmVzdWx0PgotCQk8L2FjdGlvbj4KLQotCSAgICA8YWN0aW9uIG5hbWU9ImVkaXQiIGNsYXNzPSJvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LmFjdGlvbi5FZGl0QWN0aW9uIiBtZXRob2Q9ImlucHV0Ij4KLQkgICAgCTxyZXN1bHQgbmFtZT0iaW5wdXQiPi9lZGl0LmpzcDwvcmVzdWx0PgotCSAgICA8L2FjdGlvbj4KLQkgICAgCi0JICAgIDxhY3Rpb24gbmFtZT0ic2F2ZSIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iZXhlY3V0ZSI+Ci0JICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0Ij4vZWRpdC5qc3A8L3Jlc3VsdD4KLQkgICAgCTxyZXN1bHQgbmFtZT0ic3VjY2VzcyI+L3RoYW5reW91LmpzcDwvcmVzdWx0PgotCSAgICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQ2xhc3MtUGF0aDogDQotDQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc5MGJhZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotPGRpc3BsYXktbmFtZT5QcmVwYXJhYmxlIEludGVyZmFjZTwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcCBiL3N0cnV0czJleGFtcGxlcy9wcmVwYXJhYmxlX2ludGVyZmFjZS9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YTk5MDEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08czpoZWFkIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBFZGl0IFBlcnNvbjwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5VcGRhdGUgSW5mb3JtYXRpb248L2gxPgotCi08cD5Vc2UgdGhlIGZvcm0gYmVsb3cgdG8gZWRpdCB5b3VyIGluZm9ybWF0aW9uLjwvcD4KLQotPHM6Zm9ybSBhY3Rpb249InNhdmUiIG1ldGhvZD0icG9zdCI+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgLz4gCi08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAvPiAKLTxzOnRleHRmaWVsZCBrZXk9InBlcnNvbkJlYW4uZW1haWwiIC8+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLnBob25lTnVtYmVyIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5zcG9ydCIgbGlzdD0ic3BvcnRzIiAvPgotPHM6cmFkaW8ga2V5PSJwZXJzb25CZWFuLmdlbmRlciIgbGlzdD0iZ2VuZGVycyIgLz4KLTxzOnNlbGVjdCBrZXk9InBlcnNvbkJlYW4ucmVzaWRlbmN5IiBsaXN0PSJzdGF0ZXMiIGxpc3RLZXk9InN0YXRlQWJiciIgbGlzdFZhbHVlPSJzdGF0ZU5hbWUiIC8+Ci08czpjaGVja2JveCBrZXk9InBlcnNvbkJlYW4ub3ZlcjIxIiAvPgotPHM6Y2hlY2tib3hsaXN0IGtleT0icGVyc29uQmVhbi5jYXJNb2RlbHMiIGxpc3Q9ImNhck1vZGVsc0F2YWlsYWJsZSIgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgyMDlkOC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3ByZXBhcmFibGVfaW50ZXJmYWNlL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhMzA2Zi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcHJlcGFyYWJsZV9pbnRlcmZhY2Uvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvcmVzdGZ1bDJhY3Rpb25tYXBwZXIvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJmMzAxOS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcmVzdGZ1bDJhY3Rpb25tYXBwZXIvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFJFU1QgU3R5bGUgVVJMIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3Jlc3RzdHlsZWFjdGlvbm1hcHBlci8KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIuCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZGY4Y2MuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+cmVzdGZ1bDJhY3Rpb25tYXBwZXI8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQk8bmFtZT5SRVNUIHRvIEFjdGlvbiBNYXBwZXIgRXhhbXBsZSBBcHBsaWNhdGlvbjwvbmFtZT4KLQk8ZGVzY3JpcHRpb24+RXhhbXBsZSBvZiB1c2luZyBSZXN0IHN0eWxlIFVSTHMgZm9yIAotICBTdHJ1dHMgMiBHZXR0aW5nIFN0YXJ0ZWQgdHV0b3JpYWxzPC9kZXNjcmlwdGlvbj4KLQk8YnVpbGQ+Ci0JCTxmaW5hbE5hbWU+cmVzdHN0eWxlYWN0aW9ubWFwcGVyPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZXhhbXBsZS9Nb3ZpZUFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZXhhbXBsZS9Nb3ZpZUFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjc3M2FlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2V4YW1wbGUvTW92aWVBY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZXhhbXBsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOwotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotcHVibGljIGNsYXNzIE1vdmllQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUiA9IExvZ2dlci5nZXRMb2dnZXIoTW92aWVBY3Rpb24uY2xhc3MuZ2V0TmFtZSgpICk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQlwcml2YXRlIFN0cmluZyBpZDsKLQkKLQkvKioKLQkgKiBNZXRob2QgaXMgY2FsbGVkIGlmIHVybCBpcyBtb3ZlL1thbnkgdmFsdWUgYnV0IG5ld10gCi0JICogYW5kIGh0dHAgZ2V0IHJlcXVlc3QuICBUaGUgdmFsdWUgYWZ0ZXIgdGhlIC8KLQkgKiB3aWxsIGJlIHByb3ZpZGVkIHRvIHRoZSBzZXRJZCBtZXRob2QuCi0JICogQHJldHVybiBzdWNjZXNzCi0JICovCi0JcHVibGljIFN0cmluZyB2aWV3KCkgewotCQkKLQkJTE9HR0VSLmRlYnVnKCJWYWx1ZSBvZiBpZCBpcyAiICsgaWQpOwotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQotCX0KLQkKLQkvKioKLQkgKiBNZXRob2QgaXMgY2FsbGVkIGlmIHVybCBpcyBtb3ZpZS8gLgotCSAqIE5vIHZhbHVlIHdpbGwgYmUgc2VudCB0byBzZXRJZC4KLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIFN0cmluZyBpbmRleCgpIHsKLQkJCi0JCQotCQlMT0dHRVIuZGVidWcoIlZhbHVlIG9mIGlkIGlzICIgKyBpZCk7Ci0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJZCgpIHsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgewotCQl0aGlzLmlkID0gaWQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcmVzdGZ1bDJhY3Rpb25tYXBwZXIvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFhYzkyYWYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzLmV4YW1wbGUiPgotICAgIAkgPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLSAgCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBkZWJ1ZyBhbmQgYWJvdmUgbG9nIG1lc3NhZ2VzIC0tPgotICAgICA8cm9vdD4KLSAgICAgICAgPHByaW9yaXR5IHZhbHVlPSJJTkZPIi8+IAotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPiAKLSAgICAgPC9yb290PiAKLSAgICAKLTwvbG9nNGo6Y29uZmlndXJhdGlvbj4gCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzE3M2FiMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvcmVzdGZ1bDJhY3Rpb25tYXBwZXIvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5tYXBwZXIuY2xhc3MiCi0JCXZhbHVlPSJvcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5tYXBwZXIuUmVzdGZ1bDJBY3Rpb25NYXBwZXIiIC8+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmVuYWJsZS5TbGFzaGVzSW5BY3Rpb25OYW1lcyIgdmFsdWU9InRydWUiIC8+Ci0JCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5tYXBwZXIuYWx3YXlzU2VsZWN0RnVsbE5hbWVzcGFjZSIKLQkJdmFsdWU9ImZhbHNlIiAvPgotCQkKLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLSAgICAgIDwhLS0gdGhlIHBhcmFtIG5hbWU9ImlkIiB3aXRoIGEgdmFsdWUgb2YgezF9IGJlbG93IHRlbGxzIFN0cnV0cyB0aGF0IHRoZSAKLSAgICAgIHNlY29uZCBzdHJpbmcgKGRlbGltaXRlZCBieSB0aGUgLykgaXMgdGhlIHZhbHVlIFN0cnV0cyBzaG91bGQgcGFzcyB0byB0aGUgc2V0SWQgbWV0aG9kIAotICAgICAgb2YgdGhlIE1vdmllQWN0aW9uIGNsYXNzIC0gc28gZm9yIGV4YW1wbGUgYSB1cmwgb2YgbW92aWUvMSB3aWxsIGNhdXNlCi0gICAgICAxIHRvIGJlIHBhc3NlZCB0byBzZXRJZCBtZXRob2Qgb2YgY2xhc3MgTW92aWVBY3Rpb24KLSAgICAgIGlmIG5vIG1ldGhvZCBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTCB0aGVuIHRoZSB2aWV3IG1ldGhvZCB3aWxsIGJlIGNhbGxlZAotICAgICAgYWZ0ZXIgdGhlIHNldElkIG1ldGhvZCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJtb3ZpZS8qIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZXhhbXBsZS5Nb3ZpZUFjdGlvbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaWQiPnsxfTwvcGFyYW0+Ci0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi9tb3ZpZS5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDI3OGIwZWEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+UkVTVCBTdHlsZSBVUkxzPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvcmVzdGZ1bDJhY3Rpb25tYXBwZXIvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhZGNiMjgyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlJFU1QgU3R5bGUgVVJMcyBGb3IgU3RydXRzIDIgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLTxwPjxhIGhyZWY9Im1vdmllLzEiPkdldCBtb3ZpZSB3aXRoIGlkIHZhbHVlIG9mIDE8L2E+PC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9yZXN0ZnVsMmFjdGlvbm1hcHBlci9zcmMvbWFpbi93ZWJhcHAvbW92aWUuanNwIGIvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3dlYmFwcC9tb3ZpZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2OGYwZDAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3Jlc3RmdWwyYWN0aW9ubWFwcGVyL3NyYy9tYWluL3dlYmFwcC9tb3ZpZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+UkVTVCBTdHlsZSBVUkxzIEZvciBTdHJ1dHMgMiAtIE1vdmllPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPk1vdmllIDxzOnByb3BlcnR5IHZhbHVlPSJpZCIgLz48L2gxPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvUkVBRE1FLnR4dCBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNTA1M2QuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFN0cnV0cyAyIFNwcmluZyB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLVRoZSB3YXIgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSB0YXJnZXQgc3ViLWZvbGRlci4KLQotQ29weSB0aGUgd2FyIGZpbGUgdG8geW91ciBTZXJ2bGV0IGNvbnRhaW5lciAoZS5nLiBUb21jYXQsIEdsYXNzRmlzaCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zcHJpbmdfc3RydXRzL2luZGV4LmFjdGlvbi4KLQotWW91IHNob3VsZCBzZWUgYSB3ZWIgcGFnZSB3aXRoIFdlbGNvbWUgdG8gU3RydXRzIDIhCi0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmEzYTZiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgPHBhcmVudD4KLSAgICA8Z3JvdXBJZD5zdHJ1dHMuYXBhY2hlLm9yZzwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gIDwvcGFyZW50PgotCi0gIDxhcnRpZmFjdElkPnNwcmluZ19zdHJ1dHM8L2FydGlmYWN0SWQ+Ci0KLSAgPG5hbWU+c3ByaW5nX3N0cnV0czwvbmFtZT4KLQotICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAKLSAgPGRlcGVuZGVuY2llcz4KLSAgCQk8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPm9yZy5hcGFjaGUuc3RydXRzPC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+c3RydXRzMi1zcHJpbmctcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+JHtzdHJ1dHMyLnZlcnNpb259PC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0gIDwvZGVwZW5kZW5jaWVzPgotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPnNwcmluZ19zdHJ1dHM8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24uamF2YSBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTU3ZDllLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlN0YXRlOwotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZS5FZGl0U2VydmljZTsKLQotCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsKLQotLyoqCi0gKiBBY3RzIGFzIGEgY29udHJvbGxlciB0byBoYW5kbGUgYWN0aW9ucwotICogcmVsYXRlZCB0byBlZGl0aW5nIGEgUGVyc29uLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIEVkaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb25TdXBwb3J0IHsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkKLQlwcml2YXRlIEVkaXRTZXJ2aWNlIGVkaXRTZXJ2aWNlIDsKLQkKLQlwcml2YXRlIFBlcnNvbiBwZXJzb25CZWFuOwotCQotCXByaXZhdGUgU3RyaW5nIFtdIHNwb3J0cyA9IHsiZm9vdGJhbGwiLCAiYmFzZWJhbGwiLCAiYmFza2V0YmFsbCIgfTsKLQkKLQlwcml2YXRlIFN0cmluZyBbXSBnZW5kZXJzID0geyJtYWxlIiwgImZlbWFsZSIsICJub3Qgc3VyZSIgfTsKLQkKLQlwcml2YXRlIExpc3Q8U3RhdGU+IHN0YXRlcyA7Ci0KLQlwcml2YXRlIFN0cmluZyBbXSBjYXJNb2RlbHNBdmFpbGFibGUgPSB7IkZvcmQiLCJDaHJ5c2xlciIsIlRveW90YSIsIk5pc3NhbiJ9OwotCi0JcHVibGljIFN0cmluZyBleGVjdXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCSAgICBlZGl0U2VydmljZS5zYXZlUGVyc29uKCBnZXRQZXJzb25CZWFuKCkgKTsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCQkKLQl9Ci0JCi0JCi0JcHVibGljIFN0cmluZyBpbnB1dCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJc2V0UGVyc29uQmVhbiggZWRpdFNlcnZpY2UuZ2V0UGVyc29uKCkgKTsKLQkJCi0JCXJldHVybiBJTlBVVDsKLQl9Ci0JCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCQkKLQkJCi0JCXJldHVybiBwZXJzb25CZWFuOwotCQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0UGVyc29uQmVhbihQZXJzb24gcGVyc29uKSB7Ci0JCQotCQlwZXJzb25CZWFuID0gcGVyc29uOwotCQkKLQl9Ci0KLQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0U3BvcnRzKCkgewotCQlyZXR1cm4gQXJyYXlzLmFzTGlzdChzcG9ydHMpOwotCX0KLQkKLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEdlbmRlcnMoKSB7Ci0JCQotCQlyZXR1cm4gQXJyYXlzLmFzTGlzdChnZW5kZXJzKTsKLQkJCi0JfQotCi0KLQotCXB1YmxpYyBMaXN0PFN0YXRlPiBnZXRTdGF0ZXMoKSB7Ci0JCQotCQlzdGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFN0YXRlPigpOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkFaIiwgIkFyaXpvbmEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkNBIiwgIkNhbGlmb3JuaWEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIkZMIiwgIkZsb3JpZGEiKSApOwotCQlzdGF0ZXMuYWRkKCBuZXcgU3RhdGUoIktTIiwgIkthbnNhcyIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiTlkiLCAiTmV3IFlvcmsiKSApOwotCQkKLQkJcmV0dXJuIHN0YXRlczsKLQl9Ci0KLQotCi0JcHVibGljIFN0cmluZyBbXSBnZXRDYXJNb2RlbHNBdmFpbGFibGUoKSB7Ci0JCXJldHVybiBjYXJNb2RlbHNBdmFpbGFibGU7Ci0JfQotCi0KLQlwdWJsaWMgRWRpdFNlcnZpY2UgZ2V0RWRpdFNlcnZpY2UoKSB7Ci0JCXJldHVybiBlZGl0U2VydmljZTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldEVkaXRTZXJ2aWNlKEVkaXRTZXJ2aWNlIGVkaXRTZXJ2aWNlKSB7Ci0JCQotCQl0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTJhOGRlLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc3BvcnQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZGVyOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc2lkZW5jeTsKLSAgICBwcml2YXRlIGJvb2xlYW4gb3ZlcjIxOwotICAgIHByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsczsKLSAKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rmlyc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Rmlyc3ROYW1lKFN0cmluZyBmaXJzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMYXN0TmFtZShTdHJpbmcgbGFzdE5hbWUpCi0gICAgewotICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7Ci0gICAgfQotCi0KLQotCi0JcHVibGljIHZvaWQgc2V0U3BvcnQoU3RyaW5nIHNwb3J0KSB7Ci0JCXRoaXMuc3BvcnQgPSBzcG9ydDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRHZW5kZXIoU3RyaW5nIGdlbmRlcikgewotCQl0aGlzLmdlbmRlciA9IGdlbmRlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEdlbmRlcigpIHsKLQkJcmV0dXJuIGdlbmRlcjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNwb3J0KCkgewotCQlyZXR1cm4gc3BvcnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UmVzaWRlbmN5KFN0cmluZyByZXNpZGVuY3kpIHsKLQkJdGhpcy5yZXNpZGVuY3kgPSByZXNpZGVuY3k7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRSZXNpZGVuY3koKSB7Ci0JCXJldHVybiByZXNpZGVuY3k7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0T3ZlcjIxKGJvb2xlYW4gb3ZlcjIxKSB7Ci0JCXRoaXMub3ZlcjIxID0gb3ZlcjIxOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzT3ZlcjIxKCkgewotCQlyZXR1cm4gb3ZlcjIxOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhck1vZGVscyhTdHJpbmcgW10gY2FyTW9kZWxzKSB7Ci0JCXRoaXMuY2FyTW9kZWxzID0gY2FyTW9kZWxzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgW10gZ2V0Q2FyTW9kZWxzKCkgewotCQlyZXR1cm4gY2FyTW9kZWxzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJGaXJzdCBOYW1lOiAiICsgZ2V0Rmlyc3ROYW1lKCkgKyAiIHwgIiArCi0gICAgICAgICIgTGFzdCBOYW1lOiAgIiArIGdldExhc3ROYW1lKCkgKyAiIHwgIiArCi0gICAgICAgICIgRmF2b3JpdGUgU3BvcnQ6ICIgKyBnZXRTcG9ydCgpICsgIiB8ICIgKwotICAgICAgICAiIEdlbmRlcjogIiArIGdldEdlbmRlcigpICsgIiB8ICIgKyAgCi0gICAgICAgICIgUmVzaWRlbmN5OiAiICsgZ2V0UmVzaWRlbmN5KCkgKyAiIHwgIiArCi0gICAgICAgICIgT3ZlciAyMTogIiArIGlzT3ZlcjIxKCkgICsgIiB8ICIgKwotICAgICAgICAiIENhciBtb2RlbHM6ICIgKyBBcnJheXMuYXNMaXN0KCBnZXRDYXJNb2RlbHMoKSApIDsKLSAgICAgICAgCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5MjdlMS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvU3RhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbDsKLQotcHVibGljIGNsYXNzIFN0YXRlIHsKLQkKLQlwcml2YXRlIFN0cmluZyBzdGF0ZUFiYnI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdGVOYW1lOwotCQotCXB1YmxpYyBTdGF0ZSAoU3RyaW5nIHN0YXRlQWJiciwgU3RyaW5nIHN0YXRlTmFtZSkgewotCQkKLQkJdGhpcy5zdGF0ZUFiYnIgPSBzdGF0ZUFiYnI7Ci0JCXRoaXMuc3RhdGVOYW1lID0gc3RhdGVOYW1lOwotCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZUFiYnIoU3RyaW5nIHN0YXRlQWJicikgewotCQl0aGlzLnN0YXRlQWJiciA9IHN0YXRlQWJicjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXRlQWJicigpIHsKLQkJcmV0dXJuIHN0YXRlQWJicjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTdGF0ZU5hbWUoU3RyaW5nIHN0YXRlTmFtZSkgewotCQl0aGlzLnN0YXRlTmFtZSA9IHN0YXRlTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFN0YXRlTmFtZSgpIHsKLQkJcmV0dXJuIHN0YXRlTmFtZTsKLQl9Ci0JCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCi0JCXJldHVybiBnZXRTdGF0ZUFiYnIoKSA7Ci0JCQotCX0KLQkKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MmUwNTMuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi1wdWJsaWMgaW50ZXJmYWNlIEVkaXRTZXJ2aWNlIHsNCi0JDQotCQ0KLQlQZXJzb24gZ2V0UGVyc29uKCkgOw0KLQ0KLQl2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pOw0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OWIxZDAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2VJbk1lbW9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWwuUGVyc29uOw0KLQ0KLS8qKg0KLSAqIEltcGxlbWVudCBTZXJ2aWNlcyBuZWVkZWQgdG8gZWRpdCBhbmQgc2F2ZQ0KLSAqIGEgUGVyc29uIG9iamVjdCdzIHN0YXRlLiAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbg0KLSAqIHRoZSBQZXJzb24gb2JqZWN0J3Mgc3RhdGUgaXMgc3RvcmVkIGluIG1lbW9yeQ0KLSAqIEBhdXRob3IgYnJ1Y2VwaGlsbGlwcw0KLSAqDQotICovDQotcHVibGljIGNsYXNzIEVkaXRTZXJ2aWNlSW5NZW1vcnkgaW1wbGVtZW50cyBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgUGVyc29uIHBlcnNvbiA7DQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBbXSBjYXJNb2RlbHMgPSB7IkZvcmQiLCJOaXNzYW4ifTsNCi0NCi0JDQotCXN0YXRpYyB7DQotCQkNCi0JCXBlcnNvbiA9IG5ldyBQZXJzb24oKTsNCi0JCXBlcnNvbi5zZXRGaXJzdE5hbWUoIkJydWNlIik7DQotCQlwZXJzb24uc2V0TGFzdE5hbWUoIlBoaWxsaXBzIik7DQotCQlwZXJzb24uc2V0U3BvcnQoImJhc2tldGJhbGwiKTsNCi0JCXBlcnNvbi5zZXRHZW5kZXIoIm5vdCBzdXJlIik7DQotCQlwZXJzb24uc2V0UmVzaWRlbmN5KCJLUyIpOw0KLQkJcGVyc29uLnNldE92ZXIyMSh0cnVlKTsJCQ0KLQkJcGVyc29uLnNldENhck1vZGVscyggY2FyTW9kZWxzKTsJCQ0KLQ0KLQl9DQotDQotCQ0KLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbigpIHsNCi0JCQ0KLQkJcmV0dXJuIEVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uOw0KLQl9DQotDQotDQotCXB1YmxpYyB2b2lkIHNhdmVQZXJzb24oUGVyc29uIHBlcnNvbkJlYW4pIHsNCi0NCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEZpcnN0TmFtZShwZXJzb25CZWFuLmdldEZpcnN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRMYXN0TmFtZShwZXJzb25CZWFuLmdldExhc3ROYW1lKCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldFNwb3J0KHBlcnNvbkJlYW4uZ2V0U3BvcnQoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0R2VuZGVyKCBwZXJzb25CZWFuLmdldEdlbmRlcigpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRSZXNpZGVuY3koIHBlcnNvbkJlYW4uZ2V0UmVzaWRlbmN5KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldE92ZXIyMSggcGVyc29uQmVhbi5pc092ZXIyMSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRDYXJNb2RlbHMocGVyc29uQmVhbi5nZXRDYXJNb2RlbHMoKSApOw0KLQ0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFiZDk2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMDBjYjIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzIGIvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI4NjlkYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1wZXJzb25CZWFuLmZpcnN0TmFtZT1GaXJzdCBuYW1lDQotcGVyc29uQmVhbi5sYXN0TmFtZT1MYXN0IG5hbWUNCi1wZXJzb25CZWFuLnNwb3J0PUZhdm9yaXRlIHNwb3J0DQotcGVyc29uQmVhbi5nZW5kZXI9R2VuZGVyDQotcGVyc29uQmVhbi5yZXNpZGVuY3k9U3RhdGUgcmVzaWRlbnQNCi1wZXJzb25CZWFuLm92ZXIyMT0yMSBvciBvbGRlcg0KLXBlcnNvbkJlYW4uY2FyTW9kZWxzPUNhciBtb2RlbHMgb3duZWQNCi1zdWJtaXQ9U2F2ZSBDaGFuZ2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjNWU1ZC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgCTxyZXN1bHQgbmFtZT0ic3VjY2VzcyI+L3RoYW5reW91LmpzcDwvcmVzdWx0PgotCSAgICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0OTUxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQ2xhc3MtUGF0aDogDQotDQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYXBwbGljYXRpb25Db250ZXh0LnhtbCBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2FwcGxpY2F0aW9uQ29udGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmM2YyNzguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYXBwbGljYXRpb25Db250ZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCi0gICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgotICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucwotICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KLQotPGJlYW4gaWQ9ImVkaXRTZXJ2aWNlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkVkaXRTZXJ2aWNlSW5NZW1vcnkiIC8+Ci0KLTwvYmVhbnM+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjYjljZS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+U3ByaW5nIFN0cnV0cyAyPC9kaXNwbGF5LW5hbWU+Ci0JCi0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JCi0JPGxpc3RlbmVyPgotCQk8bGlzdGVuZXItY2xhc3M+b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuY29udGV4dC5Db250ZXh0TG9hZGVyTGlzdGVuZXI8L2xpc3RlbmVyLWNsYXNzPgotCTwvbGlzdGVuZXI+Ci0KLQk8ZmlsdGVyPgotCQk8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+Ci0JCTxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMyLmRpc3BhdGNoZXIubmcuZmlsdGVyLlN0cnV0c1ByZXBhcmVBbmRFeGVjdXRlRmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0JPC9maWx0ZXI+Ci0KLQk8ZmlsdGVyLW1hcHBpbmc+Ci0JCTxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8L2ZpbHRlci1tYXBwaW5nPgotCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvc3ByaW5nX3N0cnV0cy9zcmMvbWFpbi93ZWJhcHAvZWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZDA1ZTQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxzOmhlYWQgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlN0cnV0cyAyIEZvcm0gVGFncyAtIEVkaXQgUGVyc29uPC90aXRsZT4KLQotPC9oZWFkPgotPGJvZHk+Ci08aDE+VXBkYXRlIEluZm9ybWF0aW9uPC9oMT4KLQotPHA+VXNlIHRoZSBmb3JtIGJlbG93IHRvIGVkaXQgeW91ciBpbmZvcm1hdGlvbi48L3A+Ci0KLTxzOmZvcm0gYWN0aW9uPSJzYXZlIiBtZXRob2Q9InBvc3QiPgotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5maXJzdE5hbWUiIC8+IAotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5sYXN0TmFtZSIgLz4gCi08czpzZWxlY3Qga2V5PSJwZXJzb25CZWFuLnNwb3J0IiBsaXN0PSJzcG9ydHMiIC8+Ci08czpyYWRpbyBrZXk9InBlcnNvbkJlYW4uZ2VuZGVyIiBsaXN0PSJnZW5kZXJzIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5yZXNpZGVuY3kiIGxpc3Q9InN0YXRlcyIgbGlzdEtleT0ic3RhdGVBYmJyIiBsaXN0VmFsdWU9InN0YXRlTmFtZSIgLz4KLTxzOmNoZWNrYm94IGtleT0icGVyc29uQmVhbi5vdmVyMjEiIC8+Ci08czpjaGVja2JveGxpc3Qga2V5PSJwZXJzb25CZWFuLmNhck1vZGVscyIgbGlzdD0iY2FyTW9kZWxzQXZhaWxhYmxlIiAgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MjA5ZDguLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcCBiL3N0cnV0czJleGFtcGxlcy9zcHJpbmdfc3RydXRzL3NyYy9tYWluL3dlYmFwcC90aGFua3lvdS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTMwNmYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3NwcmluZ19zdHJ1dHMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzdhNjJmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFN0cnV0cyAyIFRoZW1lcyB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLVRoZSB3YXIgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSB0YXJnZXQgc3ViLWZvbGRlci4KLQotQ29weSB0aGUgd2FyIGZpbGUgdG8geW91ciBTZXJ2bGV0IGNvbnRhaW5lciAoZS5nLiBUb21jYXQsIEdsYXNzRmlzaCkgYW5kIAotdGhlbiBzdGFydHVwIHRoZSBTZXJ2bGV0IGNvbnRhaW5lci4KLQotSW4gYSB3ZWIgYnJvd3NlciBnbyB0bzogIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC90aGVtZXMvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2RkNDNjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+MS4wLjA8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD50aGVtZXM8L2FydGlmYWN0SWQ+Ci0KLSAgICA8bmFtZT5TdHJ1dHMgMiBUaGVtZXM8L25hbWU+Ci0KLSAgICA8ZGVzY3JpcHRpb24+U3RydXRzIDIgdGhlbWVzIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZQotICAgICAgICBTdHJ1dHMgMiBnZXR0aW5nIHN0YXJ0ZWQgdHV0b3JpYWxzCi0gICAgPC9kZXNjcmlwdGlvbj4KLQotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxmaW5hbE5hbWU+dGhlbWVzPC9maW5hbE5hbWU+Ci0gICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qZXR0eS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+OC4xLjcudjIwMTIwOTEwPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c3RvcEtleT5DVFJMK0M8L3N0b3BLZXk+Ci0gICAgICAgICAgICAgICAgICAgIDxzdG9wUG9ydD44OTk5PC9zdG9wUG9ydD4KLSAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MTA8L3NjYW5JbnRlcnZhbFNlY29uZHM+Ci0gICAgICAgICAgICAgICAgICAgIDxzY2FuVGFyZ2V0cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzY2FuVGFyZ2V0PnNyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWw8L3NjYW5UYXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2NhblRhcmdldHM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLQotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTA3ZmYyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L2FjdGlvbi9FZGl0QWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5TdGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0LnNlcnZpY2UuRWRpdFNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlLkVkaXRTZXJ2aWNlSW5NZW1vcnk7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotCi0vKioKLSAqIEFjdHMgYXMgYSBjb250cm9sbGVyIHRvIGhhbmRsZSBhY3Rpb25zCi0gKiByZWxhdGVkIHRvIGVkaXRpbmcgYSBQZXJzb24uCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgRWRpdEFjdGlvbiBleHRlbmRzIEFjdGlvblN1cHBvcnQgewotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCXByaXZhdGUgRWRpdFNlcnZpY2UgZWRpdFNlcnZpY2UgPSBuZXcgRWRpdFNlcnZpY2VJbk1lbW9yeSgpOwotCQotCXByaXZhdGUgUGVyc29uIHBlcnNvbkJlYW47Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgW10gc3BvcnRzID0geyJmb290YmFsbCIsICJiYXNlYmFsbCIsICJiYXNrZXRiYWxsIiB9OwotCQotCXByaXZhdGUgU3RyaW5nIFtdIGdlbmRlcnMgPSB7Im1hbGUiLCAiZmVtYWxlIiwgIm5vdCBzdXJlIiB9OwotCQotCXByaXZhdGUgTGlzdDxTdGF0ZT4gc3RhdGVzIDsKLQotCXByaXZhdGUgU3RyaW5nIFtdIGNhck1vZGVsc0F2YWlsYWJsZSA9IHsiRm9yZCIsIkNocnlzbGVyIiwiVG95b3RhIiwiTmlzc2FuIn07Ci0KLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JICAgIGVkaXRTZXJ2aWNlLnNhdmVQZXJzb24oIGdldFBlcnNvbkJlYW4oKSApOwotCQkKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JCQotCX0KLQkKLQkKLQlwdWJsaWMgU3RyaW5nIGlucHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlzZXRQZXJzb25CZWFuKCBlZGl0U2VydmljZS5nZXRQZXJzb24oKSApOwotCQkKLQkJcmV0dXJuIElOUFVUOwotCX0KLQkKLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbkJlYW4oKSB7Ci0JCQotCQkKLQkJcmV0dXJuIHBlcnNvbkJlYW47Ci0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQZXJzb25CZWFuKFBlcnNvbiBwZXJzb24pIHsKLQkJCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0JCQotCX0KLQotCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTcG9ydHMoKSB7Ci0JCXJldHVybiBBcnJheXMuYXNMaXN0KHNwb3J0cyk7Ci0JfQotCQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0R2VuZGVycygpIHsKLQkJCi0JCXJldHVybiBBcnJheXMuYXNMaXN0KGdlbmRlcnMpOwotCQkKLQl9Ci0KLQotCi0JcHVibGljIExpc3Q8U3RhdGU+IGdldFN0YXRlcygpIHsKLQkJCi0JCXN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RhdGU+KCk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiQVoiLCAiQXJpem9uYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiQ0EiLCAiQ2FsaWZvcm5pYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiRkwiLCAiRmxvcmlkYSIpICk7Ci0JCXN0YXRlcy5hZGQoIG5ldyBTdGF0ZSgiS1MiLCAiS2Fuc2FzIikgKTsKLQkJc3RhdGVzLmFkZCggbmV3IFN0YXRlKCJOWSIsICJOZXcgWW9yayIpICk7Ci0JCQotCQlyZXR1cm4gc3RhdGVzOwotCX0KLQotCi0KLQlwdWJsaWMgU3RyaW5nIFtdIGdldENhck1vZGVsc0F2YWlsYWJsZSgpIHsKLQkJcmV0dXJuIGNhck1vZGVsc0F2YWlsYWJsZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvUGVyc29uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MmE4ZGUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvbW9kZWwvUGVyc29uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0KLS8qKgotICogTW9kZWxzIGEgUGVyc29uIHdobyByZWdpc3RlcnMuCi0gKiBAYXV0aG9yIGJydWNlIHBoaWxsaXBzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUGVyc29uCi17Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZmlyc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIGxhc3ROYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIHNwb3J0OwotICAgIHByaXZhdGUgU3RyaW5nIGdlbmRlcjsKLSAgICBwcml2YXRlIFN0cmluZyByZXNpZGVuY3k7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG92ZXIyMTsKLSAgICBwcml2YXRlIFN0cmluZyBbXSBjYXJNb2RlbHM7Ci0gCi0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMYXN0TmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbGFzdE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TGFzdE5hbWUoU3RyaW5nIGxhc3ROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOwotICAgIH0KLQotCi0KLQotCXB1YmxpYyB2b2lkIHNldFNwb3J0KFN0cmluZyBzcG9ydCkgewotCQl0aGlzLnNwb3J0ID0gc3BvcnQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0R2VuZGVyKFN0cmluZyBnZW5kZXIpIHsKLQkJdGhpcy5nZW5kZXIgPSBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRHZW5kZXIoKSB7Ci0JCXJldHVybiBnZW5kZXI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTcG9ydCgpIHsKLQkJcmV0dXJuIHNwb3J0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFJlc2lkZW5jeShTdHJpbmcgcmVzaWRlbmN5KSB7Ci0JCXRoaXMucmVzaWRlbmN5ID0gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVzaWRlbmN5KCkgewotCQlyZXR1cm4gcmVzaWRlbmN5OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE92ZXIyMShib29sZWFuIG92ZXIyMSkgewotCQl0aGlzLm92ZXIyMSA9IG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc092ZXIyMSgpIHsKLQkJcmV0dXJuIG92ZXIyMTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYXJNb2RlbHMoU3RyaW5nIFtdIGNhck1vZGVscykgewotCQl0aGlzLmNhck1vZGVscyA9IGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIFtdIGdldENhck1vZGVscygpIHsKLQkJcmV0dXJuIGNhck1vZGVsczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiRmlyc3QgTmFtZTogIiArIGdldEZpcnN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIExhc3QgTmFtZTogICIgKyBnZXRMYXN0TmFtZSgpICsgIiB8ICIgKwotICAgICAgICAiIEZhdm9yaXRlIFNwb3J0OiAiICsgZ2V0U3BvcnQoKSArICIgfCAiICsKLSAgICAgICAgIiBHZW5kZXI6ICIgKyBnZXRHZW5kZXIoKSArICIgfCAiICsgIAotICAgICAgICAiIFJlc2lkZW5jeTogIiArIGdldFJlc2lkZW5jeSgpICsgIiB8ICIgKwotICAgICAgICAiIE92ZXIgMjE6ICIgKyBpc092ZXIyMSgpICArICIgfCAiICsKLSAgICAgICAgIiBDYXIgbW9kZWxzOiAiICsgQXJyYXlzLmFzTGlzdCggZ2V0Q2FyTW9kZWxzKCkgKSA7Ci0gICAgICAgIAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9tb2RlbC9TdGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjkyN2UxLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L21vZGVsL1N0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQubW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBTdGF0ZSB7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgc3RhdGVBYmJyOwotCQotCXByaXZhdGUgU3RyaW5nIHN0YXRlTmFtZTsKLQkKLQlwdWJsaWMgU3RhdGUgKFN0cmluZyBzdGF0ZUFiYnIsIFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJCi0JCXRoaXMuc3RhdGVBYmJyID0gc3RhdGVBYmJyOwotCQl0aGlzLnN0YXRlTmFtZSA9IHN0YXRlTmFtZTsKLQkJCi0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVBYmJyKFN0cmluZyBzdGF0ZUFiYnIpIHsKLQkJdGhpcy5zdGF0ZUFiYnIgPSBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZUFiYnIoKSB7Ci0JCXJldHVybiBzdGF0ZUFiYnI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3RhdGVOYW1lKFN0cmluZyBzdGF0ZU5hbWUpIHsKLQkJdGhpcy5zdGF0ZU5hbWUgPSBzdGF0ZU5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdGF0ZU5hbWUoKSB7Ci0JCXJldHVybiBzdGF0ZU5hbWU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQotCQlyZXR1cm4gZ2V0U3RhdGVBYmJyKCkgOwotCQkKLQl9Ci0JCi0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9lZGl0L3NlcnZpY2UvRWRpdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZTA1My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLmVkaXQuc2VydmljZTsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5tb2RlbC5QZXJzb247DQotDQotcHVibGljIGludGVyZmFjZSBFZGl0U2VydmljZSB7DQotCQ0KLQkNCi0JUGVyc29uIGdldFBlcnNvbigpIDsNCi0NCi0Jdm9pZCBzYXZlUGVyc29uKFBlcnNvbiBwZXJzb25CZWFuKTsNCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvc2VydmljZS9FZGl0U2VydmljZUluTWVtb3J5LmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5YjFkMC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9zZXJ2aWNlL0VkaXRTZXJ2aWNlSW5NZW1vcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5zZXJ2aWNlOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy5lZGl0Lm1vZGVsLlBlcnNvbjsNCi0NCi0vKioNCi0gKiBJbXBsZW1lbnQgU2VydmljZXMgbmVlZGVkIHRvIGVkaXQgYW5kIHNhdmUNCi0gKiBhIFBlcnNvbiBvYmplY3QncyBzdGF0ZS4gIEluIHRoaXMgaW1wbGVtZW50YXRpb24NCi0gKiB0aGUgUGVyc29uIG9iamVjdCdzIHN0YXRlIGlzIHN0b3JlZCBpbiBtZW1vcnkNCi0gKiBAYXV0aG9yIGJydWNlcGhpbGxpcHMNCi0gKg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBFZGl0U2VydmljZUluTWVtb3J5IGltcGxlbWVudHMgRWRpdFNlcnZpY2Ugew0KLQkNCi0JDQotCXByaXZhdGUgc3RhdGljIFBlcnNvbiBwZXJzb24gOw0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgW10gY2FyTW9kZWxzID0geyJGb3JkIiwiTmlzc2FuIn07DQotDQotCQ0KLQlzdGF0aWMgew0KLQkJDQotCQlwZXJzb24gPSBuZXcgUGVyc29uKCk7DQotCQlwZXJzb24uc2V0Rmlyc3ROYW1lKCJCcnVjZSIpOw0KLQkJcGVyc29uLnNldExhc3ROYW1lKCJQaGlsbGlwcyIpOw0KLQkJcGVyc29uLnNldFNwb3J0KCJiYXNrZXRiYWxsIik7DQotCQlwZXJzb24uc2V0R2VuZGVyKCJub3Qgc3VyZSIpOw0KLQkJcGVyc29uLnNldFJlc2lkZW5jeSgiS1MiKTsNCi0JCXBlcnNvbi5zZXRPdmVyMjEodHJ1ZSk7CQkNCi0JCXBlcnNvbi5zZXRDYXJNb2RlbHMoIGNhck1vZGVscyk7CQkNCi0NCi0JfQ0KLQ0KLQkNCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb24oKSB7DQotCQkNCi0JCXJldHVybiBFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbjsNCi0JfQ0KLQ0KLQ0KLQlwdWJsaWMgdm9pZCBzYXZlUGVyc29uKFBlcnNvbiBwZXJzb25CZWFuKSB7DQotDQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRGaXJzdE5hbWUocGVyc29uQmVhbi5nZXRGaXJzdE5hbWUoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0TGFzdE5hbWUocGVyc29uQmVhbi5nZXRMYXN0TmFtZSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRTcG9ydChwZXJzb25CZWFuLmdldFNwb3J0KCkgKTsNCi0JCUVkaXRTZXJ2aWNlSW5NZW1vcnkucGVyc29uLnNldEdlbmRlciggcGVyc29uQmVhbi5nZXRHZW5kZXIoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0UmVzaWRlbmN5KCBwZXJzb25CZWFuLmdldFJlc2lkZW5jeSgpICk7DQotCQlFZGl0U2VydmljZUluTWVtb3J5LnBlcnNvbi5zZXRPdmVyMjEoIHBlcnNvbkJlYW4uaXNPdmVyMjEoKSApOw0KLQkJRWRpdFNlcnZpY2VJbk1lbW9yeS5wZXJzb24uc2V0Q2FyTW9kZWxzKHBlcnNvbkJlYW4uZ2V0Q2FyTW9kZWxzKCkgKTsNCi0NCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYWJkOTYuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbCBiL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwMGNiMi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzMiI+Ci0gICAgCSA8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotICAKLSAgIDwhLS0gZm9yIGFsbCBvdGhlciBsb2dnZXJzIGxvZyBvbmx5IGRlYnVnIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+Ci0gICAgIDxyb290PgotICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4gCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IAotICAgICA8L3Jvb3Q+IAotICAgIAotPC9sb2c0ajpjb25maWd1cmF0aW9uPiAKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zdHJ1dHMvZWRpdC9hY3Rpb24vRWRpdEFjdGlvbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjg2OWRiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc3RydXRzL2VkaXQvYWN0aW9uL0VkaXRBY3Rpb24ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotcGVyc29uQmVhbi5maXJzdE5hbWU9Rmlyc3QgbmFtZQ0KLXBlcnNvbkJlYW4ubGFzdE5hbWU9TGFzdCBuYW1lDQotcGVyc29uQmVhbi5zcG9ydD1GYXZvcml0ZSBzcG9ydA0KLXBlcnNvbkJlYW4uZ2VuZGVyPUdlbmRlcg0KLXBlcnNvbkJlYW4ucmVzaWRlbmN5PVN0YXRlIHJlc2lkZW50DQotcGVyc29uQmVhbi5vdmVyMjE9MjEgb3Igb2xkZXINCi1wZXJzb25CZWFuLmNhck1vZGVscz1DYXIgbW9kZWxzIG93bmVkDQotc3VibWl0PVNhdmUgQ2hhbmdlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2VmNTNmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIgotICAgICJodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcvZHRkcy9zdHJ1dHMtMi4wLmR0ZCI+Ci0KLTxzdHJ1dHM+Ci0KLQk8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmRldk1vZGUiIHZhbHVlPSJ0cnVlIiAvPgotICAgIDxjb25zdGFudCBuYW1lPSJzdHJ1dHMudWkudGhlbWUiIHZhbHVlPSJLVVRoZW1lIi8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCi0JICAgIDxhY3Rpb24gbmFtZT0iZWRpdCIgY2xhc3M9Im9yZy5hcGFjaGUuc3RydXRzLmVkaXQuYWN0aW9uLkVkaXRBY3Rpb24iIG1ldGhvZD0iaW5wdXQiPgotCSAgICAJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L2VkaXQuanNwPC9yZXN1bHQ+Ci0JICAgIDwvYWN0aW9uPgotCSAgICAKLQkgICAgPGFjdGlvbiBuYW1lPSJzYXZlIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMuZWRpdC5hY3Rpb24uRWRpdEFjdGlvbiIgbWV0aG9kPSJleGVjdXRlIj4KLQkgICAgCTxyZXN1bHQgbmFtZT0ic3VjY2VzcyI+L3RoYW5reW91LmpzcDwvcmVzdWx0PgotCSAgICA8L2FjdGlvbj4KLQotCTwvcGFja2FnZT4KLQotPC9zdHJ1dHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9yZXNvdXJjZXMvdGVtcGxhdGUvS1VUaGVtZS9jaGVja2JveGxpc3QuZnRsIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi9yZXNvdXJjZXMvdGVtcGxhdGUvS1VUaGVtZS9jaGVja2JveGxpc3QuZnRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MThiYzRiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWUvY2hlY2tib3hsaXN0LmZ0bAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCNpbmNsdWRlICIvJHtwYXJhbWV0ZXJzLnRlbXBsYXRlRGlyfS8ke3BhcmFtZXRlcnMuZXhwYW5kVGhlbWV9L2NvbnRyb2xoZWFkZXIuZnRsIiAvPgotPCNpbmNsdWRlICIvJHtwYXJhbWV0ZXJzLnRlbXBsYXRlRGlyfS9LVVRoZW1lX3NpbXBsZS9jaGVja2JveGxpc3QuZnRsIiAvPgotPCNpbmNsdWRlICIvJHtwYXJhbWV0ZXJzLnRlbXBsYXRlRGlyfS8ke3BhcmFtZXRlcnMuZXhwYW5kVGhlbWV9L2NvbnRyb2xmb290ZXIuZnRsIiAvPjwjbnQvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWUvdGhlbWUucHJvcGVydGllcyBiL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWUvdGhlbWUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZkZTU5Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy90ZW1wbGF0ZS9LVVRoZW1lL3RoZW1lLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wYXJlbnQgPSBLVVRoZW1lX3NpbXBsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWVfc2ltcGxlL2NoZWNrYm94bGlzdC5mdGwgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy90ZW1wbGF0ZS9LVVRoZW1lX3NpbXBsZS9jaGVja2JveGxpc3QuZnRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzNmMTRjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWVfc2ltcGxlL2NoZWNrYm94bGlzdC5mdGwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08I2Fzc2lnbiBpdGVtQ291bnQgPSAwLz4KLTwjaWYgcGFyYW1ldGVycy5saXN0Pz8+Ci0gICAgPEBzLml0ZXJhdG9yIHZhbHVlPSJwYXJhbWV0ZXJzLmxpc3QiPgotICAgICAgICA8I2Fzc2lnbiBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxLz4KLSAgICAgICAgPCNpZiBwYXJhbWV0ZXJzLmxpc3RLZXk/Pz4KLSAgICAgICAgICAgIDwjYXNzaWduIGl0ZW1LZXkgPSBzdGFjay5maW5kVmFsdWUocGFyYW1ldGVycy5saXN0S2V5KS8+Ci0gICAgICAgIDwjZWxzZT4KLSAgICAgICAgICAgIDwjYXNzaWduIGl0ZW1LZXkgPSBzdGFjay5maW5kVmFsdWUoJ3RvcCcpLz4KLSAgICAgICAgPC8jaWY+Ci0gICAgICAgIDwjaWYgcGFyYW1ldGVycy5saXN0VmFsdWU/Pz4KLSAgICAgICAgICAgIDwjYXNzaWduIGl0ZW1WYWx1ZSA9IHN0YWNrLmZpbmRTdHJpbmcocGFyYW1ldGVycy5saXN0VmFsdWUpP2RlZmF1bHQoIiIpLz4KLSAgICAgICAgPCNlbHNlPgotICAgICAgICAgICAgPCNhc3NpZ24gaXRlbVZhbHVlID0gc3RhY2suZmluZFN0cmluZygndG9wJykvPgotICAgICAgICA8LyNpZj4KLTwjYXNzaWduIGl0ZW1LZXlTdHI9aXRlbUtleS50b1N0cmluZygpIC8+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IiR7cGFyYW1ldGVycy5uYW1lP2h0bWx9IiB2YWx1ZT0iJHtpdGVtS2V5U3RyP2h0bWx9IiBpZD0iJHtwYXJhbWV0ZXJzLm5hbWU/aHRtbH0tJHtpdGVtQ291bnR9IjwjcnQvPgotICAgICAgICA8I2lmIHRhZy5jb250YWlucyhwYXJhbWV0ZXJzLm5hbWVWYWx1ZSwgaXRlbUtleSk+Ci0gY2hlY2tlZD0iY2hlY2tlZCI8I3J0Lz4KLSAgICAgICAgPC8jaWY+Ci0gICAgICAgIDwjaWYgcGFyYW1ldGVycy5kaXNhYmxlZD9kZWZhdWx0KGZhbHNlKT4KLSBkaXNhYmxlZD0iZGlzYWJsZWQiPCNydC8+Ci0gICAgICAgIDwvI2lmPgotICAgICAgICA8I2lmIHBhcmFtZXRlcnMudGl0bGU/Pz4KLSB0aXRsZT0iJHtwYXJhbWV0ZXJzLnRpdGxlP2h0bWx9IjwjcnQvPgotICAgICAgICA8LyNpZj4KLSAgICAgICAgPCNpbmNsdWRlICIvJHtwYXJhbWV0ZXJzLnRlbXBsYXRlRGlyfS9zaW1wbGUvc2NyaXB0aW5nLWV2ZW50cy5mdGwiIC8+Ci0gICAgICAgIDwjaW5jbHVkZSAiLyR7cGFyYW1ldGVycy50ZW1wbGF0ZURpcn0vc2ltcGxlL2NvbW1vbi1hdHRyaWJ1dGVzLmZ0bCIgLz4KLS8+Ci08bGFiZWwgZm9yPSIke3BhcmFtZXRlcnMubmFtZT9odG1sfS0ke2l0ZW1Db3VudH0iIHN0eWxlPSJjb2xvcjpyZWQ7Zm9udC13ZWlnaHQ6Ym9sZCI+JHtpdGVtVmFsdWU/aHRtbH08L2xhYmVsPiA8YnIgLz4KLSAgICA8L0BzLml0ZXJhdG9yPgotPCNlbHNlPgotICAmbmJzcDsKLTwvI2lmPgotPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Il9fbXVsdGlzZWxlY3RfJHtwYXJhbWV0ZXJzLmlkP2h0bWx9IiBuYW1lPSJfX211bHRpc2VsZWN0XyR7cGFyYW1ldGVycy5uYW1lP2h0bWx9IiB2YWx1ZT0iIjwjcnQvPgotPCNpZiBwYXJhbWV0ZXJzLmRpc2FibGVkP2RlZmF1bHQoZmFsc2UpPgotIGRpc2FibGVkPSJkaXNhYmxlZCI8I3J0Lz4KLTwvI2lmPgotIC8+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWVfc2ltcGxlL3RoZW1lLnByb3BlcnRpZXMgYi9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3Jlc291cmNlcy90ZW1wbGF0ZS9LVVRoZW1lX3NpbXBsZS90aGVtZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTQyOWQwLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL0tVVGhlbWVfc2ltcGxlL3RoZW1lLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1wYXJlbnQgPSB4aHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmY2Y3NS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+VGhlbWVzIFN0cnV0cyAyPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdGhlbWVzL3NyYy9tYWluL3dlYmFwcC9lZGl0LmpzcCBiL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjFlZjc2Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL2VkaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxzOmhlYWQgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPlN0cnV0cyAyIEZvcm0gVGFncyAtIEVkaXQgUGVyc29uPC90aXRsZT4KLQotPC9oZWFkPgotPGJvZHk+Ci08aDE+VXBkYXRlIEluZm9ybWF0aW9uPC9oMT4KLQotPHA+VXNlIHRoZSBmb3JtIGJlbG93IHRvIGVkaXQgeW91ciBpbmZvcm1hdGlvbi48L3A+Ci0KLTxzOmZvcm0gYWN0aW9uPSJzYXZlIiBtZXRob2Q9InBvc3QiPgotPHM6dGV4dGZpZWxkIGtleT0icGVyc29uQmVhbi5maXJzdE5hbWUiIC8+Ci08czp0ZXh0ZmllbGQga2V5PSJwZXJzb25CZWFuLmxhc3ROYW1lIiAvPgotPHM6c2VsZWN0IGtleT0icGVyc29uQmVhbi5zcG9ydCIgbGlzdD0ic3BvcnRzIiAvPgotPHM6cmFkaW8ga2V5PSJwZXJzb25CZWFuLmdlbmRlciIgbGlzdD0iZ2VuZGVycyIgLz4KLTxzOnNlbGVjdCBrZXk9InBlcnNvbkJlYW4ucmVzaWRlbmN5IiBsaXN0PSJzdGF0ZXMiIGxpc3RLZXk9InN0YXRlQWJiciIgbGlzdFZhbHVlPSJzdGF0ZU5hbWUiIC8+Ci08czpjaGVja2JveCBrZXk9InBlcnNvbkJlYW4ub3ZlcjIxIiAvPgotPHM6Y2hlY2tib3hsaXN0IGtleT0icGVyc29uQmVhbi5jYXJNb2RlbHMiIGxpc3Q9ImNhck1vZGVsc0F2YWlsYWJsZSIgLz4KLTxzOnN1Ym1pdCBrZXk9InN1Ym1pdCIgLz4KLTwvczpmb3JtPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODIwOWQ4Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5TdHJ1dHMgMiBGb3JtIFRhZ3MgLSBXZWxjb21lPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgxPldlbGNvbWUgVG8gU3RydXRzIDIhPC9oMT4KLQotPHA+PGEgaHJlZj0nPHM6dXJsIGFjdGlvbj0iZWRpdCIgLz4nID5FZGl0IHlvdXIgaW5mb3JtYXRpb248L2E+PC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwIGIvc3RydXRzMmV4YW1wbGVzL3RoZW1lcy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzI2OGVmLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy90aGVtZXMvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlVwZGF0ZSBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08aDE+VXBkYXRlZCBJbmZvcm1hdGlvbjwvaDE+Ci0KLQotPHA+WW91ciBpbmZvcm1hdGlvbjogPHM6cHJvcGVydHkgdmFsdWU9InBlcnNvbkJlYW4iIC8+IDwvcD4KLQotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naW5kZXgnIC8+IiA+UmV0dXJuIHRvIGhvbWUgcGFnZTwvYT4uPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9SRUFETUUudHh0IGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2E5OTg5Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3RpbmcvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVRoaXMgaXMgdGhlIGV4YW1wbGUgcHJvamVjdCByZWZlcnJlZCB0byBpbiB0aGUKLVN0cnV0cyAyIGRvY3VtZW50YXRpb24sIFVuaXQgVGVzdGluZyB0dXRvcmlhbC4KLVNlZTogIGh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy4KLQotVG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uJ3Mgd2FyIGZpbGUgcnVuIG12biBjbGVhbiBwYWNrYWdlCi1mcm9tIHRoZSBwcm9qZWN0J3Mgcm9vdCBmb2xkZXIuCi0KLUFzIHBhcnQgb2YgcGFja2FnaW5nIHRoZSB3YXIgZmlsZSwgTWF2ZW4gd2lsbCBydW4gdGhlIHVuaXQgdGVzdC4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VuaXRfdGVzdGluZy9pbmRleC5hY3Rpb24uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBXZWxjb21lIHRvIFN0cnV0cyAyIQotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3BvbS54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNGQwZWUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdAotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiCi0JeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxwYXJlbnQ+Ci0JCTxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5zdHJ1dHMyZXhhbXBsZXM8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+dW5pdF90ZXN0aW5nPC9hcnRpZmFjdElkPgotCi0JPG5hbWU+VW5pdCBUZXN0aW5nPC9uYW1lPgotCi0JPGJ1aWxkPgotCQk8ZmluYWxOYW1lPnVuaXRfdGVzdGluZzwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCi0JPGRlcGVuZGVuY2llcz4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnN0cnV0czwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnN0cnV0czItanVuaXQtcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+JHtzdHJ1dHMyLnZlcnNpb259PC92ZXJzaW9uPgotCQkJPHR5cGU+amFyPC90eXBlPgotCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgotCQk8L2RlcGVuZGVuY3k+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+Mi40PC92ZXJzaW9uPgotCQkJPHR5cGU+amFyPC90eXBlPgotCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgotCQk8L2RlcGVuZGVuY3k+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPmpzcC1hcGk8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4yLjA8L3ZlcnNpb24+Ci0JCQk8dHlwZT5qYXI8L3R5cGU+Ci0JCQk8c2NvcGU+dGVzdDwvc2NvcGU+Ci0JCTwvZGVwZW5kZW5jeT4KLQk8L2RlcGVuZGVuY2llcz4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YSBiL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E3ZjY2Mi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLm1vZGVsLlBlcnNvbjsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIGNvbnRyb2xsZXIgdG8gaGFuZGxlIGFjdGlvbnMKLSAqIHJlbGF0ZWQgdG8gcmVnaXN0ZXJpbmcgYSB1c2VyLgotICogQGF1dGhvciBicnVjZSBwaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIFJlZ2lzdGVyIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JCi0JcHJpdmF0ZSBQZXJzb24gcGVyc29uQmVhbjsKLQotCQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJLy9jYWxsIFNlcnZpY2UgY2xhc3MgdG8gc3RvcmUgcGVyc29uQmVhbidzIHN0YXRlIGluIGRhdGFiYXNlCi0JCQotCQlyZXR1cm4gU1VDQ0VTUzsKLQkJCi0JfQotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlKCl7Ci0JCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0Rmlyc3ROYW1lKCkgPT0gbnVsbCB8fCBwZXJzb25CZWFuLmdldEZpcnN0TmFtZSgpLmxlbmd0aCgpID09IDAgKXsJCi0KLQkJCWFkZEZpZWxkRXJyb3IoICJwZXJzb25CZWFuLmZpcnN0TmFtZSIsICJGaXJzdCBuYW1lIGlzIHJlcXVpcmVkLiIgKTsKLQkJCQotCQl9Ci0JCQotCQkJCQotCQlpZiAoIHBlcnNvbkJlYW4uZ2V0RW1haWwoKSA9PSBudWxsIHx8IHBlcnNvbkJlYW4uZ2V0RW1haWwoKS5sZW5ndGgoKSA9PSAwICl7CQotCi0JCQlhZGRGaWVsZEVycm9yKCAicGVyc29uQmVhbi5lbWFpbCIsICJFbWFpbCBpcyByZXF1aXJlZC4iICk7Ci0JCQkKLQkJfQotCQkKLQkJaWYgKCBwZXJzb25CZWFuLmdldEFnZSgpIDwgMTggKXsJCi0KLQkJCWFkZEZpZWxkRXJyb3IoICJwZXJzb25CZWFuLmFnZSIsICJBZ2UgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgMTggb3Igb2xkZXIiICk7Ci0JCQkKLQkJfQotCQkKLQkJCi0JfQotCi0JCi0JcHVibGljIFBlcnNvbiBnZXRQZXJzb25CZWFuKCkgewotCQkKLQkJcmV0dXJuIHBlcnNvbkJlYW47Ci0JCQotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQZXJzb25CZWFuKFBlcnNvbiBwZXJzb24pIHsKLQkJCi0JCXBlcnNvbkJlYW4gPSBwZXJzb247Ci0JCQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3JlZ2lzdGVyL21vZGVsL1BlcnNvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDIwYmJiLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIubW9kZWw7Ci0KLQotLyoqCi0gKiBNb2RlbHMgYSBQZXJzb24gd2hvIHJlZ2lzdGVycy4KLSAqIEBhdXRob3IgYnJ1Y2UgcGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJzb24KLXsKLSAgICBwcml2YXRlIFN0cmluZyBmaXJzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZW1haWw7Ci0gICAgcHJpdmF0ZSBpbnQgYWdlOwotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpcnN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXJzdE5hbWUoU3RyaW5nIGZpcnN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhc3ROYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEVtYWlsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbWFpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbWFpbChTdHJpbmcgZW1haWwpCi0gICAgewotICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRBZ2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBZ2UoIGludCBhZ2UpCi0gICAgewotICAgICAgICB0aGlzLmFnZSA9IGFnZTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJGaXJzdCBOYW1lOiAiICsgZ2V0Rmlyc3ROYW1lKCkgKyAiIExhc3QgTmFtZTogICIgKyBnZXRMYXN0TmFtZSgpICsgCi0gICAgICAgICIgRW1haWw6ICAgICAgIiArIGdldEVtYWlsKCkgKyAiIEFnZTogICAgICAiICsgZ2V0QWdlKCkgOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IS0tCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08IS0tIEF1dGhvcnM6IENocmlzIFRheWxvciwgQ2VraSBHdWxjdS4gLS0+Ci0KLTwhLS0gVmVyc2lvbjogMS4yIC0tPgotCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyCi1lbGVtZW50cyxhcHBlbmRlciBlbGVtZW50cywgY2F0ZWdvcmllcyBhbmQgYW4gb3B0aW9uYWwgcm9vdAotZWxlbWVudC4gLS0+Ci0KLTwhRUxFTUVOVCBsb2c0ajpjb25maWd1cmF0aW9uIChyZW5kZXJlciosIGFwcGVuZGVyKixwbHVnaW4qLCAoY2F0ZWdvcnl8bG9nZ2VyKSoscm9vdD8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5RmFjdG9yeXxsb2dnZXJGYWN0b3J5KT8pPgotCi08IS0tIFRoZSAidGhyZXNob2xkIiBhdHRyaWJ1dGUgdGFrZXMgYSBsZXZlbCB2YWx1ZSBiZWxvdyB3aGljaCAtLT4KLTwhLS0gYWxsIGxvZ2dpbmcgc3RhdGVtZW50cyBhcmUgZGlzYWJsZWQuIC0tPgotCi08IS0tIFNldHRpbmcgdGhlICJkZWJ1ZyIgZW5hYmxlIHRoZSBwcmludGluZyBvZiBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nICAgLS0+Ci08IS0tIHN0YXRlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhLS0gQnkgZGVmYXVsdCwgZGVidWcgYXR0cmlidXRlIGlzICJudWxsIiwgbWVhbmluZyB0aGF0IHdlIG5vdCBkbyB0b3VjaCAtLT4KLTwhLS0gaW50ZXJuYWwgbG9nNGogbG9nZ2luZyBzZXR0aW5ncy4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCAtLT4KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+Ci08IS0tIGNhbm5vdCBiZSBzZXQgdG8gbnVsbC4gVGhlICJudWxsIiB2YWx1ZSBmb3IgdGhlIHRocmVzaG9sZCBhdHRyaWJ1dGUgLS0+Ci08IS0tIHNpbXBseSBtZWFucyBkb24ndCB0b3VjaCB0aGUgdGhyZXNob2xkIGZpZWxkLCB0aGUgdGhyZXNob2xkIGZpZWxkICAgLS0+IAotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAKLTwhQVRUTElTVCBsb2c0ajpjb25maWd1cmF0aW9uCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdGhyZXNob2xkICAgICAgICAgICAgICAgIChhbGx8dHJhY2V8ZGVidWd8aW5mb3x3YXJufGVycm9yfGZhdGFsfG9mZnxudWxsKSAibnVsbCIKLSAgZGVidWcgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlfG51bGwpICAibnVsbCIKLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiCi0+Ci0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4KLTwhLS0gbWVzc2FnZSBvYmplY3RzIHRvIFN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPgotPCFBVFRMSVNUIHJlbmRlcmVyCi0gIHJlbmRlcmVkQ2xhc3MgIENEQVRBICNSRVFVSVJFRAotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+Ci08IS0tIEFwcGVuZGVycyBtYXkgY29udGFpbiBhbiBlcnJvciBoYW5kbGVyLCBhIGxheW91dCwgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhLS0gYW5kIGZpbHRlcnMuIFRoZXkgbWF5IGFsc28gcmVmZXJlbmNlIChvciBpbmNsdWRlKSBvdGhlciBhcHBlbmRlcnMuIC0tPgotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosCi0gICAgICByb2xsaW5nUG9saWN5PywgdHJpZ2dlcmluZ1BvbGljeT8sIGNvbm5lY3Rpb25Tb3VyY2U/LAotICAgICAgbGF5b3V0PywgZmlsdGVyKiwgYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgYXBwZW5kZXIKLSAgbmFtZSAJCUNEQVRBIAkjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbGF5b3V0IChwYXJhbSopPgotPCFBVFRMSVNUIGxheW91dAotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBmaWx0ZXIgKHBhcmFtKik+Ci08IUFUVExJU1QgZmlsdGVyCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+Ci08IS0tIHBhcmFtZXRlcnMuIC0tPgotCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gCi08IUFUVExJU1QgZXJyb3JIYW5kbGVyCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgICAjUkVRVUlSRUQgCi0+Ci0KLTwhRUxFTUVOVCByb290LXJlZiBFTVBUWT4KLQotPCFFTEVNRU5UIGxvZ2dlci1yZWYgRU1QVFk+Ci08IUFUVExJU1QgbG9nZ2VyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4KLTwhQVRUTElTVCBwYXJhbQotICBuYW1lCQlDREFUQSAgICNSRVFVSVJFRAotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBUaGUgcHJpb3JpdHkgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIHByaW9yaXR5IChwYXJhbSopPgotPCFBVFRMSVNUIHByaW9yaXR5Ci0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotPCEtLSBUaGUgbGV2ZWwgY2xhc3MgaXMgb3JnLmFwYWNoZS5sb2c0ai5MZXZlbCBieSBkZWZhdWx0IC0tPgotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPgotPCFBVFRMSVNUIGxldmVsCi0gIGNsYXNzICAgQ0RBVEEJI0lNUExJRUQKLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgY2F0ZWdvcnkuIC0tPgotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgY2F0ZWdvcnkKLSAgY2xhc3MgICAgICAgICBDREFUQSAgICNJTVBMSUVECi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi08IS0tIElmIG5vIGxldmVsIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBsZXZlbCBvZiB0aGUgbmFtZWQgbG9nZ2VyLiAtLT4KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4KLTwhQVRUTElTVCBsb2dnZXIKLSAgbmFtZQkJQ0RBVEEJI1JFUVVJUkVECi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgCi0+Ci0KLQotPCFFTEVNRU5UIGNhdGVnb3J5RmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBjYXRlZ29yeUZhY3RvcnkgCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgbG9nZ2VyRmFjdG9yeSAocGFyYW0qKT4KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5Ci0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPgotCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGFwcGVuZGVyLXJlZgotICByZWYgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gcGx1Z2lucyBtdXN0IGhhdmUgYSBuYW1lIGFuZCBjbGFzcyBhbmQgY2FuIGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycyAtLT4KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPgotPCFBVFRMSVNUIHBsdWdpbgotICBuYW1lIAkJQ0RBVEEgCSAgICNSRVFVSVJFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+Ci08IUFUVExJU1QgY29ubmVjdGlvblNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZGF0YVNvdXJjZSAocGFyYW0qKT4KLTwhQVRUTElTVCBkYXRhU291cmNlCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVECi0+Ci0KLTwhRUxFTUVOVCB0cmlnZ2VyaW5nUG9saWN5ICgocGFyYW18ZmlsdGVyKSopPgotPCFBVFRMSVNUIHRyaWdnZXJpbmdQb2xpY3kKLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRAotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcm9sbGluZ1BvbGljeSAocGFyYW0qKT4KLTwhQVRUTElTVCByb2xsaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotCi08IS0tIElmIG5vIHByaW9yaXR5IGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBjb25maWd1cmF0b3IgTVVTVCBub3QgLS0+Ci08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4KLTwhLS0gVGhlIHJvb3QgY2F0ZWdvcnkgYWx3YXlzIGV4aXN0cyBhbmQgY2Fubm90IGJlIHN1YmNsYXNzZWQuIC0tPgotPCFFTEVNRU5UIHJvb3QgKHBhcmFtKiwgKHByaW9yaXR5fGxldmVsKT8sIGFwcGVuZGVyLXJlZiopPgotCi0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhRUxFTUVOVCBsb2c0ajpldmVudFNldCAobG9nNGo6ZXZlbnQqKT4KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldAotICB4bWxuczpsb2c0aiAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiAKLSAgdmVyc2lvbiAgICAgICAgICAgICAgICAoMS4xfDEuMikgIjEuMiIgCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIgotPgotCi0KLQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50IChsb2c0ajptZXNzYWdlLCBsb2c0ajpOREM/LCBsb2c0ajp0aHJvd2FibGU/LCAKLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4KLQotPCEtLSBUaGUgdGltZXN0YW1wIGZvcm1hdCBpcyBhcHBsaWNhdGlvbiBkZXBlbmRlbnQuIC0tPgotPCFBVFRMSVNUIGxvZzRqOmV2ZW50Ci0gICAgbG9nZ2VyICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICBsZXZlbCAgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZXN0YW1wICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aW1lICAgICAgIENEQVRBICNJTVBMSUVECi0+Ci0KLTwhRUxFTUVOVCBsb2c0ajptZXNzYWdlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgbG9nNGo6dGhyb3dhYmxlICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOmxvY2F0aW9uSW5mbyBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpsb2NhdGlvbkluZm8KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRAotICBtZXRob2QgQ0RBVEEJI1JFUVVJUkVECi0gIGZpbGUgICBDREFUQQkjUkVRVUlSRUQKLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPgotCi08IUVMRU1FTlQgbG9nNGo6ZGF0YSBFTVBUWT4KLTwhQVRUTElTVCBsb2c0ajpkYXRhCi0gIG5hbWUgICBDREFUQQkjUkVRVUlSRUQKLSAgdmFsdWUgIENEQVRBCSNSRVFVSVJFRAotPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sIGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCFET0NUWVBFIGxvZzRqOmNvbmZpZ3VyYXRpb24gUFVCTElDICItLy9sb2c0ai9sb2c0aiBDb25maWd1cmF0aW9uLy9FTiIgImxvZzRqLmR0ZCI+Ci0KLTxsb2c0ajpjb25maWd1cmF0aW9uIHhtbG5zOmxvZzRqPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyI+Ci0gICAgCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICA8bGF5b3V0IGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQiPiAKLSAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udmVyc2lvblBhdHRlcm4iIHZhbHVlPSIlZCAlLTVwICVjLiVNOiVMIC0gJW0lbiIvPiAKLSAgICAgICA8L2xheW91dD4gCi0gICAgPC9hcHBlbmRlcj4KLSAKLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJjb20ub3BlbnN5bXBob255Ij4KLSAgICAJPGxldmVsIHZhbHVlPSJERUJVRyIgLz4KLSAgICA8L2xvZ2dlcj4KLQotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5zdHJ1dHMyIj4KLSAgICAJIDxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0gIAotICAgPCEtLSBmb3IgYWxsIG90aGVyIGxvZ2dlcnMgbG9nIG9ubHkgZGVidWcgYW5kIGFib3ZlIGxvZyBtZXNzYWdlcyAtLT4KLSAgICAgPHJvb3Q+Ci0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iSU5GTyIvPiAKLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlNURE9VVCIgLz4gCi0gICAgIDwvcm9vdD4gCi0gICAgCi08L2xvZzRqOmNvbmZpZ3VyYXRpb24+IAotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sIGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjYzU2My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBzdHJ1dHMgUFVCTElDCi0gICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi4wLy9FTiIKLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPgotCi08c3RydXRzPgotCi0JPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4KLQotCTxwYWNrYWdlIG5hbWU9ImJhc2ljc3RydXRzMiIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPgotCi0gICAgICAgIDwhLS0gSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIHdpbGwgYXNzdW1lIHN1Y2Nlc3MgYW5kIAotICAgICAgICByZW5kZXIgdGhlIHJlc3VsdCBpbmRleC5qc3AgLS0+Ci0gICAgICAgIDwhLS0gSWYgbm8gbmFtZSB2YWx1ZSBmb3IgdGhlIHJlc3VsdCBub2RlIGlzIHNwZWNpZmllZCB0aGUgc3VjY2VzcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCAtLT4KLQkJPGFjdGlvbiBuYW1lPSJpbmRleCI+Ci0JCQk8cmVzdWx0Pi9pbmRleC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQkJCi0JICA8YWN0aW9uIG5hbWU9InJlZ2lzdGVyIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMucmVnaXN0ZXIuYWN0aW9uLlJlZ2lzdGVyIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPi90aGFua3lvdS5qc3A8L3Jlc3VsdD4KLQkJPHJlc3VsdCBuYW1lPSJpbnB1dCI+L3JlZ2lzdGVyLmpzcDwvcmVzdWx0PgotCSAgPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUNsYXNzLVBhdGg6IA0KLQ0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0ZTk5My4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLTxkaXNwbGF5LW5hbWU+U3RydXRzIDIgVW5pdCBUZXN0aW5nPC9kaXNwbGF5LW5hbWU+Ci0gIDx3ZWxjb21lLWZpbGUtbGlzdD4KLSAgICA8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotICA8L3dlbGNvbWUtZmlsZS1saXN0PgotICAKLSAgCQkJCQkgCi0gICAgPGZpbHRlcj4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUuc3RydXRzMi5kaXNwYXRjaGVyLm5nLmZpbHRlci5TdHJ1dHNQcmVwYXJlQW5kRXhlY3V0ZUZpbHRlcjwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPgotCi0gICAgIDxmaWx0ZXItbWFwcGluZz4KLSAgICAgICAgPGZpbHRlci1uYW1lPnN0cnV0czI8L2ZpbHRlci1uYW1lPgotICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCi08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZDNmYzUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkJhc2ljIFN0cnV0cyAyIEFwcGxpY2F0aW9uIC0gV2VsY29tZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XZWxjb21lIFRvIFN0cnV0cyAyITwvaDE+Ci0KLQotCi08cD48YSBocmVmPSJyZWdpc3Rlci5qc3AiPlBsZWFzZSByZWdpc3RlcjwvYT4gZm9yIG91ciBwcml6ZSBkcmF3aW5nLjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AgYi9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy9tYWluL3dlYmFwcC9yZWdpc3Rlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YWNiMTUuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvcmVnaXN0ZXIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+UmVnaXN0ZXI8L3RpdGxlPgotPHM6aGVhZCAvPgotPC9oZWFkPgotPGJvZHk+Ci08aDM+UmVnaXN0ZXIgZm9yIGEgcHJpemUgYnkgY29tcGxldGluZyB0aGlzIGZvcm0uPC9oMz4KLQotPHM6Zm9ybSBhY3Rpb249InJlZ2lzdGVyIj4KLQotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmZpcnN0TmFtZSIgbGFiZWw9IkZpcnN0IG5hbWUiIC8+Ci0gCSAgPHM6dGV4dGZpZWxkICBuYW1lPSJwZXJzb25CZWFuLmxhc3ROYW1lIiBsYWJlbD0iTGFzdCBuYW1lIiAvPgotIAkgIDxzOnRleHRmaWVsZCBuYW1lPSJwZXJzb25CZWFuLmVtYWlsIiAgbGFiZWwgPSJFbWFpbCIvPiAgCi0gCSAgPHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbkJlYW4uYWdlIiAgbGFiZWw9IkFnZSIgIC8+Ci0gCSAgCi0gICAJICA8czpzdWJtaXQvPgotICAgCSAgCi08L3M6Zm9ybT4JCi0gCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwIGIvc3RydXRzMmV4YW1wbGVzL3VuaXRfdGVzdGluZy9zcmMvbWFpbi93ZWJhcHAvdGhhbmt5b3UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg0NWJjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL21haW4vd2ViYXBwL3RoYW5reW91LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPlJlZ2lzdHJhdGlvbiBTdWNjZXNzZnVsPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgzPlRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgZm9yIGEgcHJpemUuPC9oMz4KLQotPHA+WW91ciByZWdpc3RyYXRpb24gaW5mb3JtYXRpb246IDxzOnByb3BlcnR5IHZhbHVlPSJwZXJzb25CZWFuIiAvPiA8L3A+Ci0KLTxwPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2luZGV4JyAvPiIgPlJldHVybiB0byBob21lIHBhZ2U8L2E+LjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXJUZXN0LmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdW5pdF90ZXN0aW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvcmVnaXN0ZXIvYWN0aW9uL1JlZ2lzdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU5OGE1Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91bml0X3Rlc3Rpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3N0cnV0cy9yZWdpc3Rlci9hY3Rpb24vUmVnaXN0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnJlZ2lzdGVyLmFjdGlvbjsKLQotCi0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuU3RydXRzVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25Qcm94eTsKLWltcG9ydCBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0OwotCi1wdWJsaWMgY2xhc3MgUmVnaXN0ZXJUZXN0IGV4dGVuZHMgU3RydXRzVGVzdENhc2UgewotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0RXhlY3V0ZVZhbGlkYXRpb25QYXNzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmZpcnN0TmFtZSIsICJCcnVjZSIpOwotCQkKLQkJcmVxdWVzdC5zZXRQYXJhbWV0ZXIoInBlcnNvbkJlYW4ubGFzdE5hbWUiLCAiUGhpbGxpcHMiKTsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmVtYWlsIiwgImJwaGlsbGlwc0BrdS5lZHUiKTsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmFnZSIsICIxOSIpOwotCQkJCi0JCUFjdGlvblByb3h5IGFjdGlvblByb3h5ID0gZ2V0QWN0aW9uUHJveHkoIi9yZWdpc3Rlci5hY3Rpb24iKSA7Ci0JCQotCQlSZWdpc3RlciBhY3Rpb24gPSAoUmVnaXN0ZXIpIGFjdGlvblByb3h5LmdldEFjdGlvbigpOwotCQkKLQkJYXNzZXJ0Tm90TnVsbCgiVGhlIGFjdGlvbiBpcyBudWxsIGJ1dCBzaG91bGQgbm90IGJlLiIsIGFjdGlvbik7Ci0KLQkJU3RyaW5nIHJlc3VsdCA9IGFjdGlvblByb3h5LmV4ZWN1dGUoKTsKLQkJCi0JCWFzc2VydEVxdWFscygiVGhlIGV4ZWN1dGUgbWV0aG9kIGRpZCBub3QgcmV0dXJuICIgKyBBY3Rpb25TdXBwb3J0LlNVQ0NFU1MgKyAiIGJ1dCBzaG91bGQgaGF2ZS4iLCBBY3Rpb25TdXBwb3J0LlNVQ0NFU1MsIHJlc3VsdCk7Ci0KLQl9Ci0JCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0RXhlY3V0ZVZhbGlkYXRpb25GYWlsc01pc3NpbmdGaXJzdE5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmZpcnN0TmFtZSIsICJCcnVjZSIpOwotCQkKLQkJcmVxdWVzdC5zZXRQYXJhbWV0ZXIoInBlcnNvbkJlYW4ubGFzdE5hbWUiLCAiUGhpbGxpcHMiKTsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmVtYWlsIiwgImJwaGlsbGlwc0BrdS5lZHUiKTsKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmFnZSIsICIxNyIpOwotCQkJCi0JCUFjdGlvblByb3h5IGFjdGlvblByb3h5ID0gZ2V0QWN0aW9uUHJveHkoIi9yZWdpc3Rlci5hY3Rpb24iKSA7Ci0JCQotCQlSZWdpc3RlciBhY3Rpb24gPSAoUmVnaXN0ZXIpIGFjdGlvblByb3h5LmdldEFjdGlvbigpOwotCQkKLQkJYXNzZXJ0Tm90TnVsbCgiVGhlIGFjdGlvbiBpcyBudWxsIGJ1dCBzaG91bGQgbm90IGJlLiIsIGFjdGlvbik7Ci0KLQkJU3RyaW5nIHJlc3VsdCA9IGFjdGlvblByb3h5LmV4ZWN1dGUoKTsKLQkJCi0JCWFzc2VydEVxdWFscygiVGhlIGV4ZWN1dGUgbWV0aG9kIGRpZCBub3QgcmV0dXJuICIgKyBBY3Rpb25TdXBwb3J0LklOUFVUICsgIiBidXQgc2hvdWxkIGhhdmUuIiwgQWN0aW9uU3VwcG9ydC5JTlBVVCwgcmVzdWx0KTsKLQotCX0KLQkKLQkKLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RFeGVjdXRlVmFsaWRhdGlvbkZhaWxzQWdlVG9Zb3VuZygpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJCi0JCXJlcXVlc3Quc2V0UGFyYW1ldGVyKCJwZXJzb25CZWFuLmxhc3ROYW1lIiwgIlBoaWxsaXBzIik7Ci0JCQotCQlyZXF1ZXN0LnNldFBhcmFtZXRlcigicGVyc29uQmVhbi5lbWFpbCIsICJicGhpbGxpcHNAa3UuZWR1Iik7Ci0JCQotCQlyZXF1ZXN0LnNldFBhcmFtZXRlcigicGVyc29uQmVhbi5hZ2UiLCAiMTkiKTsKLQkJCQotCQlBY3Rpb25Qcm94eSBhY3Rpb25Qcm94eSA9IGdldEFjdGlvblByb3h5KCIvcmVnaXN0ZXIuYWN0aW9uIikgOwotCQkKLQkJUmVnaXN0ZXIgYWN0aW9uID0gKFJlZ2lzdGVyKSBhY3Rpb25Qcm94eS5nZXRBY3Rpb24oKTsKLQkJCi0JCWFzc2VydE5vdE51bGwoIlRoZSBhY3Rpb24gaXMgbnVsbCBidXQgc2hvdWxkIG5vdCBiZS4iLCBhY3Rpb24pOwotCi0JCVN0cmluZyByZXN1bHQgPSBhY3Rpb25Qcm94eS5leGVjdXRlKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoIlRoZSBleGVjdXRlIG1ldGhvZCBkaWQgbm90IHJldHVybiAiICsgQWN0aW9uU3VwcG9ydC5JTlBVVCArICIgYnV0IHNob3VsZCBoYXZlLiIsIEFjdGlvblN1cHBvcnQuSU5QVVQsIHJlc3VsdCk7Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjZjMzJjLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBVc2luZyBUYWdzIHR1dG9yaWFsLgotU2VlOiAgaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnLgotCi1UbyBidWlsZCB0aGUgYXBwbGljYXRpb24ncyB3YXIgZmlsZSBydW4gbXZuIGNsZWFuIHBhY2thZ2UKLWZyb20gdGhlIHByb2plY3QncyByb290IGZvbGRlci4KLQotVGhlIHdhciBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlIHRhcmdldCBzdWItZm9sZGVyLgotCi1Db3B5IHRoZSB3YXIgZmlsZSB0byB5b3VyIFNlcnZsZXQgY29udGFpbmVyIChlLmcuIFRvbWNhdCwgR2xhc3NGaXNoKSBhbmQgCi10aGVuIHN0YXJ0dXAgdGhlIFNlcnZsZXQgY29udGFpbmVyLgotCi1JbiBhIHdlYiBicm93c2VyIGdvIHRvOiAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VzaW5nX3RhZ3MvaW5kZXguYWN0aW9uLgotCi1Zb3Ugc2hvdWxkIHNlZSBhIHdlYiBwYWdlIHdpdGggV2VsY29tZSB0byBTdHJ1dHMgMiEKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3MvcG9tLnhtbCBiL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTYxYzQuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3MvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICA8cGFyZW50PgotICAgIDxncm91cElkPnN0cnV0cy5hcGFjaGUub3JnPC9ncm91cElkPgotICAgIDxhcnRpZmFjdElkPnN0cnV0czJleGFtcGxlczwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4xLjAuMDwvdmVyc2lvbj4KLSAgPC9wYXJlbnQ+Ci0gIDxhcnRpZmFjdElkPnVzaW5nX3RhZ3M8L2FydGlmYWN0SWQ+Ci0gIDxuYW1lPnVzaW5nX3RhZ3M8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5TdHJ1dHMgMiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUKLSAgVXNpbmcgU3RydXRzIDIgVGFncyBnZXR0aW5nIHN0YXJ0ZWQgdHV0b3JpYWw8L2Rlc2NyaXB0aW9uPgotCi0gIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gIAotICAJPGJ1aWxkPgotCQk8ZmluYWxOYW1lPnVzaW5nX3RhZ3M8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvdXNpbmdfdGFncy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3VzaW5nX3RhZ3MvaGVsbG93b3JsZC9hY3Rpb24vSGVsbG9Xb3JsZEFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTAxN2Q5Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvdXNpbmdfdGFncy9oZWxsb3dvcmxkL2FjdGlvbi9IZWxsb1dvcmxkQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnVzaW5nX3RhZ3MuaGVsbG93b3JsZC5hY3Rpb247Ci0KLQotCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMudXNpbmdfdGFncy5oZWxsb3dvcmxkLm1vZGVsLk1lc3NhZ2VTdG9yZTsKLQotaW1wb3J0IGNvbS5vcGVuc3ltcGhvbnkueHdvcmsyLkFjdGlvblN1cHBvcnQ7Ci0KLS8qKgotICogQWN0cyBhcyBhIFN0cnV0cyAyIGNvbnRyb2xsZXIgdGhhdCByZXNwb25kcwotICogdG8gYSB1c2VyIGFjdGlvbiBieSBzZXR0aW5nIHRoZSB2YWx1ZQotICogb2YgdGhlIE1lc3NhZ2UgbW9kZWwgY2xhc3MsIGFuZCByZXR1cm5zIGEgU3RyaW5nIAotICogcmVzdWx0LgotICogQGF1dGhvciBCcnVjZSBQaGlsbGlwcwotICoKLSAqLwotcHVibGljIGNsYXNzIEhlbGxvV29ybGRBY3Rpb24gZXh0ZW5kcyBBY3Rpb25TdXBwb3J0IHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCQotCS8qKgotCSAqIFRoZSBtb2RlbCBjbGFzcyB0aGF0IHN0b3JlcyB0aGUgbWVzc2FnZQotCSAqIHRvIGRpc3BsYXkgaW4gdGhlIHZpZXcuCi0JICovCi0JcHJpdmF0ZSBNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlOwotCQotCXByaXZhdGUgc3RhdGljIGludCBoZWxsb0NvdW50ID0gMDsKLQkKLQlwdWJsaWMgaW50IGdldEhlbGxvQ291bnQoKSB7Ci0JCXJldHVybiBoZWxsb0NvdW50OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEhlbGxvQ291bnQoaW50IGhlbGxvQ291bnQpIHsKLQkJSGVsbG9Xb3JsZEFjdGlvbi5oZWxsb0NvdW50ID0gaGVsbG9Db3VudDsKLQl9Ci0KLQkvKgotCSAqIENyZWF0ZXMgdGhlIE1lc3NhZ2VTdG9yZSBtb2RlbCBvYmplY3QsIAotCSAqIGluY3JlYXNlIGhlbGxvQ291bnQgYnkgMSBhbmQgCi0JICogcmV0dXJucyBzdWNjZXNzLiAgVGhlIE1lc3NhZ2VTdG9yZSBtb2RlbAotCSAqIG9iamVjdCB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgdmlldy4KLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0I2V4ZWN1dGUoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLQkJbWVzc2FnZVN0b3JlID0gbmV3IE1lc3NhZ2VTdG9yZSgpIDsKLQkJCi0JCWhlbGxvQ291bnQrKzsKLQkJCi0JCXJldHVybiBTVUNDRVNTOwotCX0KLQotCXB1YmxpYyBNZXNzYWdlU3RvcmUgZ2V0TWVzc2FnZVN0b3JlKCkgewotCQlyZXR1cm4gbWVzc2FnZVN0b3JlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE1lc3NhZ2VTdG9yZShNZXNzYWdlU3RvcmUgbWVzc2FnZVN0b3JlKSB7Ci0JCXRoaXMubWVzc2FnZVN0b3JlID0gbWVzc2FnZVN0b3JlOwotCX0KLQkKLQkKLQotfQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy91c2luZ190YWdzL2hlbGxvd29ybGQvbW9kZWwvTWVzc2FnZVN0b3JlLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3VzaW5nX3RhZ3MvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg3MDUxMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3VzaW5nX3RhZ3MvaGVsbG93b3JsZC9tb2RlbC9NZXNzYWdlU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMudXNpbmdfdGFncy5oZWxsb3dvcmxkLm1vZGVsOwotCi0vKioKLSAqIE1vZGVsIGNsYXNzIHRoYXQgc3RvcmVzIGEgbWVzc2FnZS4KLSAqIEBhdXRob3IgQnJ1Y2UgUGhpbGxpcHMKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlU3RvcmUgewotCQotCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7Ci0JCi0JcHVibGljIE1lc3NhZ2VTdG9yZSgpIHsKLQkJCi0JCXNldE1lc3NhZ2UoIkhlbGxvIFN0cnV0cyBVc2VyIik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlyZXR1cm4gbWVzc2FnZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7Ci0JCXRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQotCQlyZXR1cm4gbWVzc2FnZSArICIgKGZyb20gdG9TdHJpbmcpIjsKLQkJCi0JfQotCi19CmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkIGIvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhYmQ5Ni4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGouZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCEtLSBBdXRob3JzOiBDaHJpcyBUYXlsb3IsIENla2kgR3VsY3UuIC0tPgotCi08IS0tIFZlcnNpb246IDEuMiAtLT4KLQotPCEtLSBBIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBjb25zaXN0cyBvZiBvcHRpb25hbCByZW5kZXJlcgotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QKLWVsZW1lbnQuIC0tPgotCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUZhY3Rvcnl8bG9nZ2VyRmFjdG9yeSk/KT4KLQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+Ci08IS0tIGFsbCBsb2dnaW5nIHN0YXRlbWVudHMgYXJlIGRpc2FibGVkLiAtLT4KLQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPgotPCEtLSBzdGF0ZW1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+Ci08IS0tIGludGVybmFsIGxvZzRqIGxvZ2dpbmcgc2V0dGluZ3MuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgLS0+Ci08IS0tIGF0dHJpYnV0ZSBjYW4gYmUgbWlzbGVhZGluZy4gVGhlIHRocmVzaG9sZCBmaWVsZCBvZiBhIHJlcG9zaXRvcnkJIC0tPgotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPgotPCEtLSBzaW1wbHkgbWVhbnMgZG9uJ3QgdG91Y2ggdGhlIHRocmVzaG9sZCBmaWVsZCwgdGhlIHRocmVzaG9sZCBmaWVsZCAgIC0tPiAKLTwhLS0ga2VlcHMgaXRzIG9sZCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLSAgICAgCi08IUFUVExJU1QgbG9nNGo6Y29uZmlndXJhdGlvbgotICB4bWxuczpsb2c0aiAgICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiCi0gIGRlYnVnICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZXxudWxsKSAgIm51bGwiCi0gIHJlc2V0ICAgICAgICAgICAgICAgICAgICAodHJ1ZXxmYWxzZSkgImZhbHNlIgotPgotCi08IS0tIHJlbmRlcmVyIGVsZW1lbnRzIGFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbiBvZiAgLS0+Ci08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0KLTwhRUxFTUVOVCByZW5kZXJlciBFTVBUWT4KLTwhQVRUTElTVCByZW5kZXJlcgotICByZW5kZXJlZENsYXNzICBDREFUQSAjUkVRVUlSRUQKLSAgcmVuZGVyaW5nQ2xhc3MgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gQXBwZW5kZXJzIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGEgY2xhc3MuIC0tPgotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IS0tIGFuZCBmaWx0ZXJzLiBUaGV5IG1heSBhbHNvIHJlZmVyZW5jZSAob3IgaW5jbHVkZSkgb3RoZXIgYXBwZW5kZXJzLiAtLT4KLTwhRUxFTUVOVCBhcHBlbmRlciAoZXJyb3JIYW5kbGVyPywgcGFyYW0qLAotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywKLSAgICAgIGxheW91dD8sIGZpbHRlciosIGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGFwcGVuZGVyCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVECi0gIGNsYXNzIAlDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxheW91dCAocGFyYW0qKT4KLTwhQVRUTElTVCBsYXlvdXQKLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPgotPCFBVFRMSVNUIGZpbHRlcgotICBjbGFzcwkJQ0RBVEEJI1JFUVVJUkVECi0+Ci0KLTwhLS0gRXJyb3JIYW5kbGVycyBjYW4gYmUgb2YgYW55IGNsYXNzLiBUaGV5IGNhbiBhZG1pdCBhbnkgbnVtYmVyIG9mIC0tPgotPCEtLSBwYXJhbWV0ZXJzLiAtLT4KLQotPCFFTEVNRU5UIGVycm9ySGFuZGxlciAocGFyYW0qLCByb290LXJlZj8sIGxvZ2dlci1yZWYqLCAgYXBwZW5kZXItcmVmPyk+IAotPCFBVFRMSVNUIGVycm9ySGFuZGxlcgotICAgY2xhc3MgICAgICAgIENEQVRBICAgI1JFUVVJUkVEIAotPgotCi08IUVMRU1FTlQgcm9vdC1yZWYgRU1QVFk+Ci0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPgotPCFBVFRMSVNUIGxvZ2dlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+Ci08IUFUVExJU1QgcGFyYW0KLSAgbmFtZQkJQ0RBVEEgICAjUkVRVUlSRUQKLSAgdmFsdWUJCUNEQVRBCSNSRVFVSVJFRAotPgotCi0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBwcmlvcml0eSAocGFyYW0qKT4KLTwhQVRUTElTVCBwcmlvcml0eQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLTwhLS0gVGhlIGxldmVsIGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4KLTwhRUxFTUVOVCBsZXZlbCAocGFyYW0qKT4KLTwhQVRUTElTVCBsZXZlbAotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVECi0gIHZhbHVlCSAgQ0RBVEEgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGNhdGVnb3J5LiAtLT4KLTwhRUxFTUVOVCBjYXRlZ29yeSAocGFyYW0qLChwcmlvcml0eXxsZXZlbCk/LGFwcGVuZGVyLXJlZiopPgotPCFBVFRMSVNUIGNhdGVnb3J5Ci0gIGNsYXNzICAgICAgICAgQ0RBVEEgICAjSU1QTElFRAotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQKLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICAKLT4KLQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgbGV2ZWwgb2YgdGhlIG5hbWVkIGxvZ2dlci4gLS0+Ci08IUVMRU1FTlQgbG9nZ2VyIChsZXZlbD8sYXBwZW5kZXItcmVmKik+Ci08IUFUVExJU1QgbG9nZ2VyCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRAotICBhZGRpdGl2aXR5CSh0cnVlfGZhbHNlKSAidHJ1ZSIgIAotPgotCi0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgY2F0ZWdvcnlGYWN0b3J5IAotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGxvZ2dlckZhY3RvcnkgKHBhcmFtKik+Ci08IUFUVExJU1QgbG9nZ2VyRmFjdG9yeQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4KLQotPCFFTEVNRU5UIGFwcGVuZGVyLXJlZiBFTVBUWT4KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYKLSAgcmVmIENEQVRBICNSRVFVSVJFRAotPgotCi08IS0tIHBsdWdpbnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgY2xhc3MgYW5kIGNhbiBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+Ci08IUVMRU1FTlQgcGx1Z2luIChwYXJhbSosIGNvbm5lY3Rpb25Tb3VyY2U/KT4KLTwhQVRUTElTVCBwbHVnaW4KLSAgbmFtZSAJCUNEQVRBIAkgICAjUkVRVUlSRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGNvbm5lY3Rpb25Tb3VyY2UgKGRhdGFTb3VyY2U/LCBwYXJhbSopPgotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UKLSAgY2xhc3MgICAgICAgIENEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGRhdGFTb3VyY2UgKHBhcmFtKik+Ci08IUFUVExJU1QgZGF0YVNvdXJjZQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRAotPgotCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4KLTwhQVRUTElTVCB0cmlnZ2VyaW5nUG9saWN5Ci0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQKLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+Ci08IUFUVExJU1Qgcm9sbGluZ1BvbGljeQotICBuYW1lIAkJQ0RBVEEgICNJTVBMSUVECi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVECi0+Ci0KLQotPCEtLSBJZiBubyBwcmlvcml0eSBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPgotPCEtLSB0b3VjaCB0aGUgcHJpb3JpdHkgb2Ygcm9vdC4gLS0+Ci08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4KLTwhRUxFTUVOVCByb290IChwYXJhbSosIChwcmlvcml0eXxsZXZlbCk/LCBhcHBlbmRlci1yZWYqKT4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAgICAgICAgICAgICAgICAgICAgICAgQSBsb2dnaW5nIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IUVMRU1FTlQgbG9nNGo6ZXZlbnRTZXQgKGxvZzRqOmV2ZW50Kik+Ci08IUFUVExJU1QgbG9nNGo6ZXZlbnRTZXQKLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgCi0gIHZlcnNpb24gICAgICAgICAgICAgICAgKDEuMXwxLjIpICIxLjIiIAotICBpbmNsdWRlc0xvY2F0aW9uSW5mbyAgICh0cnVlfGZhbHNlKSAidHJ1ZSIKLT4KLQotCi0KLTwhRUxFTUVOVCBsb2c0ajpldmVudCAobG9nNGo6bWVzc2FnZSwgbG9nNGo6TkRDPywgbG9nNGo6dGhyb3dhYmxlPywgCi0gICAgICAgICAgICAgICAgICAgICAgIGxvZzRqOmxvY2F0aW9uSW5mbz8sIGxvZzRqOnByb3BlcnRpZXM/KSA+Ci0KLTwhLS0gVGhlIHRpbWVzdGFtcCBmb3JtYXQgaXMgYXBwbGljYXRpb24gZGVwZW5kZW50LiAtLT4KLTwhQVRUTElTVCBsb2c0ajpldmVudAotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVECi0gICAgbGV2ZWwgICAgICBDREFUQSAjUkVRVUlSRUQKLSAgICB0aHJlYWQgICAgIENEQVRBICNSRVFVSVJFRAotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVECi0gICAgdGltZSAgICAgICBDREFUQSAjSU1QTElFRAotPgotCi08IUVMRU1FTlQgbG9nNGo6bWVzc2FnZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgbG9nNGo6TkRDICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGxvZzRqOnRocm93YWJsZSAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6bG9jYXRpb25JbmZvCi0gIGNsYXNzICBDREFUQQkjUkVRVUlSRUQKLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRAotICBmaWxlICAgQ0RBVEEJI1JFUVVJUkVECi0gIGxpbmUgICBDREFUQQkjUkVRVUlSRUQKLT4KLQotPCFFTEVNRU5UIGxvZzRqOnByb3BlcnRpZXMgKGxvZzRqOmRhdGEqKT4KLQotPCFFTEVNRU5UIGxvZzRqOmRhdGEgRU1QVFk+Ci08IUFUVExJU1QgbG9nNGo6ZGF0YQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVECi0gIHZhbHVlICBDREFUQQkjUkVRVUlSRUQKLT4KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTAwY2IyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBsb2c0ajpjb25maWd1cmF0aW9uIFBVQkxJQyAiLS8vbG9nNGovbG9nNGogQ29uZmlndXJhdGlvbi8vRU4iICJsb2c0ai5kdGQiPgotCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPgotICAgIAotICAgIDxhcHBlbmRlciBuYW1lPSJTVERPVVQiIGNsYXNzPSJvcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgPGxheW91dCBjbGFzcz0ib3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Ij4gCi0gICAgICAgICAgPHBhcmFtIG5hbWU9IkNvbnZlcnNpb25QYXR0ZXJuIiB2YWx1ZT0iJWQgJS01cCAlYy4lTTolTCAtICVtJW4iLz4gCi0gICAgICAgPC9sYXlvdXQ+IAotICAgIDwvYXBwZW5kZXI+Ci0gCi0gICAgPCEtLSBzcGVjaWZ5IHRoZSBsb2dnaW5nIGxldmVsIGZvciBsb2dnZXJzIGZyb20gb3RoZXIgbGlicmFyaWVzIC0tPgotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+Ci0gICAgCTxsZXZlbCB2YWx1ZT0iREVCVUciIC8+Ci0gICAgPC9sb2dnZXI+Ci0KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzMiI+Ci0gICAgCSA8bGV2ZWwgdmFsdWU9IkRFQlVHIiAvPgotICAgIDwvbG9nZ2VyPgotICAKLSAgIDwhLS0gZm9yIGFsbCBvdGhlciBsb2dnZXJzIGxvZyBvbmx5IGRlYnVnIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+Ci0gICAgIDxyb290PgotICAgICAgICA8cHJpb3JpdHkgdmFsdWU9IklORk8iLz4gCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IAotICAgICA8L3Jvb3Q+IAotICAgIAotPC9sb2c0ajpjb25maWd1cmF0aW9uPiAKLQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MjQ1Ny4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgc3RydXRzIFBVQkxJQwotICAgICItLy9BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi8vRFREIFN0cnV0cyBDb25maWd1cmF0aW9uIDIuMC8vRU4iCi0gICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjAuZHRkIj4KLQotPHN0cnV0cz4KLQotCTxjb25zdGFudCBuYW1lPSJzdHJ1dHMuZGV2TW9kZSIgdmFsdWU9InRydWUiIC8+Ci0KLQk8cGFja2FnZSBuYW1lPSJiYXNpY3N0cnV0czIiIGV4dGVuZHM9InN0cnV0cy1kZWZhdWx0Ij4KLQotICAgICAgICA8IS0tIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSBzdWNjZXNzIGFuZCAKLSAgICAgICAgcmVuZGVyIHRoZSByZXN1bHQgaW5kZXguanNwIC0tPgotICAgICAgICA8IS0tIElmIG5vIG5hbWUgdmFsdWUgZm9yIHRoZSByZXN1bHQgbm9kZSBpcyBzcGVjaWZpZWQgdGhlIHN1Y2Nlc3MgdmFsdWUgaXMgdGhlIGRlZmF1bHQgLS0+Ci0JCTxhY3Rpb24gbmFtZT0iaW5kZXgiPgotCQkJPHJlc3VsdD4vaW5kZXguanNwPC9yZXN1bHQ+Ci0JCTwvYWN0aW9uPgotCQkKLQkJPCEtLSBJZiB0aGUgVVJMIGlzIGhlbGxvLmFjdGlvbiB0aGUgY2FsbCB0aGUgZXhlY3V0ZSBtZXRob2Qgb2YgY2xhc3MgSGVsbG9Xb3JsZEFjdGlvbi4KLQkJSWYgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZXhlY3V0ZSBtZXRob2QgaXMgc3VjY2VzcyByZW5kZXIgdGhlIEhlbGxvV29ybGQuanNwIC0tPgotCQk8YWN0aW9uIG5hbWU9ImhlbGxvIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMudXNpbmdfdGFncy5oZWxsb3dvcmxkLmFjdGlvbi5IZWxsb1dvcmxkQWN0aW9uIiBtZXRob2Q9ImV4ZWN1dGUiPgotCQkJPHJlc3VsdCBuYW1lPSJzdWNjZXNzIj4vSGVsbG9Xb3JsZC5qc3A8L3Jlc3VsdD4KLQkJPC9hY3Rpb24+Ci0KLQk8L3BhY2thZ2U+Ci0KLTwvc3RydXRzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcCBiL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL3dlYmFwcC9IZWxsb1dvcmxkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA4ODEwYy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi93ZWJhcHAvSGVsbG9Xb3JsZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SGVsbG8gV29ybGQhPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPjxzOnByb3BlcnR5IHZhbHVlPSJtZXNzYWdlU3RvcmUubWVzc2FnZSIgLz48L2gyPgotPHA+SSd2ZSBzYWlkIGhlbGxvIDxzOnByb3BlcnR5IHZhbHVlPSJoZWxsb0NvdW50IiAvPiB0aW1lcyE8L3A+Ci08cD48czpwcm9wZXJ0eSB2YWx1ZT0ibWVzc2FnZVN0b3JlIiAvPjwvcD4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM4YTgxYi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvdXNpbmdfdGFncy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPlVzaW5nX1RhZ3NfU3RydXRzMjwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3N0cnV0czJleGFtcGxlcy91c2luZ190YWdzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YmNlYTIuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3VzaW5nX3RhZ3Mvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JUAgdGFnbGliIHByZWZpeD0icyIgdXJpPSIvc3RydXRzLXRhZ3MiICU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5CYXNpYyBTdHJ1dHMgMiBBcHBsaWNhdGlvbiAtIFdlbGNvbWU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+V2VsY29tZSBUbyBTdHJ1dHMgMiE8L2gxPgotPHA+PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0naGVsbG8nLz4iPkhlbGxvIFdvcmxkPC9hPjwvcD4KLTxzOnVybCBhY3Rpb249ImhlbGxvIiB2YXI9ImhlbGxvTGluayI+Ci0gIDxzOnBhcmFtIG5hbWU9InVzZXJOYW1lIj5CcnVjZSBQaGlsbGlwczwvczpwYXJhbT4KLTwvczp1cmw+Ci08cD48YSBocmVmPSIke2hlbGxvTGlua30iPkhlbGxvIEJydWNlIFBoaWxsaXBzPC9hPjwvcD4KLQotPHA+R2V0IHlvdXIgb3duIHBlcnNvbmFsIGhlbGxvIGJ5IGZpbGxpbmcgb3V0IGFuZCBzdWJtaXR0aW5nIHRoaXMgZm9ybS48L3A+Ci0KLTxzOmZvcm0gYWN0aW9uPSJoZWxsbyI+Ci0KLQk8czp0ZXh0ZmllbGQgbmFtZT0idXNlck5hbWUiIGxhYmVsPSJZb3VyIG5hbWUiIC8+Ci0JCi0JPHM6c3VibWl0IHZhbHVlPSJTdWJtaXQiIC8+Ci0KLTwvczpmb3JtPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL1JFQURNRS50eHQgYi9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2EzZjQ3Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1UaGlzIGlzIHRoZSBleGFtcGxlIHByb2plY3QgcmVmZXJyZWQgdG8gaW4gdGhlCi1TdHJ1dHMgMiBkb2N1bWVudGF0aW9uLCBXaWxkY2FyZCBNZXRob2QgdHV0b3JpYWwuCi1TZWU6ICBodHRwOi8vc3RydXRzLmFwYWNoZS5vcmcuCi0KLVRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbidzIHdhciBmaWxlIHJ1biBtdm4gY2xlYW4gcGFja2FnZQotZnJvbSB0aGUgcHJvamVjdCdzIHJvb3QgZm9sZGVyLgotCi1UaGUgd2FyIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgdGFyZ2V0IHN1Yi1mb2xkZXIuCi0KLUNvcHkgdGhlIHdhciBmaWxlIHRvIHlvdXIgU2VydmxldCBjb250YWluZXIgKGUuZy4gVG9tY2F0LCBHbGFzc0Zpc2gpIGFuZCAKLXRoZW4gc3RhcnR1cCB0aGUgU2VydmxldCBjb250YWluZXIuCi0KLUluIGEgd2ViIGJyb3dzZXIgZ28gdG86ICBodHRwOi8vbG9jYWxob3N0OjgwODAvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9QZXJzb24uYWN0aW9uCi0KLVlvdSBzaG91bGQgc2VlIGEgd2ViIHBhZ2Ugd2l0aCBQZW9wbGUgbGlzdGVkLgotCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9wb20ueG1sIGIvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhjMDg4MS4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxwYXJlbnQ+Ci0gICAgPGdyb3VwSWQ+c3RydXRzLmFwYWNoZS5vcmc8L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+c3RydXRzMmV4YW1wbGVzPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjEuMC4wPC92ZXJzaW9uPgotICA8L3BhcmVudD4KLQotICA8YXJ0aWZhY3RJZD53aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uPC9hcnRpZmFjdElkPgotCi0gIDxuYW1lPndpbGRjYXJkIG1ldGhvZCBzZWxlY3Rpb248L25hbWU+Ci0gCi0gICA8ZGVzY3JpcHRpb24+V2lsZGNhcmQgbWV0aG9kIHNlbGVjdGlvbiBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUgCi0gIFN0cnV0cyAyIGdldHRpbmcgc3RhcnRlZCB0dXRvcmlhbHM8L2Rlc2NyaXB0aW9uPgotICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAgICAgPGJ1aWxkPgotCQk8ZmluYWxOYW1lPndpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb248L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotIAotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy90dXRvcmlhbHMvd2lsZGNhcmRtZXRob2QvYWN0aW9uL1BlcnNvbkFjdGlvbi5qYXZhIGIvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy90dXRvcmlhbHMvd2lsZGNhcmRtZXRob2QvYWN0aW9uL1BlcnNvbkFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWNkZmRhLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvdHV0b3JpYWxzL3dpbGRjYXJkbWV0aG9kL2FjdGlvbi9QZXJzb25BY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi1wYWNrYWdlIG9yZy5hcGFjaGUuc3RydXRzLnR1dG9yaWFscy53aWxkY2FyZG1ldGhvZC5hY3Rpb247DQotDQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsNCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMudHV0b3JpYWxzLndpbGRjYXJkbWV0aG9kLm1vZGVsLlBlcnNvbjsNCi1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMudHV0b3JpYWxzLndpbGRjYXJkbWV0aG9kLnNlcnZpY2UuUGVyc29uU2VydmljZTsNCi0NCi0NCi0NCi0NCi0NCi1pbXBvcnQgY29tLm9wZW5zeW1waG9ueS54d29yazIuQWN0aW9uU3VwcG9ydDsNCi0NCi0NCi0NCi1wdWJsaWMgY2xhc3MgUGVyc29uQWN0aW9uIGV4dGVuZHMgQWN0aW9uU3VwcG9ydCB7DQotCQ0KLQkvL0NyZWF0ZSBhIExvZ2dlciBvYmplY3QNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoIFBlcnNvbkFjdGlvbi5jbGFzcy5nZXROYW1lKCkgKTsNCi0NCi0JDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOw0KLQ0KLQlQZXJzb24gcGVyc29uIDsNCi0JDQotCWludCBpZCA7DQotCQ0KLQlMaXN0PFBlcnNvbj4gcGVyc29uTGlzdCA9IFBlcnNvblNlcnZpY2UuZ2V0UGVyc29ucygpOw0KLQkNCi0JUGVyc29uU2VydmljZSBwZXJzb25TZXJ2aWNlID0gbmV3IFBlcnNvblNlcnZpY2UoKTsNCi0JDQotCXB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHRocm93cyBFeGNlcHRpb24gew0KLQkNCi0JCWxvZ2dlci5kZWJ1ZygiSW4gZXhlY3V0ZSBtZXRob2QiKTsNCi0JCXJldHVybiBTVUNDRVNTOw0KLQl9DQotCQ0KLQkNCi0JcHVibGljIFN0cmluZyBjcmVhdGUoKSB7DQotCQkNCi0JCWxvZ2dlci5kZWJ1ZygiSW4gY3JlYXRlIG1ldGhvZCIpOw0KLQkJcGVyc29uID0gbmV3IFBlcnNvbigpOw0KLQkJDQotCQlyZXR1cm4gSU5QVVQ7DQotCQkNCi0JCQ0KLQl9DQotCQ0KLQkNCi0JcHVibGljIFN0cmluZyBlZGl0KCkgew0KLQkJDQotCQkgICAgbG9nZ2VyLmRlYnVnKCJJbiBlZGl0IG1ldGhvZCIpOw0KLQkJICAgIHBlcnNvbiA9IHBlcnNvblNlcnZpY2UuZ2V0UGVyc29uKGlkKTsNCi0JCQ0KLQkJCXJldHVybiBJTlBVVDsNCi0NCi0JCQ0KLQl9DQotCQ0KLQkNCi0JcHVibGljIFN0cmluZyBzYXZlT3JVcGRhdGUoKSB7DQotCQkNCi0NCi0JCWxvZ2dlci5kZWJ1ZygiSW4gc2F2ZU9yVXBkYXRlIG1ldGhvZCIpOw0KLQkJaWYgKCBwZXJzb24uZ2V0SWQoKSAgPiAtMSApIHsNCi0JCQkNCi0JCQlwZXJzb25TZXJ2aWNlLnVwZGF0ZShwZXJzb24pIDsNCi0JCQkNCi0JCQkNCi0JCX0gZWxzZSB7DQotCQkJDQotCQkJcGVyc29uU2VydmljZS5zYXZlKHBlcnNvbik7DQotCQl9DQotCQkNCi0JCQ0KLQkJcGVyc29uTGlzdCA9IFBlcnNvblNlcnZpY2UuZ2V0UGVyc29ucygpIDsNCi0JCQ0KLQkJcmV0dXJuIFNVQ0NFU1M7DQotDQotCQ0KLQl9DQotCQ0KLQkNCi0JcHVibGljIFN0cmluZyBkZWxldGUoKSB7DQotCQkNCi0JCWxvZ2dlci5kZWJ1ZygiSW4gZGVsZXRlIG1ldGhvZCIpOw0KLQkJcGVyc29uU2VydmljZS5kZWxldGVQZXJzb24oaWQpOw0KLQkJDQotCQlwZXJzb25MaXN0ID0gUGVyc29uU2VydmljZS5nZXRQZXJzb25zKCkgOw0KLQkJDQotCQlyZXR1cm4gU1VDQ0VTUzsNCi0JfQ0KLQ0KLQ0KLQlwdWJsaWMgUGVyc29uIGdldFBlcnNvbigpIHsNCi0JCXJldHVybiBwZXJzb247DQotCX0NCi0NCi0NCi0JcHVibGljIHZvaWQgc2V0UGVyc29uKFBlcnNvbiBwZXJzb24pIHsNCi0JCXRoaXMucGVyc29uID0gcGVyc29uOw0KLQl9DQotDQotDQotCXB1YmxpYyBMaXN0PFBlcnNvbj4gZ2V0UGVyc29uTGlzdCgpIHsNCi0JCXJldHVybiBwZXJzb25MaXN0Ow0KLQl9DQotDQotDQotCXB1YmxpYyB2b2lkIHNldFBlcnNvbkxpc3QoTGlzdDxQZXJzb24+IHBlcnNvbkxpc3QpIHsNCi0JCXRoaXMucGVyc29uTGlzdCA9IHBlcnNvbkxpc3Q7DQotCX0NCi0NCi0NCi0JcHVibGljIGludCBnZXRJZCgpIHsNCi0JCXJldHVybiBpZDsNCi0JfQ0KLQ0KLQ0KLQlwdWJsaWMgdm9pZCBzZXRJZChpbnQgaWQpIHsNCi0JCXRoaXMuaWQgPSBpZDsNCi0JfQ0KLQkNCi0JDQotCQ0KLQkNCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3N0cnV0cy90dXRvcmlhbHMvd2lsZGNhcmRtZXRob2QvbW9kZWwvUGVyc29uLmphdmEgYi9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3R1dG9yaWFscy93aWxkY2FyZG1ldGhvZC9tb2RlbC9QZXJzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhYmVjMy4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3R1dG9yaWFscy93aWxkY2FyZG1ldGhvZC9tb2RlbC9QZXJzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMudHV0b3JpYWxzLndpbGRjYXJkbWV0aG9kLm1vZGVsOw0KLQ0KLXB1YmxpYyBjbGFzcyBQZXJzb24gew0KLQkNCi0JcHJpdmF0ZSBpbnQgaWQ7DQotCXByaXZhdGUgU3RyaW5nIGZpcnN0TmFtZTsNCi0JcHJpdmF0ZSBTdHJpbmcgbGFzdE5hbWU7DQotCQ0KLQkNCi0JcHVibGljIFBlcnNvbigpIHsNCi0JCQ0KLQkJdGhpcy5pZCA9IC0xOw0KLQkJdGhpcy5maXJzdE5hbWUgPSBudWxsOw0KLQkJdGhpcy5sYXN0TmFtZSA9IG51bGw7DQotCX0NCi0JDQotCQ0KLQlwdWJsaWMgUGVyc29uKGludCBpZCwgU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIGxhc3ROYW1lKSB7DQotCQlzdXBlcigpOw0KLQkJdGhpcy5pZCA9IGlkOw0KLQkJdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7DQotCQl0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWU7DQotCX0NCi0JDQotCXB1YmxpYyBpbnQgZ2V0SWQoKSB7DQotCQlyZXR1cm4gaWQ7DQotCX0NCi0JcHVibGljIHZvaWQgc2V0SWQoaW50IGlkKSB7DQotCQl0aGlzLmlkID0gaWQ7DQotCX0NCi0JcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKSB7DQotCQlyZXR1cm4gZmlyc3ROYW1lOw0KLQl9DQotCXB1YmxpYyB2b2lkIHNldEZpcnN0TmFtZShTdHJpbmcgZmlyc3ROYW1lKSB7DQotCQl0aGlzLmZpcnN0TmFtZSA9IGZpcnN0TmFtZTsNCi0JfQ0KLQlwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCkgew0KLQkJcmV0dXJuIGxhc3ROYW1lOw0KLQl9DQotCXB1YmxpYyB2b2lkIHNldExhc3ROYW1lKFN0cmluZyBsYXN0TmFtZSkgew0KLQkJdGhpcy5sYXN0TmFtZSA9IGxhc3ROYW1lOw0KLQl9DQotCQ0KLQkNCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCi0JCQ0KLQkJDQotCQlyZXR1cm4gZmlyc3ROYW1lICsgIiAiICsgbGFzdE5hbWU7DQotCQkNCi0JfQ0KLQkNCi0JDQotCQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc3RydXRzL3R1dG9yaWFscy93aWxkY2FyZG1ldGhvZC9zZXJ2aWNlL1BlcnNvblNlcnZpY2UuamF2YSBiL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvdHV0b3JpYWxzL3dpbGRjYXJkbWV0aG9kL3NlcnZpY2UvUGVyc29uU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTg1ZWI3Li4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zdHJ1dHMvdHV0b3JpYWxzL3dpbGRjYXJkbWV0aG9kL3NlcnZpY2UvUGVyc29uU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS5zdHJ1dHMudHV0b3JpYWxzLndpbGRjYXJkbWV0aG9kLnNlcnZpY2U7DQotDQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS51dGlsLlNvcnRlZE1hcDsNCi1pbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nZ2VyOw0KLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0cy50dXRvcmlhbHMud2lsZGNhcmRtZXRob2QubW9kZWwuUGVyc29uOw0KLQ0KLQ0KLQ0KLXB1YmxpYyBjbGFzcyBQZXJzb25TZXJ2aWNlIHsNCi0JDQotCS8vQ3JlYXRlIGEgTG9nZ2VyIG9iamVjdA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlciggUGVyc29uU2VydmljZS5jbGFzcy5nZXROYW1lKCkgKTsNCi0NCi0JDQotCXByaXZhdGUgc3RhdGljIFNvcnRlZE1hcDxJbnRlZ2VyLCBQZXJzb24+IHBlb3BsZSA9IG5ldyBUcmVlTWFwPEludGVnZXIsIFBlcnNvbj4oKTsNCi0JDQotCXN0YXRpYyB7DQotCQkNCi0JCXBlb3BsZS5wdXQoMCwgbmV3IFBlcnNvbigwLCAiU3RldmUiLCAiU21pdGgiKSApOw0KLQkJcGVvcGxlLnB1dCgxLCBuZXcgUGVyc29uKDEsICJTdWUiLCAiSm9uZXMiKSApOw0KLQkJDQotCQkNCi0JfQ0KLQkNCi0JDQotCXByaXZhdGUgc3RhdGljIExpc3Q8UGVyc29uPiBwZXJzb25MaXN0ID0gbmV3IEFycmF5TGlzdDxQZXJzb24+KCk7DQotCQ0KLQlzdGF0aWN7DQotCQkNCi0JCWZvciAoSW50ZWdlciBpZCA6IHBlb3BsZS5rZXlTZXQoKSApIHsNCi0JCQkNCi0JCQlwZXJzb25MaXN0LmFkZCggcGVvcGxlLmdldChpZCkpOw0KLQkJCQ0KLQkJfQ0KLQkNCi0JfQ0KLQkNCi0JDQotCXB1YmxpYyBzdGF0aWMgTGlzdDxQZXJzb24+IGdldFBlcnNvbnMoKSB7DQotCQkNCi0JCXJldHVybiBwZXJzb25MaXN0Ow0KLQkJDQotCX0NCi0JDQotCQ0KLSAgICBwdWJsaWMgIHZvaWQgc2F2ZShQZXJzb24gcGVyc29uKSB7DQotICAgIAkNCi0gICAgCWludCBuZXdJZCA9IGdldE5ld0lkKCk7DQotICAgIAkNCi0gICAgCXBlcnNvbi5zZXRJZCggbmV3SWQgKTsNCi0NCi0gICAgCXBlb3BsZS5wdXQoIG5ld0lkLCBwZXJzb24pOw0KLSAgICAJDQotICAgIAlyZWJ1aWxkUGVyc29uTGlzdCgpOw0KLSAgICAJDQotICAgIH0NCi0gICAgDQotICAgIA0KLSAgICBwcml2YXRlIGludCBnZXROZXdJZCgpIHsNCi0JDQotICAgIAlpbnQgbmV3SWQgPSAwOw0KLSAgICAJDQotICAgIAl0cnkgew0KLSAgICAJCQ0KLSAgICAJICBuZXdJZCA9IHBlb3BsZS5sYXN0S2V5KCkgKyAxOw0KLSAgICAJIA0KLSAgICAJfSBjYXRjaCAoTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBleCkgew0KLSAgICAJCQ0KLSAgICAJCWxvZ2dlci5pbmZvKCJJZCB2YWx1ZSBzZXQgdG8gMCIpOw0KLSAgICAJCQ0KLSAgICAJfQ0KLSANCi0gICAgCXJldHVybiBuZXdJZDsNCi0gICAgCQ0KLSAgICAJDQotCX0NCi0NCi0NCi0JcHVibGljICB2b2lkIHVwZGF0ZShQZXJzb24gcGVyc29uKSB7DQotICAgIAkNCi0gICAgCQ0KLSAgICAJDQotICAgIAlQZXJzb24gdGVtcFBlcnNvbiA9IHBlb3BsZS5nZXQoIHBlcnNvbi5nZXRJZCgpICk7DQotICAgIAkNCi0gICAgCXRlbXBQZXJzb24uc2V0Rmlyc3ROYW1lKCBwZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKTsNCi0gICAgCXRlbXBQZXJzb24uc2V0TGFzdE5hbWUocGVyc29uLmdldExhc3ROYW1lKCkgKTsNCi0gICAgCQ0KLSAgICAJcmVidWlsZFBlcnNvbkxpc3QoKTsNCi0gICAgIAkNCi0gICAgCQ0KLSAgICB9DQotDQotDQotCXB1YmxpYyB2b2lkIGRlbGV0ZVBlcnNvbihpbnQgSUQpIHsNCi0JCQ0KLQkJDQotCQlwZW9wbGUucmVtb3ZlKElEKTsNCi0JCQ0KLQkJcmVidWlsZFBlcnNvbkxpc3QoKTsNCi0JCQ0KLQl9DQotDQotDQotCXB1YmxpYyBQZXJzb24gZ2V0UGVyc29uKGludCBpZCkgew0KLQ0KLQkJcmV0dXJuIHBlb3BsZS5nZXQoaWQpOw0KLQkJDQotCX0NCi0JDQotIA0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcmVidWlsZFBlcnNvbkxpc3QoKSB7DQotCQkNCi0JCQ0KLSAgICAJcGVyc29uTGlzdCA9IG5ldyBBcnJheUxpc3Q8UGVyc29uPigpOw0KLSAgICAJDQotICAgICAgICBmb3IgKEludGVnZXIgaWQgOiBwZW9wbGUua2V5U2V0KCkgKSB7DQotIAkJCQ0KLSAJCQlwZXJzb25MaXN0LmFkZCggcGVvcGxlLmdldChpZCkpOw0KLSAJCQkNCi0gCQl9DQotICAgICAgICANCi0gICAgICAgIA0KLQkJDQotCQkNCi0JfQ0KLQkNCi0NCi19DQpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZCBiL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4Njg4MjAuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4NCi08IS0tDQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLQ0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLQ0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLS0tPg0KLQ0KLTwhLS0gQXV0aG9yczogQ2hyaXMgVGF5bG9yLCBDZWtpIEd1bGN1LiAtLT4NCi0NCi08IS0tIFZlcnNpb246IDEuMiAtLT4NCi0NCi08IS0tIEEgY29uZmlndXJhdGlvbiBlbGVtZW50IGNvbnNpc3RzIG9mIG9wdGlvbmFsIHJlbmRlcmVyDQotZWxlbWVudHMsYXBwZW5kZXIgZWxlbWVudHMsIGNhdGVnb3JpZXMgYW5kIGFuIG9wdGlvbmFsIHJvb3QNCi1lbGVtZW50LiAtLT4NCi0NCi08IUVMRU1FTlQgbG9nNGo6Y29uZmlndXJhdGlvbiAocmVuZGVyZXIqLCBhcHBlbmRlcioscGx1Z2luKiwgKGNhdGVnb3J5fGxvZ2dlcikqLHJvb3Q/LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcnlGYWN0b3J5fGxvZ2dlckZhY3RvcnkpPyk+DQotDQotPCEtLSBUaGUgInRocmVzaG9sZCIgYXR0cmlidXRlIHRha2VzIGEgbGV2ZWwgdmFsdWUgYmVsb3cgd2hpY2ggLS0+DQotPCEtLSBhbGwgbG9nZ2luZyBzdGF0ZW1lbnRzIGFyZSBkaXNhYmxlZC4gLS0+DQotDQotPCEtLSBTZXR0aW5nIHRoZSAiZGVidWciIGVuYWJsZSB0aGUgcHJpbnRpbmcgb2YgaW50ZXJuYWwgbG9nNGogbG9nZ2luZyAgIC0tPg0KLTwhLS0gc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCi0NCi08IS0tIEJ5IGRlZmF1bHQsIGRlYnVnIGF0dHJpYnV0ZSBpcyAibnVsbCIsIG1lYW5pbmcgdGhhdCB3ZSBub3QgZG8gdG91Y2ggLS0+DQotPCEtLSBpbnRlcm5hbCBsb2c0aiBsb2dnaW5nIHNldHRpbmdzLiBUaGUgIm51bGwiIHZhbHVlIGZvciB0aGUgdGhyZXNob2xkIC0tPg0KLTwhLS0gYXR0cmlidXRlIGNhbiBiZSBtaXNsZWFkaW5nLiBUaGUgdGhyZXNob2xkIGZpZWxkIG9mIGEgcmVwb3NpdG9yeQkgLS0+DQotPCEtLSBjYW5ub3QgYmUgc2V0IHRvIG51bGwuIFRoZSAibnVsbCIgdmFsdWUgZm9yIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlIC0tPg0KLTwhLS0gc2ltcGx5IG1lYW5zIGRvbid0IHRvdWNoIHRoZSB0aHJlc2hvbGQgZmllbGQsIHRoZSB0aHJlc2hvbGQgZmllbGQgICAtLT4gDQotPCEtLSBrZWVwcyBpdHMgb2xkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KLSAgICAgDQotPCFBVFRMSVNUIGxvZzRqOmNvbmZpZ3VyYXRpb24NCi0gIHhtbG5zOmxvZzRqICAgICAgICAgICAgICBDREFUQSAjRklYRUQgImh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvbG9nNGovIiANCi0gIHRocmVzaG9sZCAgICAgICAgICAgICAgICAoYWxsfHRyYWNlfGRlYnVnfGluZm98d2FybnxlcnJvcnxmYXRhbHxvZmZ8bnVsbCkgIm51bGwiDQotICBkZWJ1ZyAgICAgICAgICAgICAgICAgICAgKHRydWV8ZmFsc2V8bnVsbCkgICJudWxsIg0KLSAgcmVzZXQgICAgICAgICAgICAgICAgICAgICh0cnVlfGZhbHNlKSAiZmFsc2UiDQotPg0KLQ0KLTwhLS0gcmVuZGVyZXIgZWxlbWVudHMgYWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBjb252ZXJzaW9uIG9mICAtLT4NCi08IS0tIG1lc3NhZ2Ugb2JqZWN0cyB0byBTdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQotDQotPCFFTEVNRU5UIHJlbmRlcmVyIEVNUFRZPg0KLTwhQVRUTElTVCByZW5kZXJlcg0KLSAgcmVuZGVyZWRDbGFzcyAgQ0RBVEEgI1JFUVVJUkVEDQotICByZW5kZXJpbmdDbGFzcyBDREFUQSAjUkVRVUlSRUQNCi0+DQotDQotPCEtLSBBcHBlbmRlcnMgbXVzdCBoYXZlIGEgbmFtZSBhbmQgYSBjbGFzcy4gLS0+DQotPCEtLSBBcHBlbmRlcnMgbWF5IGNvbnRhaW4gYW4gZXJyb3IgaGFuZGxlciwgYSBsYXlvdXQsIG9wdGlvbmFsIHBhcmFtZXRlcnMgLS0+DQotPCEtLSBhbmQgZmlsdGVycy4gVGhleSBtYXkgYWxzbyByZWZlcmVuY2UgKG9yIGluY2x1ZGUpIG90aGVyIGFwcGVuZGVycy4gLS0+DQotPCFFTEVNRU5UIGFwcGVuZGVyIChlcnJvckhhbmRsZXI/LCBwYXJhbSosDQotICAgICAgcm9sbGluZ1BvbGljeT8sIHRyaWdnZXJpbmdQb2xpY3k/LCBjb25uZWN0aW9uU291cmNlPywNCi0gICAgICBsYXlvdXQ/LCBmaWx0ZXIqLCBhcHBlbmRlci1yZWYqKT4NCi08IUFUVExJU1QgYXBwZW5kZXINCi0gIG5hbWUgCQlDREFUQSAJI1JFUVVJUkVEDQotICBjbGFzcyAJQ0RBVEEJI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBsYXlvdXQgKHBhcmFtKik+DQotPCFBVFRMSVNUIGxheW91dA0KLSAgY2xhc3MJCUNEQVRBCSNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgZmlsdGVyIChwYXJhbSopPg0KLTwhQVRUTElTVCBmaWx0ZXINCi0gIGNsYXNzCQlDREFUQQkjUkVRVUlSRUQNCi0+DQotDQotPCEtLSBFcnJvckhhbmRsZXJzIGNhbiBiZSBvZiBhbnkgY2xhc3MuIFRoZXkgY2FuIGFkbWl0IGFueSBudW1iZXIgb2YgLS0+DQotPCEtLSBwYXJhbWV0ZXJzLiAtLT4NCi0NCi08IUVMRU1FTlQgZXJyb3JIYW5kbGVyIChwYXJhbSosIHJvb3QtcmVmPywgbG9nZ2VyLXJlZiosICBhcHBlbmRlci1yZWY/KT4gDQotPCFBVFRMSVNUIGVycm9ySGFuZGxlcg0KLSAgIGNsYXNzICAgICAgICBDREFUQSAgICNSRVFVSVJFRCANCi0+DQotDQotPCFFTEVNRU5UIHJvb3QtcmVmIEVNUFRZPg0KLQ0KLTwhRUxFTUVOVCBsb2dnZXItcmVmIEVNUFRZPg0KLTwhQVRUTElTVCBsb2dnZXItcmVmDQotICByZWYgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwYXJhbSBFTVBUWT4NCi08IUFUVExJU1QgcGFyYW0NCi0gIG5hbWUJCUNEQVRBICAgI1JFUVVJUkVEDQotICB2YWx1ZQkJQ0RBVEEJI1JFUVVJUkVEDQotPg0KLQ0KLQ0KLTwhLS0gVGhlIHByaW9yaXR5IGNsYXNzIGlzIG9yZy5hcGFjaGUubG9nNGouTGV2ZWwgYnkgZGVmYXVsdCAtLT4NCi08IUVMRU1FTlQgcHJpb3JpdHkgKHBhcmFtKik+DQotPCFBVFRMSVNUIHByaW9yaXR5DQotICBjbGFzcyAgIENEQVRBCSNJTVBMSUVEDQotICB2YWx1ZQkgIENEQVRBICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tIFRoZSBsZXZlbCBjbGFzcyBpcyBvcmcuYXBhY2hlLmxvZzRqLkxldmVsIGJ5IGRlZmF1bHQgLS0+DQotPCFFTEVNRU5UIGxldmVsIChwYXJhbSopPg0KLTwhQVRUTElTVCBsZXZlbA0KLSAgY2xhc3MgICBDREFUQQkjSU1QTElFRA0KLSAgdmFsdWUJICBDREFUQSAjUkVRVUlSRUQNCi0+DQotDQotDQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPg0KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBjYXRlZ29yeS4gLS0+DQotPCFFTEVNRU5UIGNhdGVnb3J5IChwYXJhbSosKHByaW9yaXR5fGxldmVsKT8sYXBwZW5kZXItcmVmKik+DQotPCFBVFRMSVNUIGNhdGVnb3J5DQotICBjbGFzcyAgICAgICAgIENEQVRBICAgI0lNUExJRUQNCi0gIG5hbWUJCUNEQVRBCSNSRVFVSVJFRA0KLSAgYWRkaXRpdml0eQkodHJ1ZXxmYWxzZSkgInRydWUiICANCi0+DQotDQotPCEtLSBJZiBubyBsZXZlbCBlbGVtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgY29uZmlndXJhdG9yIE1VU1Qgbm90IC0tPg0KLTwhLS0gdG91Y2ggdGhlIGxldmVsIG9mIHRoZSBuYW1lZCBsb2dnZXIuIC0tPg0KLTwhRUxFTUVOVCBsb2dnZXIgKGxldmVsPyxhcHBlbmRlci1yZWYqKT4NCi08IUFUVExJU1QgbG9nZ2VyDQotICBuYW1lCQlDREFUQQkjUkVRVUlSRUQNCi0gIGFkZGl0aXZpdHkJKHRydWV8ZmFsc2UpICJ0cnVlIiAgDQotPg0KLQ0KLQ0KLTwhRUxFTUVOVCBjYXRlZ29yeUZhY3RvcnkgKHBhcmFtKik+DQotPCFBVFRMSVNUIGNhdGVnb3J5RmFjdG9yeSANCi0gICBjbGFzcyAgICAgICAgQ0RBVEEgI1JFUVVJUkVEPg0KLQ0KLTwhRUxFTUVOVCBsb2dnZXJGYWN0b3J5IChwYXJhbSopPg0KLTwhQVRUTElTVCBsb2dnZXJGYWN0b3J5DQotICAgY2xhc3MgICAgICAgIENEQVRBICNSRVFVSVJFRD4NCi0NCi08IUVMRU1FTlQgYXBwZW5kZXItcmVmIEVNUFRZPg0KLTwhQVRUTElTVCBhcHBlbmRlci1yZWYNCi0gIHJlZiBDREFUQSAjUkVRVUlSRUQNCi0+DQotDQotPCEtLSBwbHVnaW5zIG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNsYXNzIGFuZCBjYW4gaGF2ZSBvcHRpb25hbCBwYXJhbWV0ZXJzIC0tPg0KLTwhRUxFTUVOVCBwbHVnaW4gKHBhcmFtKiwgY29ubmVjdGlvblNvdXJjZT8pPg0KLTwhQVRUTElTVCBwbHVnaW4NCi0gIG5hbWUgCQlDREFUQSAJICAgI1JFUVVJUkVEDQotICBjbGFzcyAJQ0RBVEEgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgY29ubmVjdGlvblNvdXJjZSAoZGF0YVNvdXJjZT8sIHBhcmFtKik+DQotPCFBVFRMSVNUIGNvbm5lY3Rpb25Tb3VyY2UNCi0gIGNsYXNzICAgICAgICBDREFUQSAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBkYXRhU291cmNlIChwYXJhbSopPg0KLTwhQVRUTElTVCBkYXRhU291cmNlDQotICBjbGFzcyAgICAgICAgQ0RBVEEgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgdHJpZ2dlcmluZ1BvbGljeSAoKHBhcmFtfGZpbHRlcikqKT4NCi08IUFUVExJU1QgdHJpZ2dlcmluZ1BvbGljeQ0KLSAgbmFtZSAJCUNEQVRBICAjSU1QTElFRA0KLSAgY2xhc3MgCUNEQVRBICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIHJvbGxpbmdQb2xpY3kgKHBhcmFtKik+DQotPCFBVFRMSVNUIHJvbGxpbmdQb2xpY3kNCi0gIG5hbWUgCQlDREFUQSAgI0lNUExJRUQNCi0gIGNsYXNzIAlDREFUQSAgI1JFUVVJUkVEDQotPg0KLQ0KLQ0KLTwhLS0gSWYgbm8gcHJpb3JpdHkgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGNvbmZpZ3VyYXRvciBNVVNUIG5vdCAtLT4NCi08IS0tIHRvdWNoIHRoZSBwcmlvcml0eSBvZiByb290LiAtLT4NCi08IS0tIFRoZSByb290IGNhdGVnb3J5IGFsd2F5cyBleGlzdHMgYW5kIGNhbm5vdCBiZSBzdWJjbGFzc2VkLiAtLT4NCi08IUVMRU1FTlQgcm9vdCAocGFyYW0qLCAocHJpb3JpdHl8bGV2ZWwpPywgYXBwZW5kZXItcmVmKik+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tICAgICAgICAgICAgICAgICAgICAgICBBIGxvZ2dpbmcgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCFFTEVNRU5UIGxvZzRqOmV2ZW50U2V0IChsb2c0ajpldmVudCopPg0KLTwhQVRUTElTVCBsb2c0ajpldmVudFNldA0KLSAgeG1sbnM6bG9nNGogICAgICAgICAgICAgQ0RBVEEgI0ZJWEVEICJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2xvZzRqLyIgDQotICB2ZXJzaW9uICAgICAgICAgICAgICAgICgxLjF8MS4yKSAiMS4yIiANCi0gIGluY2x1ZGVzTG9jYXRpb25JbmZvICAgKHRydWV8ZmFsc2UpICJ0cnVlIg0KLT4NCi0NCi0NCi0NCi08IUVMRU1FTlQgbG9nNGo6ZXZlbnQgKGxvZzRqOm1lc3NhZ2UsIGxvZzRqOk5EQz8sIGxvZzRqOnRocm93YWJsZT8sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgbG9nNGo6bG9jYXRpb25JbmZvPywgbG9nNGo6cHJvcGVydGllcz8pID4NCi0NCi08IS0tIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGFwcGxpY2F0aW9uIGRlcGVuZGVudC4gLS0+DQotPCFBVFRMSVNUIGxvZzRqOmV2ZW50DQotICAgIGxvZ2dlciAgICAgQ0RBVEEgI1JFUVVJUkVEDQotICAgIGxldmVsICAgICAgQ0RBVEEgI1JFUVVJUkVEDQotICAgIHRocmVhZCAgICAgQ0RBVEEgI1JFUVVJUkVEDQotICAgIHRpbWVzdGFtcCAgQ0RBVEEgI1JFUVVJUkVEDQotICAgIHRpbWUgICAgICAgQ0RBVEEgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIGxvZzRqOm1lc3NhZ2UgKCNQQ0RBVEEpPg0KLTwhRUxFTUVOVCBsb2c0ajpOREMgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCBsb2c0ajp0aHJvd2FibGUgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCBsb2c0ajpsb2NhdGlvbkluZm8gRU1QVFk+DQotPCFBVFRMSVNUIGxvZzRqOmxvY2F0aW9uSW5mbw0KLSAgY2xhc3MgIENEQVRBCSNSRVFVSVJFRA0KLSAgbWV0aG9kIENEQVRBCSNSRVFVSVJFRA0KLSAgZmlsZSAgIENEQVRBCSNSRVFVSVJFRA0KLSAgbGluZSAgIENEQVRBCSNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgbG9nNGo6cHJvcGVydGllcyAobG9nNGo6ZGF0YSopPg0KLQ0KLTwhRUxFTUVOVCBsb2c0ajpkYXRhIEVNUFRZPg0KLTwhQVRUTElTVCBsb2c0ajpkYXRhDQotICBuYW1lICAgQ0RBVEEJI1JFUVVJUkVEDQotICB2YWx1ZSAgQ0RBVEEJI1JFUVVJUkVEDQotPg0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwgYi9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk0YzQyLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4NCi08IURPQ1RZUEUgbG9nNGo6Y29uZmlndXJhdGlvbiBQVUJMSUMgIi0vL2xvZzRqL2xvZzRqIENvbmZpZ3VyYXRpb24vL0VOIiAibG9nNGouZHRkIj4NCi0NCi08bG9nNGo6Y29uZmlndXJhdGlvbiB4bWxuczpsb2c0aj0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9sb2c0ai8iPg0KLSAgICANCi0gICAgPGFwcGVuZGVyIG5hbWU9IlNURE9VVCIgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyIj4NCi0gICAgICAgIDxsYXlvdXQgY2xhc3M9Im9yZy5hcGFjaGUubG9nNGouU2ltcGxlTGF5b3V0Ii8+DQotICAgIDwvYXBwZW5kZXI+DQotICAgIA0KLQ0KLSAgICA8IS0tIHNwZWNpZnkgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIGxvZ2dlcnMgZnJvbSBvdGhlciBsaWJyYXJpZXMgLS0+DQotICAgIDxsb2dnZXIgbmFtZT0iY29tLm9wZW5zeW1waG9ueSI+DQotICAgIAk8bGV2ZWwgdmFsdWU9IkVSUk9SIiAvPg0KLSAgICA8L2xvZ2dlcj4NCi0NCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0czIiPg0KLSAgICAJIDxsZXZlbCB2YWx1ZT0iRVJST1IiIC8+DQotICAgIDwvbG9nZ2VyPg0KLSAgICANCi0gICAgICA8IS0tIGxvZyBvbmx5IEVSUk9SIGFuZCBhYm92ZSBtZXNzYWdlcyBmb3IgbG9nZ2VycyB3aXRoDQotICAgIGEgbmFtZSBvZiB0aGUgbmFtZSB2YWx1ZSBiZWxvdyAtLT4NCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0cy50dXRvcmlhbHMiPg0KLSAgICAJPGxldmVsIHZhbHVlPSJERUdVRyIgLz4NCi0gICAgPC9sb2dnZXI+DQotDQotICANCi0NCi0gICA8IS0tIGZvciBhbGwgb3RoZXIgbG9nZ2VycyBsb2cgb25seSBpbmZvIGFuZCBhYm92ZSBsb2cgbWVzc2FnZXMgLS0+DQotICAgICA8cm9vdD4NCi0gICAgICAgIDxwcmlvcml0eSB2YWx1ZT0iV0FSTiIvPiANCi0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJTVERPVVQiIC8+IA0KLSAgICAgPC9yb290PiANCi0gICAgDQotPC9sb2c0ajpjb25maWd1cmF0aW9uPiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGVhMDIzLi4wMDAwMDAwCi0tLSBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IURPQ1RZUEUgc3RydXRzIFBVQkxJQw0KLSAgICAiLS8vQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24vL0RURCBTdHJ1dHMgQ29uZmlndXJhdGlvbiAyLjAvL0VOIg0KLSAgICAiaHR0cDovL3N0cnV0cy5hcGFjaGUub3JnL2R0ZHMvc3RydXRzLTIuMC5kdGQiPg0KLQ0KLTxzdHJ1dHM+DQotDQotICAgPGNvbnN0YW50IG5hbWU9InN0cnV0cy5kZXZNb2RlIiB2YWx1ZT0idHJ1ZSIgLz4NCi0gICA8Y29uc3RhbnQgbmFtZT0ic3RydXRzLmVuYWJsZS5EeW5hbWljTWV0aG9kSW52b2NhdGlvbiIgdmFsdWU9ImZhbHNlIiAvPg0KLQ0KLSAgIA0KLSAgIDxwYWNrYWdlIG5hbWU9IndpbGRjYXJkbWV0aG9kZXhhbXBsZSIgZXh0ZW5kcz0ic3RydXRzLWRlZmF1bHQiPg0KLQ0KLSAgICAgICAgPCEtLSBXaGF0ZXZlciB2YWx1ZSBpcyBiZWZvcmUgUGVyc29uIGZvciB0aGUgbmFtZSBvZg0KLSAgICAgICAgdGhlIGFjdGlvbiB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gY2FsbCBpbiANCi0gICAgICAgIGNsYXNzIFBlcnNvbkFjdGlvbi4gIEZvciBleGFtcGxlIGFjdGlvbiBjcmVhdGVQZXJzb24gDQotICAgICAgICB3aWxsIGNhbGwgYSBtZXRob2QgbmFtZWQgY3JlYXRlIGluIGNsYXNzIFBlcnNvbkFjdGlvbiAtLT4NCi0gICAgICAgIA0KLQkJPGFjdGlvbiBuYW1lPSIqUGVyc29uIiBjbGFzcz0ib3JnLmFwYWNoZS5zdHJ1dHMudHV0b3JpYWxzLndpbGRjYXJkbWV0aG9kLmFjdGlvbi5QZXJzb25BY3Rpb24iIG1ldGhvZD0iezF9Ij4NCi0JCQk8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiPnZpZXcuanNwPC9yZXN1bHQ+DQotCQkJPHJlc3VsdCBuYW1lPSJpbnB1dCI+aW5wdXQuanNwPC9yZXN1bHQ+DQotCQk8L2FjdGlvbj4NCi0JCQ0KLSAgIDwvcGFja2FnZT4NCi0NCi08L3N0cnV0cz4NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTQ5NTEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1DbGFzcy1QYXRoOiANCi0NCmRpZmYgLS1naXQgYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk1MWE0MC4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci08ZGlzcGxheS1uYW1lPldpbGRjYXJkX01ldGhvZF9TdHJ1dHMyX012bjwvZGlzcGxheS1uYW1lPgotICA8d2VsY29tZS1maWxlLWxpc3Q+Ci0gICAgPHdlbGNvbWUtZmlsZT5pbnB1dC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLSAgCi0gIAkJCQkJIAotICAgIDxmaWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnN0cnV0czIuZGlzcGF0Y2hlci5uZy5maWx0ZXIuU3RydXRzUHJlcGFyZUFuZEV4ZWN1dGVGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4KLQotICAgICA8ZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIDxmaWx0ZXItbmFtZT5zdHJ1dHMyPC9maWx0ZXItbmFtZT4KLSAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vd2ViYXBwL2lucHV0LmpzcCBiL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3dlYmFwcC9pbnB1dC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MWQxZDEuLjAwMDAwMDAKLS0tIGEvc3RydXRzMmV4YW1wbGVzL3dpbGRjYXJkX21ldGhvZF9zZWxlY3Rpb24vc3JjL21haW4vd2ViYXBwL2lucHV0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBpbXBvcnQ9ImphdmEudXRpbC4qIiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4NCi08JQ0KLVN0cmluZyBwYXRoID0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpOw0KLVN0cmluZyBiYXNlUGF0aCA9IHJlcXVlc3QuZ2V0U2NoZW1lKCkrIjovLyIrcmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCkrIjoiK3JlcXVlc3QuZ2V0U2VydmVyUG9ydCgpK3BhdGgrIi8iOw0KLSU+DQotPCVAIHRhZ2xpYiBwcmVmaXg9InMiIHVyaT0iL3N0cnV0cy10YWdzIiAlPg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxodG1sPg0KLSAgPGhlYWQ+DQotICAgIDxiYXNlIGhyZWY9IjwlPWJhc2VQYXRoJT4iPg0KLSAgICANCi0gICAgPHRpdGxlPkVkaXQgUGVyc29uPC90aXRsZT4NCi0JPG1ldGEgaHR0cC1lcXVpdj0icHJhZ21hIiBjb250ZW50PSJuby1jYWNoZSI+DQotCTxtZXRhIGh0dHAtZXF1aXY9ImNhY2hlLWNvbnRyb2wiIGNvbnRlbnQ9Im5vLWNhY2hlIj4NCi0JPG1ldGEgaHR0cC1lcXVpdj0iZXhwaXJlcyIgY29udGVudD0iMCI+ICAgIA0KLQ0KLSAgPC9oZWFkPg0KLSAgDQotICA8Ym9keT4NCi0gIDxzOmlmIHRlc3Q9ImlkID4gMCI+DQotICAgIDxoMz5FZGl0IFBlcnNvbjwvaDM+DQotICA8L3M6aWY+DQotICA8czplbHNlPg0KLSAgCTxoMz5DcmVhdGUgUGVyc29uPC9oMz4NCi0gIA0KLSAgPC9zOmVsc2U+DQotICANCi0gIDxzOmZvcm0gYWN0aW9uPSdzYXZlT3JVcGRhdGVQZXJzb24nPg0KLSAgDQotICAJPHA+PHM6dGV4dGZpZWxkIG5hbWU9InBlcnNvbi5maXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBuYW1lIiAvPiA8YnIgLz4NCi0gIAk8czp0ZXh0ZmllbGQgbmFtZT0icGVyc29uLmxhc3ROYW1lIiBsYWJlbD0iTGFzdCBuYW1lIiAvPiA8L3A+DQotICAJDQotICAJPHM6aGlkZGVuIG5hbWU9InBlcnNvbi5pZCIgLz4NCi0gIAk8czpzdWJtaXQgIHZhbHVlPSJTYXZlIiAvPg0KLSAgDQotICA8L3M6Zm9ybT4NCi0gICAgDQotICAgDQotICA8L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3dlYmFwcC92aWV3LmpzcCBiL3N0cnV0czJleGFtcGxlcy93aWxkY2FyZF9tZXRob2Rfc2VsZWN0aW9uL3NyYy9tYWluL3dlYmFwcC92aWV3LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1ZTdmNi4uMDAwMDAwMAotLS0gYS9zdHJ1dHMyZXhhbXBsZXMvd2lsZGNhcmRfbWV0aG9kX3NlbGVjdGlvbi9zcmMvbWFpbi93ZWJhcHAvdmlldy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgaW1wb3J0PSJqYXZhLnV0aWwuKiIgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+DQotPCUNCi1TdHJpbmcgcGF0aCA9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKTsNCi1TdHJpbmcgYmFzZVBhdGggPSByZXF1ZXN0LmdldFNjaGVtZSgpKyI6Ly8iK3JlcXVlc3QuZ2V0U2VydmVyTmFtZSgpKyI6IityZXF1ZXN0LmdldFNlcnZlclBvcnQoKStwYXRoKyIvIjsNCi0lPg0KLTwlQCB0YWdsaWIgcHJlZml4PSJzIiB1cmk9Ii9zdHJ1dHMtdGFncyIgJT4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08aHRtbD4NCi0gIDxoZWFkPg0KLSAgICA8YmFzZSBocmVmPSI8JT1iYXNlUGF0aCU+Ij4gICAgDQotICAgIDx0aXRsZT5WaWV3IFBlb3BsZTwvdGl0bGU+DQotCTxtZXRhIGh0dHAtZXF1aXY9InByYWdtYSIgY29udGVudD0ibm8tY2FjaGUiPg0KLQk8bWV0YSBodHRwLWVxdWl2PSJjYWNoZS1jb250cm9sIiBjb250ZW50PSJuby1jYWNoZSI+DQotCTxtZXRhIGh0dHAtZXF1aXY9ImV4cGlyZXMiIGNvbnRlbnQ9IjAiPiAgICANCi0NCi0gIDwvaGVhZD4NCi0gIA0KLSAgPGJvZHk+DQotICA8aDM+UGVvcGxlPC9oMz4NCi0gICAgDQotICAgIA0KLSAgICA8czppZiB0ZXN0PSJwZXJzb25MaXN0LnNpemUgPiAwIj4NCi0gICAgICAgPG9sPg0KLSAgICAgICAgIDxzOml0ZXJhdG9yIHZhbHVlPSJwZXJzb25MaXN0Ij4NCi0JICAJCTxsaT4NCi0JICAJCQk8czpwcm9wZXJ0eSB2YWx1ZT0iZmlyc3ROYW1lIiAvPg0KLQkgIAkJCQ0KLQkgIAkJCTxzOnByb3BlcnR5IHZhbHVlPSJsYXN0TmFtZSIgLz4gDQotCSAgCQkJDQotCSAgCQkJPCUtLVB1dCB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbA0KLQkgIAkJCWluIGZyb250IG9mIFBlcnNvbi4gIFRoaXMgYWN0aW9uIHdpbGwgY2F1c2UNCi0JICAJCQl0aGUgbWV0aG9kIG5hbWVkIGVkaXQgdG8gYmUgY2FsbGVkIGluIHRoZQ0KLQkgIAkJCUFjdGlvblN1cHBvcnQgY2xhc3MgKHNlZSBzdHJ1dHMueG1sKSAgLS0lPg0KLSAgCQkJCTxzOnVybCBhY3Rpb249ImVkaXRQZXJzb24iIHZhcj0iZWRpdFVybCI+DQotCQkJCSAgICAgICA8czpwYXJhbSBuYW1lPSJpZCIgdmFsdWU9ImlkIi8+DQotCQkJICAgIDwvczp1cmw+DQotCQkJICAgIA0KLSAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJkZWxldGVQZXJzb24iIHZhcj0iZGVsZXRlVXJsIj4NCi0JCQkJICAgICAgIDxzOnBhcmFtIG5hbWU9ImlkIiB2YWx1ZT0iaWQiLz4NCi0JCQkgICAgPC9zOnVybD4NCi0JCQkgICAgDQotCSAgCQkJPGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9JyNlZGl0VXJsJyAvPiIgPkVkaXQ8L2E+DQotCSAgCQkJDQotCSAgCQkJPGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9JyNkZWxldGVVcmwnIC8+IiA+RGVsZXRlPC9hPg0KLQkgIAkJPC9saT4NCi0JCTwvczppdGVyYXRvcj4NCi0gICAgICAgPC9vbD4NCi0gICAgPC9zOmlmPg0KLSANCi0JPCUtLVB1dCB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbA0KLSAgICBpbiBmcm9udCBvZiBQZXJzb24uICBUaGlzIGFjdGlvbiB3aWxsIGNhdXNlDQotICAgIHRoZSBtZXRob2QgbmFtZWQgY3JlYXRlIHRvIGJlIGNhbGxlZCBpbiB0aGUNCi0gICAgQWN0aW9uU3VwcG9ydCBjbGFzcyAoc2VlIHN0cnV0cy54bWwpICAtLSU+ICAgDQotCTxzOnVybCBhY3Rpb249ImNyZWF0ZVBlcnNvbiIgdmFyPSJuZXdVcmwiPg0KLSAgICAgICA8czpwYXJhbSBuYW1lPSJpZCIgdmFsdWU9IjAiLz4NCi0gICAgIDwvczp1cmw+DQotICAgICANCi0gICAgPHA+PGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9JyNuZXdVcmwnIC8+IiA+IENyZWF0ZSBuZXcgcGVyc29uLjwvYT48L3A+DQotICA8L2JvZHk+DQotPC9odG1sPg0K