ZGlmZiAtLWdpdCBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8uYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vYXJjaC9BcmNoQ29tbWFuZEltcGwuamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8uYXJjaC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vYXJjaC9BcmNoQ29tbWFuZEltcGwuamF2YQppbmRleCBkNmJiNzdlLi43ODg1MDUzIDEwMDY0NAotLS0gYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLmFyY2gvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL2FyY2gvQXJjaENvbW1hbmRJbXBsLmphdmEKKysrIGIvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5hcmNoL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9hcmNoL0FyY2hDb21tYW5kSW1wbC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAKIAogLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXJjaGkgY29tbWFuZCBwcmludGluZyB0aGUgYWN0dWFsIGFyY2hpdGVjdHVyZS4KLSAqIEBhdXRob3IgQ2xlbWVudCBFc2NvZmZpZXIKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBhcmNoIGNvbW1hbmQgcHJpbnRpbmcgdGhlIGFjdHVhbCBhcmNoaXRlY3R1cmUuCisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpmZWxpeC1kZXZAaW5jdWJhdG9yLmFwYWNoZS5vcmciPkZlbGl4IFByb2plY3QgVGVhbTwvYT4KICAqLwogcHVibGljIGNsYXNzIEFyY2hDb21tYW5kSW1wbCBpbXBsZW1lbnRzIENvbW1hbmQgewogCmRpZmYgLS1naXQgYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLm1ldGFkYXRhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tZXRhZGF0YS9BdHRyaWJ1dGUuamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ubWV0YWRhdGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21ldGFkYXRhL0F0dHJpYnV0ZS5qYXZhCmluZGV4IDA1Y2ZmOWYuLjg5NDUxYTQgMTAwNjQ0Ci0tLSBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8ubWV0YWRhdGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21ldGFkYXRhL0F0dHJpYnV0ZS5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ubWV0YWRhdGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21ldGFkYXRhL0F0dHJpYnV0ZS5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICogQXR0cmlidXRlLgotICogQGF1dGhvciBDbGVtZW50IEVzY29mZmllcgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86ZmVsaXgtZGV2QGluY3ViYXRvci5hcGFjaGUub3JnIj5GZWxpeCBQcm9qZWN0IFRlYW08L2E+CiAgKi8KIHB1YmxpYyBjbGFzcyBBdHRyaWJ1dGUgewogCmRpZmYgLS1naXQgYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLm1ldGFkYXRhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tZXRhZGF0YS9FbGVtZW50LmphdmEgYi9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLm1ldGFkYXRhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tZXRhZGF0YS9FbGVtZW50LmphdmEKaW5kZXggMmVmZmMzYS4uZmY0ZTQyOCAxMDA2NDQKLS0tIGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5tZXRhZGF0YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWV0YWRhdGEvRWxlbWVudC5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ubWV0YWRhdGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21ldGFkYXRhL0VsZW1lbnQuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqIEVsZW1lbnQuCi0gKiBAYXV0aG9yIENsZW1lbnQgRXNjb2ZmaWVyCisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpmZWxpeC1kZXZAaW5jdWJhdG9yLmFwYWNoZS5vcmciPkZlbGl4IFByb2plY3QgVGVhbTwvYT4KICAqLwogcHVibGljIGNsYXNzIEVsZW1lbnQgewogCmRpZmYgLS1naXQgYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWFuaXB1bGF0aW9uL01hbmlwdWxhdGlvblByb3BlcnR5LmphdmEgYi9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWFuaXB1bGF0aW9uL01hbmlwdWxhdGlvblByb3BlcnR5LmphdmEKaW5kZXggMTlhZmE3OC4uN2NlNWJkNSAxMDA2NDQKLS0tIGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21hbmlwdWxhdGlvbi9NYW5pcHVsYXRpb25Qcm9wZXJ0eS5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vTWFuaXB1bGF0aW9uUHJvcGVydHkuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqIFN0b3JlIHByb3BlcnRpZXMgZm9yIHRoZSBtYW5pcHVsYXRpb24gcHJvY2Vzcy4KLSAqIEBhdXRob3IgQ2xlbWVudCBFc2NvZmZpZXIKKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmZlbGl4LWRldkBpbmN1YmF0b3IuYXBhY2hlLm9yZyI+RmVsaXggUHJvamVjdCBUZWFtPC9hPgogICoKICAqLwogcHVibGljIGNsYXNzIE1hbmlwdWxhdGlvblByb3BlcnR5IHsKZGlmZiAtLWdpdCBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vTWFuaXB1bGF0b3IuamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vTWFuaXB1bGF0b3IuamF2YQppbmRleCA1Zjk1MzdkLi5lMDAxZDRkIDEwMDY0NAotLS0gYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWFuaXB1bGF0aW9uL01hbmlwdWxhdG9yLmphdmEKKysrIGIvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21hbmlwdWxhdGlvbi9NYW5pcHVsYXRvci5qYXZhCkBAIC0yMywxMyArMjMsMTMgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIAotaW1wb3J0IG9yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luLklwb2pvUGx1Z2luQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi5JUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NXcml0ZXI7CiAKIC8qKgogICogaVBPSk8gQnl0ZWNvZGUgTWFuaXB1bGF0b3IuCi0gKiBAYXV0aG9yIENsZW1lbnQgRXNjb2ZmaWVyCisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpmZWxpeC1kZXZAaW5jdWJhdG9yLmFwYWNoZS5vcmciPkZlbGl4IFByb2plY3QgVGVhbTwvYT4KICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5pcHVsYXRvciB7CkBAIC03Nyw3ICs3Nyw3IEBACiAJCVVSTCB1cmwgPSBjbGF6ei50b1VSSSgpLnRvVVJMKCk7CiAKICAgICAgICAgLy9pZiAodXJsID09IG51bGwpIHsgdGhyb3cgbmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24obmFtZSk7IH0KLSAgICAgICAgSXBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5JTkZPLCAiTWFuaXB1bGF0ZSB0aGUgY2xhc3MgZmlsZSA6ICIgKyBjbGF6ei5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgIElQb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIk1hbmlwdWxhdGUgdGhlIGNsYXNzIGZpbGUgOiAiICsgY2xhenouZ2V0QWJzb2x1dGVQYXRoKCkpOwogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgZm9zLndyaXRlKGN3MC50b0J5dGVBcnJheSgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBJcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJQdXQgdGhlIGZpbGUgIiArIGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGluIHRoZSBqYXIgZmlsZSIpOworICAgICAgICAgICAgICAgIElQb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIlB1dCB0aGUgZmlsZSAiICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgaW4gdGhlIGphciBmaWxlIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyBTeXN0ZW0uZXJyLnByaW50bG4oIlByb2JsZW0gdG8gd3JpdGUgdGhlIGFkYXB0ZWQgY2xhc3Mgb24gdGhlIGZpbGUgc3lzdGVtICIgKyAiIFsgIisgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArIiBdICIgKyBlLmdldE1lc3NhZ2UoKSk7IH0KIAogICAgICAgICBtX2ZpZWxkcyA9IHByZXByb2Nlc3MuZ2V0RmllbGRzKCk7CmRpZmYgLS1naXQgYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWFuaXB1bGF0aW9uL1ByZXByb2Nlc3NDbGFzc0FkYXB0ZXIuamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vUHJlcHJvY2Vzc0NsYXNzQWRhcHRlci5qYXZhCmluZGV4IGY5ODViYWIuLjk0YjRjMjIgMTAwNjQ0Ci0tLSBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vUHJlcHJvY2Vzc0NsYXNzQWRhcHRlci5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vUHJlcHJvY2Vzc0NsYXNzQWRhcHRlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAKLWltcG9ydCBvcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi5JcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4uSVBvam9QbHVnaW5Db25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkNsYXNzQWRhcHRlcjsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1Zpc2l0b3I7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uRmllbGRWaXNpdG9yOwpAQCAtMzYsNyArMzYsNyBAQAogICogLSBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBmaWVsZCBvawogICogLSBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzIG9rCiAgKiAtIENoYW5nZSBHRVRGSUVMRCBhbmQgUFVURklFTEQgdG8gY2FsbGVkIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBtZXRob2QKLSAqIEBhdXRob3IgQ2xlbWVudCBFc2NvZmZpZXIKKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmZlbGl4LWRldkBpbmN1YmF0b3IuYXBhY2hlLm9yZyI+RmVsaXggUHJvamVjdCBUZWFtPC9hPgogICoKICAqLwogcHVibGljIGNsYXNzIFByZXByb2Nlc3NDbGFzc0FkYXB0ZXIgZXh0ZW5kcyBDbGFzc0FkYXB0ZXIgaW1wbGVtZW50cyBPcGNvZGVzIHsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzaWduYXR1cmUsCiAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEFDQ19TVEFUSUMpID09IDApIHsKLSAgICAgICAgICAgIAkJSXBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5JTkZPLCAiTWFuaXB1bGF0ZSB0aGUgZmllbGQgZGVjbGFyYXRpb24gb2YgIiArIG5hbWUpOworICAgICAgICAgICAgCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJNYW5pcHVsYXRlIHRoZSBmaWVsZCBkZWNsYXJhdGlvbiBvZiAiICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIFR5cGUgdHlwZSA9IFR5cGUuZ2V0VHlwZShkZXNjKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBmaWVsZCBpbiB0aGUgY29kZQpAQCAtMzkyLDcgKzM5Miw3IEBACiAgICAgICAgICAgICAJYnJlYWs7CiAKICAgICAgICAgICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgICAgICAJSXBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5TRVZFUkUsICJNYW5pcHVsYXRpb24gcHJvYmxlbSBpbiAiICsgbV9vd25lciArICIgOiBhIHR5cGUgaXMgbm90IGltcGxlbWVudGVkIDogIiArIHR5cGUpOworICAgICAgICAgICAgICAgIAlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLlNFVkVSRSwgIk1hbmlwdWxhdGlvbiBwcm9ibGVtIGluICIgKyBtX293bmVyICsgIiA6IGEgdHlwZSBpcyBub3QgaW1wbGVtZW50ZWQgOiAiICsgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICAgICAgICAgICAgICAJbXYudmlzaXRJbnNuKFJFVFVSTik7CiAgICAgICAgICAgICAgICAgCWJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgICAgIAlJcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLlNFVkVSRSwgIk1hbmlwdWxhdGlvbiBFcnJvciA6IENhbm5vdCBjcmVhdGUgdGhlIHNldHRlciBtZXRob2QgZm9yIHRoZSBmaWVsZCA6ICIgKyBuYW1lICsgIiAoIiArIHR5cGUgKyAiKSIpOworICAgICAgICAgICAgICAgIAlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLlNFVkVSRSwgIk1hbmlwdWxhdGlvbiBFcnJvciA6IENhbm5vdCBjcmVhdGUgdGhlIHNldHRlciBtZXRob2QgZm9yIHRoZSBmaWVsZCA6ICIgKyBuYW1lICsgIiAoIiArIHR5cGUgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21hbmlwdWxhdGlvbi9QcmVwcm9jZXNzQ29kZUFkYXB0ZXIuamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9tYW5pcHVsYXRpb24vUHJlcHJvY2Vzc0NvZGVBZGFwdGVyLmphdmEKaW5kZXggMTZiYzFlZS4uYzU0NzI0MiAxMDA2NDQKLS0tIGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL21hbmlwdWxhdGlvbi9QcmVwcm9jZXNzQ29kZUFkYXB0ZXIuamF2YQorKysgYi9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vbWFuaXB1bGF0aW9uL1ByZXByb2Nlc3NDb2RlQWRhcHRlci5qYXZhCkBAIC0xOCwxNiArMTgsMTQgQEAKIAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4uSXBvam9QbHVnaW5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luLklQb2pvUGx1Z2luQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RBZGFwdGVyOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKIAogCiAvKioKLSAqIERhdGUgOiAyOSBqYW52LiAyMDA2Ci0gKiBAYXV0aG9yIGNs6W1lbnQKLSAqCisgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpmZWxpeC1kZXZAaW5jdWJhdG9yLmFwYWNoZS5vcmciPkZlbGl4IFByb2plY3QgVGVhbTwvYT4KICAqLwogcHVibGljIGNsYXNzIFByZXByb2Nlc3NDb2RlQWRhcHRlciBleHRlbmRzIE1ldGhvZEFkYXB0ZXIgaW1wbGVtZW50cyBPcGNvZGVzIHsKIApAQCAtNjEsMTQgKzU5LDE0IEBACiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZGVzYykgewogICAgICAgICBpZiAob3duZXIuZXF1YWxzKG1fb3duZXIpKSB7CiAgICAgICAgICAgICBpZiAob3Bjb2RlID09IEdFVEZJRUxEKSB7Ci0gICAgICAgICAgICAJCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIk1hbmlwdWxhdGUgYSBHRVRGSUVMRCBvbiA6ICIgKyBuYW1lKTsKKyAgICAgICAgICAgIAkJSVBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5JTkZPLCAiTWFuaXB1bGF0ZSBhIEdFVEZJRUxEIG9uIDogIiArIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ0Rlc2MgPSAiKCkiICsgZGVzYzsKICAgICAgICAgICAgICAgICAgICAgdmlzaXRNZXRob2RJbnNuKElOVk9LRVZJUlRVQUwsIG93bmVyLCAiX2dldCIgKyBuYW1lLCBnRGVzYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgCWlmIChvcGNvZGUgPT0gUFVURklFTEQpIHsKICAgICAgICAgICAgIAkJLy8gcmVwbGFjZXMgUFVURklFTEQgZiBieSBJTlZPS0VTUEVDSUFMIF9zZXRmCi0gICAgICAgICAgICAJCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIk1hbmlwdWxhdGUgYSBQVVRGSUVMRCBvbiA6ICIgKyBuYW1lKTsKKyAgICAgICAgICAgIAkJSVBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5JTkZPLCAiTWFuaXB1bGF0ZSBhIFBVVEZJRUxEIG9uIDogIiArIG5hbWUpOwogICAgICAgICAgICAgCQlTdHJpbmcgc0Rlc2MgPSAiKCIgKyBkZXNjICsgIilWIjsKICAgICAgICAgICAgIAkJdmlzaXRNZXRob2RJbnNuKElOVk9LRVNQRUNJQUwsIG93bmVyLCAiX3NldCIgKyBuYW1lLCBzRGVzYyk7CiAgICAgICAgICAgICAJCXJldHVybjsKZGlmZiAtLWdpdCBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wYXJzZXIvTWFuaWZlc3RNZXRhZGF0YVBhcnNlci5qYXZhIGIvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BhcnNlci9NYW5pZmVzdE1ldGFkYXRhUGFyc2VyLmphdmEKaW5kZXggODYxY2Y3NS4uNzE1OGM2OCAxMDA2NDQKLS0tIGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BhcnNlci9NYW5pZmVzdE1ldGFkYXRhUGFyc2VyLmphdmEKKysrIGIvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BhcnNlci9NYW5pZmVzdE1ldGFkYXRhUGFyc2VyLmphdmEKQEAgLTIxLDEyICsyMSwxMiBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5tZXRhZGF0YS5BdHRyaWJ1dGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5tZXRhZGF0YS5FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luLklwb2pvUGx1Z2luQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi5JUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb247CiAKIC8qKgogICogTWFuaWZlc3QgTWV0YWRhdGEgcGFyc2VyLgogICogUmVhZCBhIG1hbmlmZXN0IGZpbGUgYW5kIGNvbnN0cnVjdCBtZXRhZGF0YQotICogQGF1dGhvciBDbGVtZW50IEVzY29mZmllcgorICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86ZmVsaXgtZGV2QGluY3ViYXRvci5hcGFjaGUub3JnIj5GZWxpeCBQcm9qZWN0IFRlYW08L2E+CiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5pZmVzdE1ldGFkYXRhUGFyc2VyIHsKIApAQCAtMTM1LDEzICsxMzUsMTMgQEAKIAkJCQkJYyA9IHN0cmluZ1tpXTsKIAkJCQl9CiAJCQkJQXR0cmlidXRlIGF0dCA9IG5ldyBBdHRyaWJ1dGUoYXR0TmFtZSwgYXR0TnMgLGF0dFZhbHVlKTsKLQkJCQlJcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJEZXRlY3QgYSBuZXcgIGF0dHJpYnV0ZSA6ICciICsgIlsiICsgYXR0TnMgKyAiXSIgKyBhdHROYW1lICsgIicgPSAnIiArIGF0dFZhbHVlICsgIiciKTsKKwkJCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJEZXRlY3QgYSBuZXcgIGF0dHJpYnV0ZSA6ICciICsgIlsiICsgYXR0TnMgKyAiXSIgKyBhdHROYW1lICsgIicgPSAnIiArIGF0dFZhbHVlICsgIiciKTsKIAkJCQltX2VsZW1lbnRzW21fZWxlbWVudHMubGVuZ3RoIC0gMV0uYWRkQXR0cmlidXRlKGF0dCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ30nIDoKIAkJCQlFbGVtZW50IGxhc3RFbGVtZW50ID0gcmVtb3ZlTGFzdEVsZW1lbnQoKTsKLQkJCQlJcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJFbmQgb2YgdGhlIGVsZW1lbnQgOiAiICsgbGFzdEVsZW1lbnQuZ2V0TmFtZSgpKTsKKwkJCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJFbmQgb2YgdGhlIGVsZW1lbnQgOiAiICsgbGFzdEVsZW1lbnQuZ2V0TmFtZSgpKTsKIAkJCQlpZiAobV9lbGVtZW50cy5sZW5ndGggIT0gMCkgewogCQkJCQlFbGVtZW50IG5ld1F1ZXVlID0gbV9lbGVtZW50c1ttX2VsZW1lbnRzLmxlbmd0aCAtIDFdOwogCQkJCQluZXdRdWV1ZS5hZGRFbGVtZW50KGxhc3RFbGVtZW50KTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkJCQlpID0gaSArIDE7IC8vIHNraXAgewogCQkJCSAgICBFbGVtZW50IGVsZW0gPSBuZXcgRWxlbWVudChuYW1lLCBucyk7CiAJCQkJCWFkZEVsZW1lbnQoZWxlbSk7Ci0JCQkJCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIlN0YXJ0IGFuIG5ldyBlbGVtZW50IDogIiArIG5hbWUpOworCQkJCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJTdGFydCBhbiBuZXcgZWxlbWVudCA6ICIgKyBuYW1lKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wYXJzZXIvUGFyc2VFeGNlcHRpb24uamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wYXJzZXIvUGFyc2VFeGNlcHRpb24uamF2YQppbmRleCA0Y2Y2MWI4Li5jNTlhZmQ4IDEwMDY0NAotLS0gYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vcGFyc2VyL1BhcnNlRXhjZXB0aW9uLmphdmEKKysrIGIvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BhcnNlci9QYXJzZUV4Y2VwdGlvbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICogRXhjZXB0aW9ucyB0aHJvd24gYnkgcGFyc2Vycy4KLSAqIEBhdXRob3IgQ2xlbWVudCBFc2NvZmZpZXIKKyAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOmZlbGl4LWRldkBpbmN1YmF0b3IuYXBhY2hlLm9yZyI+RmVsaXggUHJvamVjdCBUZWFtPC9hPgogICovCiBwdWJsaWMgY2xhc3MgUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vcGFyc2VyL1hNTE1ldGFkYXRhUGFyc2VyLmphdmEgYi9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vcGFyc2VyL1hNTE1ldGFkYXRhUGFyc2VyLmphdmEKaW5kZXggZmU4OTY5MC4uM2NjOTFiZCAxMDA2NDQKLS0tIGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BhcnNlci9YTUxNZXRhZGF0YVBhcnNlci5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wYXJzZXIvWE1MTWV0YWRhdGFQYXJzZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5tZXRhZGF0YS5BdHRyaWJ1dGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5tZXRhZGF0YS5FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luLklwb2pvUGx1Z2luQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi5JUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKIGltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKIGltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwpAQCAtNTcsNyArNTcsNyBAQAogCSAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjZW5kRG9jdW1lbnQoKQogCSAqLwogCXB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIkVuZCBvZiB0aGUgWE1MIHBhcnNpbmcsICIgKyBtX2VsZW1lbnRzLmxlbmd0aCArICIgcHJpbWFyeSBlbGVtZW50cyBmb3VuZCIpOworCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJFbmQgb2YgdGhlIFhNTCBwYXJzaW5nLCAiICsgbV9lbGVtZW50cy5sZW5ndGggKyAiIHByaW1hcnkgZWxlbWVudHMgZm91bmQiKTsKIAogCX0KIApAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBuYW1lIGlzIGNvbnNpdGVudCB3aXRoIHRoZSBuYW1lIG9mIHRoaXMgZW5kIHRhZwogICAgICAgICBpZiAoIWxhc3RFbGVtZW50LmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKHFOYW1lKSAmJiAhbGFzdEVsZW1lbnQuZ2V0TmFtZVNwYWNlKCkuZXF1YWxzKG5hbWVzcGFjZVVSSSkpIHsKLSAgICAgICAgCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuU0VWRVJFLCAiUGFyc2UgZXJyb3Igd2hlbiBlbmRpbmcgYW4gZWxlbWVudCA6ICIgKyBxTmFtZSArICIgWyIgKyBuYW1lc3BhY2VVUkkgKyAiXSIpOworICAgICAgICAJSVBvam9QbHVnaW5Db25maWd1cmF0aW9uLmdldExvZ2dlcigpLmxvZyhMZXZlbC5TRVZFUkUsICJQYXJzZSBlcnJvciB3aGVuIGVuZGluZyBhbiBlbGVtZW50IDogIiArIHFOYW1lICsgIiBbIiArIG5hbWVzcGFjZVVSSSArICJdIik7CiAgICAgICAgIAl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKCJQYXJzZSBlcnJvciB3aGVuIGVuZGluZyBhbiBlbGVtZW50IDogIiArIHFOYW1lICsgIiBbIiArIG5hbWVzcGFjZVVSSSArICJdIik7CiAgICAgICAgIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBACiAJICogQHNlZSBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciNzdGFydERvY3VtZW50KCkKIAkgKi8KIAlwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIlN0YXJ0IG9mIHRoZSBYTUwgcGFyc2luZyIpOworCQlJUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyKCkubG9nKExldmVsLklORk8sICJTdGFydCBvZiB0aGUgWE1MIHBhcnNpbmciKTsKIAogCX0KIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJICovCiAJcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUsCiAJCQlTdHJpbmcgcU5hbWUsIEF0dHJpYnV0ZXMgYXR0cykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCUlwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIkFuIFhNTCB0YWcgd2FzIG9wZW5lbmQgOiAiICsgbG9jYWxOYW1lICsgIiBbIiArIG5hbWVzcGFjZVVSSSArICJdIik7CisJCUlQb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5nZXRMb2dnZXIoKS5sb2coTGV2ZWwuSU5GTywgIkFuIFhNTCB0YWcgd2FzIG9wZW5lbmQgOiAiICsgbG9jYWxOYW1lICsgIiBbIiArIG5hbWVzcGFjZVVSSSArICJdIik7CiAKICAgICAgICAgRWxlbWVudCBlbGVtID0gbmV3IEVsZW1lbnQobG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOyAgICAgCiAgICAgICAgIApkaWZmIC0tZ2l0IGEvb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BsdWdpbi9JcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uamF2YSBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wbHVnaW4vSVBvam9QbHVnaW5Db25maWd1cmF0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BsdWdpbi9JcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uamF2YQpyZW5hbWUgdG8gb3JnLmFwYWNoZS5mZWxpeC5pcG9qby5wbHVnaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L2lwb2pvL3BsdWdpbi9JUG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24uamF2YQppbmRleCAyNDM5OTkzLi5iODFlNWUyIDEwMDY0NAotLS0gYS9vcmcuYXBhY2hlLmZlbGl4Lmlwb2pvLnBsdWdpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvaXBvam8vcGx1Z2luL0lwb2pvUGx1Z2luQ29uZmlndXJhdGlvbi5qYXZhCisrKyBiL29yZy5hcGFjaGUuZmVsaXguaXBvam8ucGx1Z2luL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9mZWxpeC9pcG9qby9wbHVnaW4vSVBvam9QbHVnaW5Db25maWd1cmF0aW9uLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiAKLXB1YmxpYyBjbGFzcyBJcG9qb1BsdWdpbkNvbmZpZ3VyYXRpb24geworcHVibGljIGNsYXNzIElQb2pvUGx1Z2luQ29uZmlndXJhdGlvbiB7CiAKIAlwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nZ2VyOwogCQo=