ZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlLy5jdnNpZ25vcmUgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZThiNzNmLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanB0XzEuMC4wLioKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlLy5wcm9qZWN0IGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjExYWYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzBiNGJjLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzFlMjYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIC0gUnVudGltZQotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlIENvcnBvcmF0aW9uLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotTWFyY2ggMTcsIDIwMDVcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTQ4MmVjLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmFzc2VtYmx5LmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4yLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIGltYWdlPSJlY2xpcHNlX3VwZGF0ZV8xMjAuanBnIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMiLz4KLSAgICAgIDxkaXNjb3ZlcnkgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5hc3NlbWJseS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NzA2MC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuYXNzZW1ibHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkphbnVhcnkgMjgsIDIwMDU8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+PC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvLnByb2plY3QgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YTJiZjUuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LnBhdGNoPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4MWZiMi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcKLXNyYy5pbmNsdWRlcyA9IGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9idWlsZG5vdGVzX29yZy5lY2xpcHNlLmpwdC5wYXRjaC5odG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2J1aWxkbm90ZXNfb3JnLmVjbGlwc2UuanB0LnBhdGNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMTE1ZjQuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2J1aWxkbm90ZXNfb3JnLmVjbGlwc2UuanB0LnBhdGNoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08IWRvY3R5cGUgaHRtbCBwdWJsaWMgIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW4iPgotPGh0bWw+Ci0KLTxoZWFkPgotICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0gICA8bWV0YSBuYW1lPSJCdWlsZCIgY29udGVudD0iQnVpbGQiPgotICAgPHRpdGxlPkphdmEgUGVyc2lzdGVuY2UgVG9vbHMgKEpUUCkgMS4wLjIgUGF0Y2hlczwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5PgotCi08aDE+SlRQIDIuMC4yIFBhdGNoZXM8L2gxPgotCi08aDI+RmVhdHVyZSBQYXRjaGVkOiBvcmcuZWNsaXBzZS5qcHQucGF0Y2g8L2gyPgotPGgzPlBsdWdpbihzKSByZXBsYWNlZDo8L2gzPgotPHVsPjxsaT5vcmcuZWNsaXBzZS5qcHQuZ2VuPC9saT48L3VsPgotPHA+QnVnIDxhIGhyZWY9J2h0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy8yMjAyOTcnPjIyMDI5NzwvYT4uIEVudGl0eSBnZW5lcmF0aW9uIGNyZWF0ZXMgRW1iZWRkYWJsZXMgd2l0aCBjb21waWxlIGVycm9ycyBpbiBzb21lIGNhc2VzLjwvcD4KLQotCi08L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvZXBsLXYxMC5odG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9mZWF0dXJlLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQucGF0Y2gvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQ1N2VhLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPUphdmEgUGVyc2lzdGVuY2UgVG9vbHMgKEpUUCkgUGF0Y2hlcwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVwKLVBhdGNoKHMpIGZvciBKYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSBUb29scy4gXG5cCi1TZWUgYnVnIDIyMDI5NyAoaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvMjIwMjk3KSBFbnRpdHkgZ2VuZXJhdGlvbiBjcmVhdGVzIEVtYmVkZGFibGVzIHdpdGggY29tcGlsZSBlcnJvcnMgaW4gc29tZSBjYXNlcyBcblwKLQotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYtMDggT3JhY2xlIENvcnBvcmF0aW9uLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2ZlYXR1cmUueG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmFlOTJiLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5wYXRjaCIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjAuMi5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3BhdGNoZXMvIj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSJXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUGF0Y2hlcyIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvcGF0Y2hlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmpwdC5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuMi52MjAwODAyMTQwMTAwLTc3LTdfQ1lRQ0QyQ2FMWUNIQ0QiIHBhdGNoPSJ0cnVlIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmdlbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2xpY2Vuc2UuaHRtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5wYXRjaC9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDcwNjAuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnBhdGNoL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SmFudWFyeSAyOCwgMjAwNTwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST48L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvLmN2c2lnbm9yZSBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyYWJmNy4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSouYmluLmRpc3QuemlwCi1idWlsZC54bWwKLWZlYXR1cmVzCi1wbHVnaW5zCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrLy5wcm9qZWN0IGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnNkay8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIxZDQ1My4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LnNkazwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvYnVpbGQucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwMDkzOS4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnNkay9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnNkay9lcGwtdjEwLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2ZlYXR1cmUucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWU0NDc0Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgcHJvamVjdCBTREsKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgcHJvamVjdCBTREsKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZSBDb3Jwb3JhdGlvbi5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvZmVhdHVyZS54bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2YxZmU1Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5zZGsvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuc2RrIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjIuMS4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiCi0gICAgICBwbHVnaW49Im9yZy5lY2xpcHNlLmpwdCIKLSAgICAgIGltYWdlPSJlY2xpcHNlX3VwZGF0ZV8xMjAuanBnIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMiLz4KLSAgICAgIDxkaXNjb3ZlcnkgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnNkay9saWNlbnNlLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhYmZiNC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuc2RrL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS8uY3ZzaWdub3JlIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0NDY5My4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0qLmJpbi5kaXN0LnppcAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS5qcHQudGVzdHNfMS4wLjAuKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlLy5wcm9qZWN0IGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNDg5OWMuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdhY2I2NS4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gTWF5IDI3IDE1OjExOjA1IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3Njk0Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4ZmVmMi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBwcm9qZWN0IFRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUgQ29ycG9yYXRpb24uXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2IwMzcyLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4yLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvbGljZW5zZS5odG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmFzc2VtYmx5LmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5hc3NlbWJseS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLy5jdnNpZ25vcmUgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0NDY5My4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotKi5iaW4uZGlzdC56aXAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanB0LnRlc3RzXzEuMC4wLioKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvLnByb2plY3QgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWRkZTYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3YWNiNjUuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMjcgMTU6MTE6MDUgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0NzY5NC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy9lcGwtdjEwLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzL2ZlYXR1cmUucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNThmZTYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9RGFsaSBKYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSBwcm9qZWN0IFRlc3RzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249RGFsaSBKYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSBwcm9qZWN0IFRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUgQ29ycG9yYXRpb24uXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvZmVhdHVyZS54bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMGZhNDQuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LnRlc3RzIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjIuMS4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgIDwvdXJsPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy9saWNlbnNlLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0NTk4Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53M2Mub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDQpaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLmh0bWwgLS0+Ci08SFRNTD48SEVBRD48VElUTEU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L1RJVExFPgotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPE1FVEEgY29udGVudD0iTVNIVE1MIDYuMDAuMjgwMC4xNDc5IiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+Ci08Qk9EWSBsYW5nPUVOLVVTIHZMaW5rPXB1cnBsZSBsaW5rPWJsdWU+Ci08SDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9IMj4KLTxQPkp1bmUgMDYsIDIwMDc8L1A+Ci08SDM+VXNhZ2UgT2YgQ29udGVudDwvSDM+Ci08UD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gCi1BTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuIFVTRSBPRiAKLVRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgCi1CRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIAotQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIAotQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAotQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgCi1NQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L1A+Ci08SDM+QXBwbGljYWJsZSBMaWNlbnNlczwvSDM+Ci08UD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgCi1Gb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgCi1QdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8QSAKLWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotPFA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgCi0oIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIAotYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L1A+Ci08UD5Db250ZW50IG1heSBiZSBhcHBvcnRpb25lZCBpbnRvIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgCi0oIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLiBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgCi1QbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiBGaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSAKLWNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIAotYXNzb2NpYXRlZCB3aXRoIGEgRmVhdHVyZS4gUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyAKLW5hbWVkICJwbHVnaW5zIiBhbmQgRmVhdHVyZXMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgbmFtZWQgImZlYXR1cmVzIi48L1A+Ci08UD5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWQgCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCAKLUZlYXR1cmVzLjwvUD4KLTxQPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIAotaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgCi1GZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAKLSgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IAotZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgCi1sb2NhdGlvbnM6PC9QPgotPFVMPgotICA8TEk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5IAotICA8TEk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMgCi0gIDxMST5TdWJkaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnMgCi0gIDxMST5GZWF0dXJlIGRpcmVjdG9yaWVzIDwvTEk+PC9VTD4KLTxQPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCAKLXVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSAKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCAKLUZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gCi1sb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgCi1maWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgCi1VcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyAKLWFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgCi1kaXJlY3RvcnkuPC9QPgotPFA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgCi1PUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuIFNPTUUgT0YgVEhFU0UgCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvUD4KLTxVTD4KLSAgPExJPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KSAKLQotICA8TEk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L0E+KSAKLQotICA8TEk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvQT4pIAotCi0gIDxMST5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9BPikgCi0gIDwvTEk+Ci0gICAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC8uY3ZzaWdub3JlIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0Ly5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlOGI3M2YuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0Ly5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2UuanB0XzEuMC4wLioKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC8ucHJvamVjdCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdhYWVjMi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQ8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvYnVpbGQucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzBiNGJjLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwotICAgICAgICAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0L2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9lcGwtdjEwLmh0bWwgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0L2ZlYXR1cmUucHJvcGVydGllcyBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOGRmZDcuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0L2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSBQcm9qZWN0Ci0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSBQcm9qZWN0IFRvb2xzIC0gUnVudGltZQotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBPcmFjbGUgQ29ycG9yYXRpb24uXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1NYXJjaCAxNywgMjAwNVxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9mZWF0dXJlLnhtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzZjkzZi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIHBsdWdpbj0ib3JnLmVjbGlwc2UuanB0IgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcyIvPgotICAgICAgPGRpc2NvdmVyeSBsYWJlbD0iV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFVwZGF0ZXMiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMiLz4KLSAgIDwvdXJsPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdCIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0L2xpY2Vuc2UuaHRtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDcwNjAuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0L2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SmFudWFyeSAyOCwgMjAwNTwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST48L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS8uY3ZzaWdub3JlIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMmFiZjcuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSouYmluLmRpc3QuemlwCi1idWlsZC54bWwKLWZlYXR1cmVzCi1wbHVnaW5zCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MDEzNzIuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwMDkzOS4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjRkZDY5Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBTREsKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgcHJvamVjdCBTREsKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZSBDb3Jwb3JhdGlvbi5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzZTM3Mi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHRfc2RrLmFzc2VtYmx5LmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4yLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIGltYWdlPSJlY2xpcHNlX3VwZGF0ZV8xMjAuanBnIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMiLz4KLSAgICAgIDxkaXNjb3ZlcnkgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICA8L3VybD4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2Fzc2VtYmx5L2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuYXNzZW1ibHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YWJmYjQuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5hc3NlbWJseS5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC8uY3ZzaWdub3JlIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0MDFhMi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLmpwdF8xLjAuMC4qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvLnByb2plY3QgYi9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxYjA0Yy4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlYzI5ZC4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gTWF5IDI3IDE1OjEwOjA5IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L01FVEEtSU5GL01BTklGRVNULk1GIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTNiYmQuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qcHQ7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDIuMS4wLnF1YWxpZmllcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9hYm91dC5odG1sIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2MDZiMS4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQuaW5pIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODhhMzI1Li4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1lY2xpcHNlMzIuZ2lmCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAodHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAidGlwc0FuZFRyaWNrc0hyZWYiIGNvbnRhaW5zIHRoZSBIZWxwIHRvcGljIGhyZWYgdG8gYSB0aXBzIGFuZCB0cmlja3MgcGFnZSAKLSMgb3B0aW9uYWwKLXRpcHNBbmRUcmlja3NIcmVmPS9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGlwc19hbmRfdHJpY2tzLmh0bQotCi0KZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2Fib3V0Lm1hcHBpbmdzIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGFhYjQuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQucHJvcGVydGllcyBiL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3NGExODYuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotYmx1cmI9RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDYuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYnVpbGQucHJvcGVydGllcyBiL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2ZiMGUuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5pbmksXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5tYXBwaW5ncyxcCi0gICAgICAgICAgICAgICBhYm91dC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2UzMi5naWYsXAotICAgICAgICAgICAgICAgZWNsaXBzZTMyLnBuZyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBjb21wb25lbnQueG1sCmRpZmYgLS1naXQgYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9jb21wb25lbnQueG1sIGIvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFmMTMzZi4uMDAwMDAwMAotLS0gYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjb21wb25lbnQgIHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLmpwdCI+Ci08ZGVzY3JpcHRpb24gdXJsPSIiPjwvZGVzY3JpcHRpb24+Ci08Y29tcG9uZW50LWRlcGVuZHMgdW5yZXN0cmljdGVkPSJ0cnVlIj48L2NvbXBvbmVudC1kZXBlbmRzPgotPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0IiBmcmFnbWVudD0iZmFsc2UiLz4KLTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpwdC5jb3JlIiBmcmFnbWVudD0iZmFsc2UiLz4KLTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpwdC5kYiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQuZGIudWkiIGZyYWdtZW50PSJmYWxzZSIvPgotPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0LmdlbiIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQudWkiIGZyYWdtZW50PSJmYWxzZSIvPgotPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0LnV0aWxpdHkiIGZyYWdtZW50PSJmYWxzZSIvPgotPC9jb21wb25lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvZWNsaXBzZTMyLmdpZiBiL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2VjbGlwc2UzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YWQ3Y2MuLjAwMDAwMDAKLS0tIGEvYXNzZW1ibHkvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQvZWNsaXBzZTMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2VjbGlwc2UzMi5wbmcgYi9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9lY2xpcHNlMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjhmYWMxLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L2VjbGlwc2UzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hc3NlbWJseS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC9wbHVnaW4ucHJvcGVydGllcyBiL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2MwNTVhLi4wMDAwMDAwCi0tLSBhL2Fzc2VtYmx5L3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0L3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wbHVnaW5OYW1lID0gRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLy5wcm9qZWN0IGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2YxOWIxLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjU4MzcuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMjcgMTU6MTA6NDcgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwMDkzOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTE0ZTM4Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQgKE9wdGlvbmFsKQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZSBDb3Jwb3JhdGlvbi5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhNDAyZi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICAgICA8ZGlzY292ZXJ5IGxhYmVsPSJXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgVXBkYXRlcyIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcyIvPgotICAgICAgPGRpc2NvdmVyeSBsYWJlbD0iRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIFVwZGF0ZXMiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qcHQuZmVhdHVyZSIgdmVyc2lvbj0iMy4wLjAiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzczNzIuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pIAotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvQT4pIAotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pIAotCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0KLSAgPExJPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L0E+KSAKLSAgPC9MST4KLSAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotPFA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiAKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIAotcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIAotY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9QPgotPEgzPkNyeXB0b2dyYXBoeTwvSDM+Ci08UD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciAKLXJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgCi1lbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgCi1jb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCAKLXRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L1A+PC9CT0RZPjwvSFRNTD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTE2ZGYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08cD5KdW5lIDA2LCAyMDA3PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlZTM2YS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1lY2xpcHNlMzIuZ2lmCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGMwYTllLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1KYXZhIFBlcnNpc3RlbmNlIEFQSSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGNmY2Q2Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0LmluaSxcCi0gICAgICAgICAgICAgICBhYm91dC5tYXBwaW5ncyxcCi0gICAgICAgICAgICAgICBhYm91dC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2UzMi5naWYsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzcmMvKiosXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZTMyLmdpZiBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmFkN2NjLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2UzMi5wbmcgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZTMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhZTQ5ZC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZTMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjFkNTAuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBkNWYxYy4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWUgPSBKYXZhIFBlcnNpc3RlbmNlIEFQSSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYWJlNjYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Ci08bGluayByZWw9RmlsZS1MaXN0Ci1ocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgotPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgotICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+Ci0gIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KLSAgPG86UGFnZXM+NDwvbzpQYWdlcz4KLSAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+Ci0gICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KLSAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KLSAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KLSA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Ci0gPHc6V29yZERvY3VtZW50PgotICA8dzpUcmFja1JldmlzaW9ucy8+Ci0gPC93OldvcmREb2N1bWVudD4KLTwveG1sPjwhW2VuZGlmXS0tPgotPHN0eWxlPgotPCEtLQotIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KLUBmb250LWZhY2UKLQl7Zm9udC1mYW1pbHk6VGFob21hOwotCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OwotCW1zby1mb250LWNoYXJzZXQ6MDsKLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKLQltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKLQltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLwotcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAotCXttc28tc3R5bGUtcGFyZW50OiIiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAKLQl7bWFyZ2luLXJpZ2h0OjBpbjsKLQltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKLQltYXJnaW4tbGVmdDowaW47Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAotCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjguMHB0OwotCWZvbnQtZmFtaWx5OlRhaG9tYTsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1AcGFnZSBTZWN0aW9uMQotCXtzaXplOjguNWluIDExLjBpbjsKLQltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKLQltc28taGVhZGVyLW1hcmdpbjouNWluOwotCW1zby1mb290ZXItbWFyZ2luOi41aW47Ci0JbXNvLXBhcGVyLXNvdXJjZTowO30KLWRpdi5TZWN0aW9uMQotCXtwYWdlOlNlY3Rpb24xO30KLS0tPgotPC9zdHlsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgotCi08ZGl2IGNsYXNzPVNlY3Rpb24xPgotCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Ci08L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKLVRIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCi1SRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgotZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAotYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCi1pZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCi1Qcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KLXdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKLW9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCi1kaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobwotcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKLWEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgotc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi1Db250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKLWZvcm0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0Ci1hbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCi1vZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAotYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KLWFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKLWxpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKLVJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCi10aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci1yaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKLWxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Ci10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAotaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQotdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAotcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgotdGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKLVByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KLTwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotaXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCi1lZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCi1hbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQotYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKLWVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCi1hcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKLXN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKLUNvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKLXN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKLW1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKLWNvZGUgZm9ybTo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCi1jb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Ci1jb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKLW9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCi1zdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5Ci1hY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCi1hbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCi1wcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCi1saWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAotQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKLUNvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgotbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KLXRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0Ci1vZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKLXJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCi1Db250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgotdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCi1pbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQotQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLXdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCi1zZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKLWNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQotQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCi1XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAotTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKLXJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCi1jb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCi1USEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCi1USEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAotb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKLWVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKLW1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCi1hZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCi1hbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKLVJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKLXN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLXNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKLXBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCi1yaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCi1SZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKLVJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCi1jb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAotU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCi10aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAotQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KLXNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLShpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKLWluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCi1leHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90Ci1leHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKLVN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcwotQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcwotaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+Ci0KLTwvZGl2PgotCi08L2JvZHk+Ci0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYWIxMjUuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIC0gRWNsaXBzZUxpbmsgU3VwcG9ydCAoT3B0aW9uYWwpCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgemlwcyBmb3IgSlBBIEVjbGlwc2VMaW5rIFN1cHBvcnQKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZSBDb3Jwb3JhdGlvbi5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTE2ZGYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08cD5KdW5lIDA2LCAyMDA3PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlZTM2YS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1lY2xpcHNlMzIuZ2lmCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGMwYTllLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1KYXZhIFBlcnNpc3RlbmNlIEFQSSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDUuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGNmY2Q2Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0LmluaSxcCi0gICAgICAgICAgICAgICBhYm91dC5tYXBwaW5ncyxcCi0gICAgICAgICAgICAgICBhYm91dC5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2UzMi5naWYsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzcmMvKiosXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLmdpZiBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmFkN2NjLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2UzMi5wbmcgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhZTQ5ZC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjFkNTAuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBkNWYxYy4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWUgPSBKYXZhIFBlcnNpc3RlbmNlIEFQSSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjVkM2QuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1mZWF0dXJlLnRlbXAuZm9sZGVyCi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZV8xLjAuMS4qCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmOTE1Ny4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjN2Q0Yi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMjcgMTU6MDk6NTkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDc5Y2NiLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmtfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZwotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmtfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmtfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjYTAzOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQgU0RLIChPcHRpb25hbCkKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIFByb2plY3QKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVNvdXJjZSBjb2RlIGFyY2hpdmVzIGZvciBEYWxpIEphdmEgUGVyc2lzdGVuY2UgLSBFY2xpcHNlTGluayBTdXBwb3J0Ci0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNi0wOSBPcmFjbGUgQ29ycG9yYXRpb24uXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGlua19zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwZjc2Yi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlIgotICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjMuMC4wLnF1YWxpZmllciIKLSAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuZmVhdHVyZS5zb3VyY2UiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmtfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzc3MzcyLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmtfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLy5jdnNpZ25vcmUgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLy5wcm9qZWN0IGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGViMmYwLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdC5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjU4MzcuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMjcgMTU6MTA6NDcgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwMDkzOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbCxcCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGRmOTA5Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scwotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlIENvcnBvcmF0aW9uLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZlNDU2Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICAgICA8ZGlzY292ZXJ5IGxhYmVsPSJXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgVXBkYXRlcyIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcyIvPgotICAgICAgPGRpc2NvdmVyeSBsYWJlbD0iRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIFVwZGF0ZXMiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuZW5hYmxlbWVudC5mZWF0dXJlIiB2ZXJzaW9uPSIxLjcuMCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsZGV2dG9vbHMuZmVhdHVyZSIgdmVyc2lvbj0iMS43LjAiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5mZWF0dXJlIiB2ZXJzaW9uPSIxLjcuMCIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC51dGlsaXR5IgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmRiIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmRiLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmdlbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5jb3JlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmRvYy51c2VyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjMuMi4wLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sYW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjIuMS4wLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUub3JvIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjIuMC44LnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5qZG9tIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjEuMC4wLnF1YWxpZmllciIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUudmVsb2NpdHkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMS41LjAucXVhbGlmaWVyIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvbGljZW5zZS5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3NzM3Mi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lmh0bWwgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MTZkZi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0KLTxwPkp1bmUgMDYsIDIwMDc8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50LjwvcD4KLQotPGgzPlNvdXJjZSBDb2RlPC9oMz4KLTxwPlRoaXMgcGx1Zy1pbiBjb250YWlucyBzb3VyY2UgY29kZSB6aXAgZmlsZXMgKCZxdW90O1NvdXJjZSBaaXBzJnF1b3Q7KSB0aGF0IGNvcnJlc3BvbmQgdG8gYmluYXJ5IGNvbnRlbnQgaW4gb3RoZXIgcGx1Zy1pbnMuIFRoZXNlIFNvdXJjZSBaaXBzIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBkaWZmZXJlbnQgbGljZW5zZQotYWdyZWVtZW50cyBhbmQvb3Igbm90aWNlcy4gRGV0YWlscyBhYm91dCB0aGVzZSBsaWNlbnNlIGFncmVlbWVudHMgYW5kIG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiAmcXVvdDthYm91dC5odG1sJnF1b3Q7IGZpbGVzICgmcXVvdDtBYm91dHMmcXVvdDspIGxvY2F0ZWQgaW4gc3ViLWRpcmVjdG9yaWVzIGluIHRoZQotc3JjLyBkaXJlY3Rvcnkgb2YgdGhpcyBwbHVnLWluLiBTdWNoIEFib3V0cyBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNvdXJjZSBaaXBzIGluIHRoYXQgZGlyZWN0b3J5LCBub3QgdGhlIEVQTC48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVlMzZhLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPWVjbGlwc2UzMi5naWYKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncwotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcwotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0wPUBidWlsZEAKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5wcm9wZXJ0aWVzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NDE3ZmYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkgVG9vbHMgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBFY2xpcHNlIGNvbnRyaWJ1dG9ycyBhbmQgb3RoZXJzIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTk1MjliLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCBlY2xpcHNlMzIuZ2lmLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlMzIuZ2lmIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2UzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YWQ3Y2MuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2UzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZTMyLnBuZyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGFlNDlkLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lY2xpcHNlMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lcGwtdjEwLmh0bWwgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvbGljZW5zZS5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiMWQ1MC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5KdW5lIDA2LCAyMDA3PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci0KLTxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCi1jb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KLQotPGgzPkNyeXB0b2dyYXBoeTwvaDM+Ci0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KLSAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAotICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+Ci0gICAKLTxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ4NTQ3Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wbHVnaW5OYW1lID0gRGFsaSBKYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSBUb29scwotcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYwZGFkMy4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1YTA0Ni4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgZmVhdHVyZS5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1EYWxpIEphdmEgUGVyc2lzdGVuY2UgQVBJIChKUEEpIFRvb2xzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiAyMDA4IE9yYWNsZSBDb3Jwb3JhdGlvbi5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvbGljZW5zZS5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzRhNDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPkp1bmUgMDYsIDIwMDc8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OTE2ZGYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi08cD5KdW5lIDA2LCAyMDA3PC9wPgkKLTxoMz5MaWNlbnNlPC9oMz4KLQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQotRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5Ci1hcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudC48L3A+Ci0KLTxoMz5Tb3VyY2UgQ29kZTwvaDM+Ci08cD5UaGlzIHBsdWctaW4gY29udGFpbnMgc291cmNlIGNvZGUgemlwIGZpbGVzICgmcXVvdDtTb3VyY2UgWmlwcyZxdW90OykgdGhhdCBjb3JyZXNwb25kIHRvIGJpbmFyeSBjb250ZW50IGluIG90aGVyIHBsdWctaW5zLiBUaGVzZSBTb3VyY2UgWmlwcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UKLWFncmVlbWVudHMgYW5kL29yIG5vdGljZXMuIERldGFpbHMgYWJvdXQgdGhlc2UgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBub3RpY2VzIGFyZSBjb250YWluZWQgaW4gJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyBmaWxlcyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KSBsb2NhdGVkIGluIHN1Yi1kaXJlY3RvcmllcyBpbiB0aGUKLXNyYy8gZGlyZWN0b3J5IG9mIHRoaXMgcGx1Zy1pbi4gU3VjaCBBYm91dHMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb3VyY2UgWmlwcyBpbiB0aGF0IGRpcmVjdG9yeSwgbm90IHRoZSBFUEwuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlZTM2YS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1lY2xpcHNlMzIuZ2lmCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAobm90IHRyYW5zbGF0ZWQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgIndlbGNvbWVQYWdlIiBjb250YWlucyBwYXRoIHRvIHdlbGNvbWUgcGFnZSAoc3BlY2lhbCBYTUwtYmFzZWQgZm9ybWF0KQotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGVyc3BlY3RpdmUiIGNvbnRhaW5zIHRoZSBpZCBvZiB0aGUgcGVyc3BlY3RpdmUgaW4gd2hpY2ggdGhlCi0jIHdlbGNvbWUgcGFnZSBpcyB0byBiZSBvcGVuZWQuCi0jIG9wdGlvbmFsCi0KLQotCi0KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI4MzkwYS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRACmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQxN2ZmLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotIwotIyBEbyBub3QgdHJhbnNsYXRlIGFueSB2YWx1ZXMgc3Vycm91bmRlZCBieSB7fQotCi1ibHVyYj1EYWxpIEphdmEgUGVyc2lzdGVuY2UgQVBJIChKUEEpIFRvb2xzIFNvdXJjZVxuXAotXG5cCi1WZXJzaW9uOiB7ZmVhdHVyZVZlcnNpb259XG5cCi1CdWlsZCBpZDogezB9XG5cCi1cblwKLShjKSBDb3B5cmlnaHQgRWNsaXBzZSBjb250cmlidXRvcnMgYW5kIG90aGVycyAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2J1aWxkLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U5NTI5Yi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gYWJvdXQuaHRtbCwgYWJvdXQuaW5pLCBhYm91dC5tYXBwaW5ncywgYWJvdXQucHJvcGVydGllcywgZWNsaXBzZTMyLmdpZiwgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLmdpZiBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmFkN2NjLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2UzMi5wbmcgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhZTQ5ZC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZWNsaXBzZTMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIyYWQyOS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjFkNTAuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgCi0gIDxMST5Db21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwiPmh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCk8L0E+Ci0gIDwvTEk+Ci08L1VMPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0ODU0Ny4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSA9IERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkgVG9vbHMKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ODdjLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYnVpbGQueG1sCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNzYwZjIuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1Yjg0YS4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIE1heSAyNyAxNToxMToxNyBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmE0ZGNlLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCi0gICAgICAgICAgICAgICBlY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmE0YzQzLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHQudGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotIyBUT1JFVklFVyAtIHVwZGF0ZVNpdGVOYW1lCi11cGRhdGVTaXRlTmFtZT1XZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgVXBkYXRlcwotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIFRvb2xzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUgQ29ycG9yYXRpb24uXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNDMzNmIuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIEpVbml0IFRlc3RzIgotICAgICAgdmVyc2lvbj0iMy4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iRWNsaXBzZS5vcmciPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSJsaWNlbnNlLmh0bWwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmNvcmUudGVzdHMuZXh0ZW5zaW9uLnJlc291cmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdC50ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0LnRlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzNjVkM2QuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1mZWF0dXJlLnRlbXAuZm9sZGVyCi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZV8xLjAuMS4qCmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkYTc1MC4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjN2Q0Yi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBNYXkgMjcgMTU6MDk6NTkgRURUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDdhYjhkLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZwotCi1nZW5lcmF0ZS5mZWF0dXJlQG9yZy5lY2xpcHNlLmpwdC5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS5qcHQuZmVhdHVyZQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRiNTUzNi4uMDAwMDAwMAotLS0gYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPURhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBQbHVnLWluIFNESwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gUHJvamVjdAotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249U291cmNlIGNvZGUgYXJjaGl2ZXMgZm9yIERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scwotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDYtMDkgT3JhY2xlIENvcnBvcmF0aW9uLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOWQ1ZjguLjAwMDAwMDAKLS0tIGEvanBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdF9zZGsuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0ibGljZW5zZS5odG1sIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanB0LmZlYXR1cmUuc291cmNlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpwdC5kb2MuaXN2IgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9qcGEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuanB0X3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzc3MzcyLi4wMDAwMDAwCi0tLSBhL2pwYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5qcHRfc2RrLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAKLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci08UD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgCi1wcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgCi1jb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L1A+Ci08SDM+Q3J5cHRvZ3JhcGh5PC9IMz4KLTxQPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSAKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIAotcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSAKLWVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyAKLWNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIAotdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvUD48L0JPRFk+PC9IVE1MPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nLy5jdnNpZ25vcmUgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0MDFhMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotYnVpbGQueG1sCi1vcmcuZWNsaXBzZS5qcHRfMS4wLjAuKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy8ucHJvamVjdCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhOWJlZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlYzI5ZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jU3VuIE1heSAyNyAxNToxMDowOSBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYTA4YTMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDMuMC4wLnF1YWxpZmllcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvYWJvdXQuaHRtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTYwNmIxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL2Fib3V0LmluaSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkODhiOWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT1pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCi0KLSMgUHJvcGVydHkgImFib3V0SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gcHJvZHVjdCBpbWFnZSAoNTAweDMzMCBvciAxMTV4MTY0KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJhcHBOYW1lIiBjb250YWlucyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiAodHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAidGlwc0FuZFRyaWNrc0hyZWYiIGNvbnRhaW5zIHRoZSBIZWxwIHRvcGljIGhyZWYgdG8gYSB0aXBzIGFuZCB0cmlja3MgcGFnZSAKLSMgb3B0aW9uYWwKLXRpcHNBbmRUcmlja3NIcmVmPS9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGlwc19hbmRfdHJpY2tzLmh0bQotCi0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9hYm91dC5tYXBwaW5ncyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9hYm91dC5tYXBwaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkYWFiNC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL2Fib3V0LnByb3BlcnRpZXMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4MjFlMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotYmx1cmI9RGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBPcmFjbGUgY29udHJpYnV0b3JzIGFuZCBvdGhlcnMgMjAwNiwgMjAwOS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvYnVpbGQucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTA4OWJiLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0LmluaSxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lm1hcHBpbmdzLFwKLSAgICAgICAgICAgICAgIGFib3V0LnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9jb21wb25lbnQueG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMzAxYWUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNvbXBvbmVudCAgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nIj4KLTxkZXNjcmlwdGlvbiB1cmw9IiI+PC9kZXNjcmlwdGlvbj4KLTxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPjwvY29tcG9uZW50LWRlcGVuZHM+Ci08cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmciIGZyYWdtZW50PSJmYWxzZSIvPgotPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0LmNvcmUiIGZyYWdtZW50PSJmYWxzZSIvPgotPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0LmRiIiBmcmFnbWVudD0iZmFsc2UiLz4KLTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpwdC5kYi51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQuZ2VuIiBmcmFnbWVudD0iZmFsc2UiLz4KLTxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpwdC51aSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQudXRpbGl0eSIgZnJhZ21lbnQ9ImZhbHNlIi8+Ci08L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuYnJhbmRpbmcvaWNvbnMvV1RQX2ljb25feDMyX3YyLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjA5YzJhLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmJyYW5kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2FkZDIyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5icmFuZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSA9IERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scwotcHJvdmlkZXJOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS8uY2xhc3NwYXRoIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNGU4NjEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpLy5jdnNpZ25vcmUgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5NmRkNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1AZG90Ci10ZW1wLmZvbGRlcgotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIuLi5hcmdzCi1qYXZhQ29tcGlsZXIuLi5hcmdzLioKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLnByb2plY3QgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZWE1ZGEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LmRiLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE3ZGIxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgSmFuIDE1IDExOjExOjIyIEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDJjMjg2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTdW4gTWF5IDI3IDE0OjU5OjQyIEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5MmJiNi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanB0LmRiLnVpCi1CdW5kbGUtVmVyc2lvbjogMS4xLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IC4KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpwdC5kYi51aS5pbnRlcm5hbDsgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuanB0LnVpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qcHQuZGI7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwxLjIuMCkiLAotIG9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5lZGl0b3IuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kYi5nZW5lcmljLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjEsMi4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvYWJvdXQuaHRtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTUzNGJhLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDAyLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNTY5ODEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0gLgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpL2NvbXBvbmVudC54bWwgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvY29tcG9uZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY2NDhhYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvY29tcG9uZW50LnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGNvbXBvbmVudCAgeG1sbnM9Imh0dHA6Ly9lY2xpcHNlLm9yZy93dHAvcmVsZW5nL3Rvb2xzL2NvbXBvbmVudC1tb2RlbCIgbmFtZT0ib3JnLmVjbGlwc2UuanB0LmRiLnVpIj48ZGVzY3JpcHRpb24gdXJsPSIiPjwvZGVzY3JpcHRpb24+PGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+PC9jb21wb25lbnQtZGVwZW5kcz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQuZGIudWkiIGZyYWdtZW50PSJmYWxzZSIvPjwvY29tcG9uZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3YzE3YS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBEYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgLSBEQiBVSQotcHJvdmlkZXJOYW1lID0gRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0KLQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdWkvaW50ZXJuYWwvRFRQVWlUb29scy5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLnVpL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdWkvaW50ZXJuYWwvRFRQVWlUb29scy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTJiODFlLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi51aS9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3VpL2ludGVybmFsL0RUUFVpVG9vbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnVpLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5JQ29ubmVjdGlvblByb2ZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5JUHJvZmlsZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuUHJvZmlsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kYi5nZW5lcmljLnVpLndpemFyZC5OZXdKREJDRmlsdGVyZWRDUFdpemFyZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLQotLyoqCi0gKiBEVFAgVUkgdG9vbHMKLSAqLwotcHVibGljIGNsYXNzIERUUFVpVG9vbHMgewotCi0JLyoqCi0JICogTGF1bmNoIHRoZSBEVFAgTmV3IENvbm5lY3Rpb24gUHJvZmlsZSB3aXphcmQgdG8gY3JlYXRlIGEgbmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gcHJvZmlsZS4KLQkgKiAKLQkgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhZGRlZCBwcm9maWxlLCBvciBudWxsIGlmIHRoZSB3aXphcmQgd2FzIGNhbmNlbGxlZC4KLQkgKiBUaGUgbmFtZSBjYW4gYmUgdXNlZCB0byBidWlsZCBhIERhbGkgY29ubmVjdGlvbiBwcm9maWxlIGZyb20KLQkgKiBKcHREYlBsdWdpbi5nZXRDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkoKS5idWlsZENvbm5lY3Rpb25Qcm9maWxlKFN0cmluZykuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlTmV3Q29ubmVjdGlvblByb2ZpbGUoKSB7Ci0JCS8vIEZpbHRlciBkYXRhc291cmNlIGNhdGVnb3J5Ci0JCU5ld0pEQkNGaWx0ZXJlZENQV2l6YXJkICB3aXphcmQgPSBuZXcgTmV3SkRCQ0ZpbHRlcmVkQ1BXaXphcmQoKTsKLQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSwgd2l6YXJkKTsKLQkJd2l6YXJkRGlhbG9nLnNldEJsb2NrT25PcGVuKHRydWUpOwotCi0JCUxvY2FsUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IExvY2FsUHJvZmlsZUxpc3RlbmVyKCk7Ci0JCVByb2ZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuYWRkUHJvZmlsZUxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQlTdHJpbmcgbmV3Q1BOYW1lID0gbnVsbDsKLQkJaWYgKHdpemFyZERpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKSB7Ci0JCQkvLyBhc3N1bWUgdGhlIGxhc3QgYWRkZWQgcHJvZmlsZSBpcyB0aGUgb25lIHdlIHdhbnQKLQkJCW5ld0NQTmFtZSA9IGxpc3RlbmVyLmFkZGVkUHJvZmlsZS5nZXROYW1lKCk7Ci0JCX0KLQkJUHJvZmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVQcm9maWxlTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXJldHVybiBuZXdDUE5hbWU7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIERUUCBwcm9maWxlIGxpc3RlbmVyICoqKioqKioqKioKLQotCS8qKgotCSAqIFRoaXMgbGlzdGVuZXIgc2ltcGx5IGhvbGRzIG9uIHRvIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkIGNvbm5lY3Rpb24KLQkgKiBwcm9maWxlLgotCSAqLwotCXN0YXRpYyBjbGFzcyBMb2NhbFByb2ZpbGVMaXN0ZW5lciBpbXBsZW1lbnRzIElQcm9maWxlTGlzdGVuZXIgewotCQlJQ29ubmVjdGlvblByb2ZpbGUgYWRkZWRQcm9maWxlOwotCQkKLQkJcHVibGljIHZvaWQgcHJvZmlsZUFkZGVkKElDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlKSB7Ci0JCQl0aGlzLmFkZGVkUHJvZmlsZSA9IHByb2ZpbGU7Ci0JCX0KLQkKLQkJcHVibGljIHZvaWQgcHJvZmlsZUNoYW5nZWQoSUNvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfQotCQotCQlwdWJsaWMgdm9pZCBwcm9maWxlRGVsZXRlZChJQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JfQotCi0KLS8vCS8vICoqKioqKioqKiogdmlld2VyIGZpbHRlciAqKioqKioqKioqCi0vLwotLy8Jc3RhdGljIGNsYXNzIExvY2FsVmlld2VyRmlsdGVyIGV4dGVuZHMgVmlld2VyRmlsdGVyIHsKLS8vCi0vLwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFCQVNFX0NBVEVHT1JZX0lEID0gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZGIuY2F0ZWdvcnkiOyAvLyROT04tTkxTLTEkCi0vLwotLy8JCUxvY2FsVmlld2VyRmlsdGVyKCkgewotLy8JCQlzdXBlcigpOwotLy8JCX0KLS8vCi0vLwkJQE92ZXJyaWRlCi0vLwkJcHVibGljIGJvb2xlYW4gc2VsZWN0KFZpZXdlciB2aWV3ZXIsIE9iamVjdCBwYXJlbnRFbGVtZW50LCBPYmplY3QgZWxlbWVudCkgewotLy8JCQlDUFdpemFyZE5vZGUgd2l6YXJkTm9kZSA9IChDUFdpemFyZE5vZGUpIGVsZW1lbnQ7Ci0vLwkJCUlQcm9maWxlV2l6YXJkUHJvdmlkZXIgd2l6YXJkUHJvdmlkZXIgPSB3aXphcmROb2RlLmdldFByb3ZpZGVyKCk7Ci0vLwkJCWlmICh3aXphcmRQcm92aWRlciBpbnN0YW5jZW9mIElXaXphcmRDYXRlZ29yeVByb3ZpZGVyKSB7Ci0vLwkJCQlyZXR1cm4gZmFsc2U7Ci0vLwkJCX0KLS8vCQkJSUNhdGVnb3J5IGNhdGVnb3J5ID0gQ29ubmVjdGlvblByb2ZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0UHJvdmlkZXIoCi0vLwkJCQkJCQkoKFByb2ZpbGVXaXphcmRQcm92aWRlcikgd2l6YXJkUHJvdmlkZXIpLmdldFByb2ZpbGUoKSkuZ2V0Q2F0ZWdvcnkoKTsKLS8vCQkJCi0vLwkJCS8vIE9ubHkgZGlzcGxheSB3aXphcmRzIGJlbG9uZyB0byBkYXRhYmFzZSBjYXRlZ29yeQotLy8JCQl3aGlsZSAoY2F0ZWdvcnkgIT0gbnVsbCkgewotLy8JCQkJaWYgKGNhdGVnb3J5LmdldElkKCkuZXF1YWxzKERBVEFCQVNFX0NBVEVHT1JZX0lEKSkgewotLy8JCQkJCXJldHVybiB0cnVlOwotLy8JCQkJfQotLy8JCQkJY2F0ZWdvcnkgPSBjYXRlZ29yeS5nZXRQYXJlbnQoKTsKLS8vCQkJfQotLy8JCQlyZXR1cm4gZmFsc2U7Ci0vLwkJfQotLy8JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvLmNsYXNzcGF0aCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDRlODYxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi8uY3ZzaWdub3JlIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTZkZDcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotQGRvdAotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotamF2YUNvbXBpbGVyLi4uYXJncwotamF2YUNvbXBpbGVyLi4uYXJncy4qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5wcm9qZWN0IGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njc1YTQ4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdC5kYjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRlYmI1Yy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEphbiAxNSAxMToxMTowMiBFU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI5ZDU0NS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jU3VuIE1heSAyNyAxNDo1OToxOCBFRFQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYTcxNTkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpwdC5kYgotQnVuZGxlLVZlcnNpb246IDEuMi4yMDAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qcHQuZGIuSnB0RGJQbHVnaW4KLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQ2xhc3NQYXRoOiAuCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQuamR0LmNsYXNzcGF0aDtidW5kbGUtdmVyc2lvbj0iWzEuMC4xLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLmVkaXRvci5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanB0LnV0aWxpdHk7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanB0LmRiLAotIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7eC1pbnRlcm5hbDo9dHJ1ZQotSW1wb3J0LVBhY2thZ2U6IGNvbS5pYm0uaWN1LnRleHQ7dmVyc2lvbj0iNC4wLjEiCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvYWJvdXQuaHRtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTUzNGJhLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDAyLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9idWlsZC5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NGVhZGEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBPcmFjbGUuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUuIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1qYXZhY1NvdXJjZT0xLjUKLWphdmFjVGFyZ2V0PTEuNQotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IC4sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IC4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9jb21wb25lbnQueG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NGMzOTYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL2NvbXBvbmVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxjb21wb25lbnQgIHhtbG5zPSJodHRwOi8vZWNsaXBzZS5vcmcvd3RwL3JlbGVuZy90b29scy9jb21wb25lbnQtbW9kZWwiIG5hbWU9Im9yZy5lY2xpcHNlLmpwdC5kYiI+PGRlc2NyaXB0aW9uIHVybD0iIj48L2Rlc2NyaXB0aW9uPjxjb21wb25lbnQtZGVwZW5kcyB1bnJlc3RyaWN0ZWQ9InRydWUiPjwvY29tcG9uZW50LWRlcGVuZHM+PHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuanB0LmRiIiBmcmFnbWVudD0iZmFsc2UiLz48L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvcGx1Z2luLnByb3BlcnRpZXMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMzRhMzAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIC0gREIKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCi0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0NhdGFsb2cuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0NhdGFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4Y2NiNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9DYXRhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotLyoqCi0gKiBEYXRhYmFzZSBjYXRhbG9nCi0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDYXRhbG9nIGV4dGVuZHMgU2NoZW1hQ29udGFpbmVyIHsKLQkvLyBub3RoaW5nIHlldAotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29sdW1uLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db2x1bW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhOGYyYy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db2x1bW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LkphdmFUeXBlOwotCi0vKioKLSAqIERhdGFiYXNlIGNvbHVtbgotICogCi0gKiBQcm92aXNpb25hbCBBUEk6IFRoaXMgaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotICogdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZwotICogc3RhYmlsaXR5LiBJdCBpcyBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20KLSAqIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkKLSAqIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29sdW1uIGV4dGVuZHMgRGF0YWJhc2VPYmplY3QgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBjb2x1bW4ncyB0YWJsZS4KLQkgKi8KLQlUYWJsZSBnZXRUYWJsZSgpOwotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cmFpbnRzICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgcGFydCBvZiBpdCdzIHRhYmxlJ3MgcHJpbWFyeSBrZXkuCi0JICovCi0JYm9vbGVhbiBpc1BhcnRPZlByaW1hcnlLZXkoKTsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgcGFydCBvZiBvbmUgb2YgaXQncyB0YWJsZSdzIGZvcmVpZ24ga2V5cy4KLQkgKi8KLQlib29sZWFuIGlzUGFydE9mRm9yZWlnbktleSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBwYXJ0IG9mIGEgdW5pcXVlIGNvbnN0cmFpbnQgZGVmaW5lZCBmb3IgaXRzCi0JICogdGFibGUuCi0JICovCi0JYm9vbGVhbiBpc1BhcnRPZlVuaXF1ZUNvbnN0cmFpbnQoKTsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgbnVsbGFibGUuCi0JICovCi0JYm9vbGVhbiBpc051bGxhYmxlKCk7Ci0KLQotCS8vICoqKioqKioqKiogZGF0YSB0eXBlICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29sdW1uJ3MgZGF0YXR5cGUuCi0JICovCi0JU3RyaW5nIGdldERhdGFUeXBlTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIGNvbHVtbidzIHR5cGUgaXMgbnVtZXJpYy4KLQkgKi8KLQlib29sZWFuIGlzTnVtZXJpYygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBjb2x1bW4ncyBwcmVjaXNpb24gaWYgaXQgaXMgYSBOdW1lcmljYWxEYXRhVHlwZTsKLQkgKiBvdGhlcndpc2UsIHJldHVybiAtMS4KLQkgKi8KLQlwdWJsaWMgaW50IGdldFByZWNpc2lvbigpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBjb2x1bW4ncyBzY2FsZSBpZiBpdCBpcyBhbiBFeGFjdE51bWVyaWNEYXRhVHlwZTsKLQkgKiBvdGhlcndpc2UsIHJldHVybiAtMS4KLQkgKi8KLQlwdWJsaWMgaW50IGdldFNjYWxlKCk7Ci0KLQkvKioKLQkgKiBJZiB0aGUgY29sdW1uIGlzIGEgQ2hhcmFjdGVyU3RyaW5nRGF0YVR5cGUsIHJldHVybiBpdHMgbGVuZ3RoOwotCSAqIG90aGVyd2lzZSwgcmV0dXJuIC0xLgotCSAqLwotCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgY29sdW1uJ3MgZGF0YXR5cGUgaXMgYSBMT0IgdHlwZQotCSAqIChpLmUuIEJMT0IsIENMT0IsIG9yIE5DTE9CKS4KLQkgKi8KLQlib29sZWFuIGlzTE9CKCk7Ci0KLQotCS8vICoqKioqKioqKiogSmF2YSB0eXBlICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiBhIEphdmEgdHlwZSBkZWNsYXJhdGlvbiB0aGF0IGlzIHJlYXNvbmFibHkKLQkgKiBzaW1pbGFyIHRvIHRoZSBjb2x1bW4ncyBkYXRhIHR5cGUuCi0JICovCi0JU3RyaW5nIGdldEphdmFUeXBlRGVjbGFyYXRpb24oKTsKLQotCS8qKgotCSAqIFJldHVybiBhIEphdmEgdHlwZSB0aGF0IGlzIHJlYXNvbmFibHkKLQkgKiBzaW1pbGFyIHRvIHRoZSBjb2x1bW4ncyBkYXRhIHR5cGUuCi0JICovCi0JSmF2YVR5cGUgZ2V0SmF2YVR5cGUoKTsKLQotCS8qKgotCSAqIFJldHVybiBhIEphdmEgdHlwZSBkZWNsYXJhdGlvbiB0aGF0IGlzIHJlYXNvbmFibHkKLQkgKiBzaW1pbGFyIHRvIHRoZSBjb2x1bW4ncyBkYXRhIHR5cGUgYW5kIHN1aXRhYmxlIGZvciB1c2UgYXMgYQotCSAqIHByaW1hcnkga2V5IGZpZWxkLgotCSAqLwotCVN0cmluZyBnZXRQcmltYXJ5S2V5SmF2YVR5cGVEZWNsYXJhdGlvbigpOwotCi0JLyoqCi0JICogUmV0dXJuIGEgSmF2YSB0eXBlIHRoYXQgaXMgcmVhc29uYWJseQotCSAqIHNpbWlsYXIgdG8gdGhlIGNvbHVtbidzIGRhdGEgdHlwZSBhbmQgc3VpdGFibGUgZm9yIHVzZSBhcyBhCi0JICogcHJpbWFyeSBrZXkgZmllbGQuCi0JICovCi0JSmF2YVR5cGUgZ2V0UHJpbWFyeUtleUphdmFUeXBlKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25BZGFwdGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db25uZWN0aW9uQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzI4NDg5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25BZGFwdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotCi0vKioKLSAqIEFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIENvbm5lY3Rpb25MaXN0ZW5lci4KLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGNsYXNzIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotICogdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZwotICogc3RhYmlsaXR5LiBJdCBpcyBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20KLSAqIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkKLSAqIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25BZGFwdGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbkxpc3RlbmVyIHsKLQotCXB1YmxpYyB2b2lkIGFib3V0VG9DbG9zZShDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjbG9zZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBtb2RpZmllZChDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBva1RvQ2xvc2UoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBvcGVuZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgY2F0YWxvZ0NoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgQ2F0YWxvZyBjYXRhbG9nKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzY2hlbWFDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIFNjaGVtYSBzY2hlbWEpIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLQotCXB1YmxpYyB2b2lkIHNlcXVlbmNlQ2hhbmdlZChDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlLCBTZXF1ZW5jZSBzZXF1ZW5jZSkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgdGFibGVDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIFRhYmxlIHRhYmxlKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjb2x1bW5DaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIENvbHVtbiBjb2x1bW4pIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLQotCXB1YmxpYyB2b2lkIGZvcmVpZ25LZXlDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIEZvcmVpZ25LZXkgZm9yZWlnbktleSkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db25uZWN0aW9uTGlzdGVuZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25MaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjNiMDliLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25MaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRXZlbnRMaXN0ZW5lcjsKLQotCi0vKioKLSAqIEEgQ29ubmVjdGlvbkxpc3RlbmVyIGlzIG5vdGlmaWVkIG9mIGFueSBjaGFuZ2VzIHRvIGEgY29ubmVjdGlvbi4KLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LklNYW5hZ2VkQ29ubmVjdGlvbkxpc3RlbmVyCi0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb25MaXN0ZW5lciBleHRlbmRzIEV2ZW50TGlzdGVuZXIgewotCi0JcHVibGljIHZvaWQgb3BlbmVkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUpOwotCXB1YmxpYyB2b2lkIG1vZGlmaWVkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUpOwotCXB1YmxpYyBib29sZWFuIG9rVG9DbG9zZShDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlKTsKLQlwdWJsaWMgdm9pZCBhYm91dFRvQ2xvc2UoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSk7Ci0JcHVibGljIHZvaWQgY2xvc2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUpOwotCi0JcHVibGljIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIERhdGFiYXNlIGRhdGFiYXNlKTsKLQlwdWJsaWMgdm9pZCBjYXRhbG9nQ2hhbmdlZChDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlLCBDYXRhbG9nIGNhdGFsb2cpOwotCXB1YmxpYyB2b2lkIHNjaGVtYUNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgU2NoZW1hIHNjaGVtYSk7Ci0JcHVibGljIHZvaWQgc2VxdWVuY2VDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIFNlcXVlbmNlIHNlcXVlbmNlKTsKLQlwdWJsaWMgdm9pZCB0YWJsZUNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgVGFibGUgdGFibGUpOwotCXB1YmxpYyB2b2lkIGNvbHVtbkNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgQ29sdW1uIGNvbHVtbik7Ci0JcHVibGljIHZvaWQgZm9yZWlnbktleUNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgRm9yZWlnbktleSBmb3JlaWduS2V5KTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29ubmVjdGlvblByb2ZpbGUuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25Qcm9maWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZGU2MmIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29ubmVjdGlvblByb2ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZHJpdmVycy5qZGJjLklKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50czsKLQotLyoqCi0gKiBEYXRhYmFzZSBjb25uZWN0aW9uIHByb2ZpbGUKLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tCi0gKiBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJCi0gKiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENvbm5lY3Rpb25Qcm9maWxlIGV4dGVuZHMgRGF0YWJhc2VPYmplY3QgewotCi0JLy8gKioqKioqKioqKiBwcm9wZXJ0aWVzICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29ubmVjdGlvbiBwcm9maWxlJ3MgZGF0YWJhc2UuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlIGNvbm5lY3Rpb24gcHJvZmlsZSBpcyBpbmFjdGl2ZS4KLQkgKi8KLQlEYXRhYmFzZSBnZXREYXRhYmFzZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIElEIG9mIHRoZSBwcm92aWRlciBtYW5hZ2luZyB0aGUgRFRQIHByb2ZpbGUuCi0JICovCi0JU3RyaW5nIGdldFByb3ZpZGVySUQoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29ubmVjdGlvbiBwcm9maWxlJ3Mgc3RhdGljIElELgotCSAqLwotCVN0cmluZyBnZXRJbnN0YW5jZUlEKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRlZmF1bHQgZGF0YWJhc2UgbmFtZS4KLQkgKi8KLQlTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlIHByb2R1Y3QgbmFtZS4KLQkgKi8KLQlTdHJpbmcgZ2V0RGF0YWJhc2VQcm9kdWN0KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlIHZlbmRvci4KLQkgKi8KLQlTdHJpbmcgZ2V0RGF0YWJhc2VWZW5kb3IoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2UgdmVyc2lvbi4KLQkgKi8KLQlTdHJpbmcgZ2V0RGF0YWJhc2VWZXJzaW9uKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRyaXZlciBjbGFzcyBuYW1lLgotCSAqLwotCVN0cmluZyBnZXREcml2ZXJDbGFzc05hbWUoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGVmYXVsdCBjb25uZWN0aW9uIFVSTC4KLQkgKi8KLQlTdHJpbmcgZ2V0VVJMKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdXNlciBuYW1lLgotCSAqLwotCVN0cmluZyBnZXRVc2VyTmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBkZWZhdWx0IHVzZXIgcGFzc3dvcmQuCi0JICovCi0JU3RyaW5nIGdldFVzZXJQYXNzd29yZCgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBJRCBvZiB0aGUgYXNzb2NpYXRlZCBEcml2ZXIgZGVmaW5pdGlvbi4KLQkgKi8KLQlTdHJpbmcgZ2V0RHJpdmVyRGVmaW5pdGlvbklEKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGphciBsaXN0IGZvciB0aGUgYXNzb2NpYXRlZCBEcml2ZXIgYXMgYSAKLQkgKiBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLgotCSAqLwotCVN0cmluZyBnZXREcml2ZXJKYXJMaXN0KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgRHJpdmVyIGRlZmluaXRpb24uCi0JICovCi0JU3RyaW5nIGdldERyaXZlck5hbWUoKTsKLQotCS8vICoqKioqKioqKiogY29ubmVjdGlvbiAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgcHJvZmlsZSBpcyBlaXRoZXIgY29ubmVjdGVkIHRvIGEgbGl2ZSBkYXRhYmFzZQotCSAqIHNlc3Npb24gb3Igd29ya2luZyBvZmYtbGluZSAoaS5lLiBpdCBoYXMgYWNjZXNzIHRvIG1ldGEtZGF0YSkuCi0JICogQHNlZSBpc0Nvbm5lY3RlZCgpCi0JICogQHNlZSBpc1dvcmtpbmdPZmZsaW5lKCkKLQkgKi8KLQlib29sZWFuIGlzQWN0aXZlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgcHJvZmlsZSBpcyBuZWl0aGVyIGNvbm5lY3RlZCB0byBhIGxpdmUgZGF0YWJhc2UKLQkgKiBzZXNzaW9uIG5vciB3b3JraW5nIG9mZi1saW5lIChpLmUuIGl0IGhhcyBhY2Nlc3MgdG8gbWV0YS1kYXRhKS4KLQkgKiBAc2VlIGlzQWN0aXZlKCkKLQkgKi8KLQlib29sZWFuIGlzSW5hY3RpdmUoKTsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBwcm9maWxlIGlzIGNvbm5lY3RlZCB0byBhIGxpdmUgZGF0YWJhc2Ugc2Vzc2lvbgotCSAqIChpLmUuIHRoZSBtZXRhLWRhdGEgY29tZXMgZnJvbSB0aGUgZGF0YWJhc2UpLCBhcyBvcHBvc2VkIHRvIHdvcmtpbmcKLQkgKiBvZmYtbGluZS4KLQkgKiBAc2VlICNpc0FjdGl2ZSgpCi0JICovCi0JYm9vbGVhbiBpc0Nvbm5lY3RlZCgpOwotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIHByb2ZpbGUgaXMgbm90IGNvbm5lY3RlZCB0byBhIGxpdmUgZGF0YWJhc2Ugc2Vzc2lvbgotCSAqIChpLmUuIHRoZSBtZXRhLWRhdGEgY29tZXMgZnJvbSB0aGUgZGF0YWJhc2UpLCBhcyBvcHBvc2VkIHRvIHdvcmtpbmcKLQkgKiBvZmYtbGluZS4KLQkgKiBAc2VlICNpc0Nvbm5lY3RlZCgpCi0JICovCi0JYm9vbGVhbiBpc0Rpc2Nvbm5lY3RlZCgpOwotCi0JLyoqCi0JICogQ29ubmVjdCB0byB0aGUgZGF0YWJhc2UuCi0JICogQHNlZSAjZGlzY29ubmVjdCgpCi0JICovCi0Jdm9pZCBjb25uZWN0KCk7Ci0KLQkvKioKLQkgKiBEaXNjb25uZWN0IGZyb20gdGhlIGRhdGFiYXNlLgotCSAqIEBzZWUgI2Nvbm5lY3QoKQotCSAqLwotCXZvaWQgZGlzY29ubmVjdCgpOwotCi0KLQkvLyAqKioqKioqKioqIG9mZi1saW5lIHN1cHBvcnQgKioqKioqKioqKgotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIHByb2ZpbGUgaXMgd29ya2luZyBvZmYtbGluZSAoaS5lLiB0aGUgbWV0YS1kYXRhCi0JICogY29tZXMgZnJvbSBhIGxvY2FsIGNhY2hlKSwgYXMgb3Bwb3NlZCB0byBjb25uZWN0ZWQgdG8gYSBsaXZlCi0JICogZGF0YWJhc2Ugc2Vzc2lvbi4KLQkgKiBAc2VlICNpc0FjdGl2ZSgpCi0JICovCi0JYm9vbGVhbiBpc1dvcmtpbmdPZmZsaW5lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgY29ubmVjdGlvbiBmYWN0b3JpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQotCSAqIGNvbm5lY3Rpb24gcHJvZmlsZSdzIHByb3ZpZGVyIHN1cHBvcnQgd29ya2luZyBvZmZsaW5lLgotCSAqLwotCWJvb2xlYW4gc3VwcG9ydHNXb3JrT2ZmbGluZU1vZGUoKTsKLQotCS8qKgotCSAqIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uIHByb2ZpbGUgZm9yIHdvcmtpbmcgaW4gYW4gb2ZmbGluZSBtb2RlLgotCSAqIElmIHRoZSBjb25uZWN0aW9uIHByb2ZpbGUgZG9lcyBub3Qgc3VwcG9ydCB3b3JraW5nIGluIGFuIG9mZmxpbmUgbW9kZSwgbm8KLQkgKiBleGNlcHRpb24gaXMgdGhyb3duIGFuZCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LgotCSAqLwotCUlTdGF0dXMgc2F2ZVdvcmtPZmZsaW5lRGF0YSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gcHJvZmlsZSBzdXBwb3J0cyB3b3JraW5nIG9mZmxpbmUgYW5kIGRhdGEKLQkgKiBoYXMgYmVlbiBzYXZlZCBmb3Igd29ya2luZyBvZmZsaW5lLgotCSAqLwotCWJvb2xlYW4gY2FuV29ya09mZmxpbmUoKTsKLQotCS8qKgotCSAqIEJlZ2luIHdvcmtpbmcgb2ZmLWxpbmUuCi0JICovCi0JSVN0YXR1cyB3b3JrT2ZmbGluZSgpOwotCi0KLQkvLyAqKioqKioqKioqIGxpc3RlbmVycyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBBZGQgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIGxpc3RlbmVyIHRvIHRoZSBjb25uZWN0aW9uIHByb2ZpbGUuCi0JICovCi0Jdm9pZCBhZGRDb25uZWN0aW9uTGlzdGVuZXIoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKTsKLQotCS8qKgotCSAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24gbGlzdGVuZXIgZnJvbSB0aGUgY29ubmVjdGlvbiBwcm9maWxlLgotCSAqLwotCXZvaWQgcmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcik7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RhbnRzICoqKioqKioqKioKLQotCVN0cmluZyBDT05ORUNUSU9OX1BST0ZJTEVfVFlQRSA9ICJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmRiLmdlbmVyaWMuY29ubmVjdGlvblByb2ZpbGUiOyAgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBEUklWRVJfREVGSU5JVElPTl9QUk9QX0lEID0gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZHJpdmVyRGVmaW5pdGlvbklEIjsgIC8vJE5PTi1OTFMtMSQKLQlTdHJpbmcgRFJJVkVSX0RFRklOSVRJT05fVFlQRV9QUk9QX0lEID0gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZHJpdmVycy5kZWZuVHlwZSI7ICAvLyROT04tTkxTLTEkCi0JU3RyaW5nIERSSVZFUl9KQVJfTElTVF9QUk9QX0lEID0gImphckxpc3QiOyAgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBEQVRBQkFTRV9TQVZFX1BXRF9QUk9QX0lEID0gSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzLlBST1BfUFJFRklYICsgInNhdmVQV0QiOyAgLy8kTk9OLU5MUy0xJAotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db25uZWN0aW9uUHJvZmlsZUFkYXB0ZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25Qcm9maWxlQWRhcHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDhkYWE1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25Qcm9maWxlQWRhcHRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGI7Ci0KLS8qKgotICogQW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgUHJvZmlsZUxpc3RlbmVyLgotICogCi0gKiBQcm92aXNpb25hbCBBUEk6IFRoaXMgY2xhc3MgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblByb2ZpbGVBZGFwdGVyIGltcGxlbWVudHMgQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lciB7Ci0KLQlwdWJsaWMgdm9pZCBjb25uZWN0aW9uUHJvZmlsZUFkZGVkKFN0cmluZyBuYW1lKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjb25uZWN0aW9uUHJvZmlsZVJlbW92ZWQoU3RyaW5nIG5hbWUpIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLQotCXB1YmxpYyB2b2lkIGNvbm5lY3Rpb25Qcm9maWxlUmVuYW1lZChTdHJpbmcgb2xkTmFtZSwgU3RyaW5nIG5ld05hbWUpIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db25uZWN0aW9uUHJvZmlsZUZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0NzczOS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Db25uZWN0aW9uUHJvZmlsZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIERhdGFiYXNlIGNvbm5lY3Rpb24gcHJvZmlsZSBmYWN0b3J5Ci0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkgewotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgRFRQIGNvbm5lY3Rpb24gcHJvZmlsZXMgdGhlIGZhY3RvcnkgY2FuIHdyYXAgd2l0aAotCSAqIG5ldyBjb25uZWN0aW9uIHByb2ZpbGVzLgotCSAqLwotCUl0ZXJhdG9yPFN0cmluZz4gY29ubmVjdGlvblByb2ZpbGVOYW1lcygpOwotCi0JLyoqCi0JICogQnVpbGQgYW5kIHJldHVybiBhIGNvbm5lY3Rpb24gcHJvZmlsZSB0aGF0IHdyYXBzIHRoZSBEVFAgY29ubmVjdGlvbgotCSAqIHByb2ZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gRFRQIGNvbm5lY3Rpb24gcHJvZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQKLQkgKiBuYW1lLgotCSAqIFVzZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIGZpbmRlciB0byBhbGxvdyBjbGllbnRzIHRvIGNvbnRyb2wgaG93Ci0JICogZGF0YWJhc2Ugb2JqZWN0cyBhcmUgZm91bmQgYmFzZWQgb24gdGhlaXIgbmFtZXMuCi0JICovCi0JQ29ubmVjdGlvblByb2ZpbGUgYnVpbGRDb25uZWN0aW9uUHJvZmlsZShTdHJpbmcgbmFtZSwgRGF0YWJhc2VGaW5kZXIgZmluZGVyKTsKLQotCS8qKgotCSAqIEJ1aWxkIGFuZCByZXR1cm4gYSBjb25uZWN0aW9uIHByb2ZpbGUgdGhhdCB3cmFwcyB0aGUgRFRQIGNvbm5lY3Rpb24KLQkgKiBwcm9maWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgotCSAqIFJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIERUUCBjb25uZWN0aW9uIHByb2ZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkCi0JICogbmFtZS4KLQkgKiBDbGllbnRzIHNob3VsZCB1c2UgdGhpcyBtZXRob2Qgd2hlbiBhIEpQQSBwbGF0Zm9ybSBpcyB1bmF2YWlsYWJsZQotCSAqIChlLmcuIGR1cmluZyBwcm9qZWN0IGNyZWF0aW9uKS4gVGhlIHJldHVybmVkIGNvbm5lY3Rpb24gcHJvZmlsZSB3aWxsCi0JICogbm90IGJlIGFibGUgdG8gc2VhcmNoIGZvciBkYXRhYmFzZSBvYmplY3RzIGJ5IGFueSBuYW1lcyBvdGhlciB0aGFuCi0JICogdGhvc2Ugc3VwcGxpZWQgYnkgdGhlIGZhY3RvcnkgKGkuZS4gbG9va3VwcyBjYW5ub3QgYmUgcGVyZm9ybWVkIHdpdGgKLQkgKiAiaWRlbnRpZmllcnMiKS4KLQkgKi8KLQlDb25uZWN0aW9uUHJvZmlsZSBidWlsZENvbm5lY3Rpb25Qcm9maWxlKFN0cmluZyBuYW1lKTsKLQotCS8qKgotCSAqIEFkZCBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIHRvIHRoZSBEVFAKLQkgKiBjb25uZWN0aW9uIHByb2ZpbGVzLgotCSAqLwotCXZvaWQgYWRkQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcihDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyKTsKLQotCS8qKgotCSAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGxpc3RlbmVyLgotCSAqLwotCXZvaWQgcmVtb3ZlQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcihDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyKTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDIwYzU1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0Nvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi1pbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7Ci0KLS8qKgotICogQSBQcm9maWxlTGlzdGVuZXIgaXMgbm90aWZpZWQgb2YgYW55IGNoYW5nZXMgdG8gdGhlIERUUCBjb25uZWN0aW9uIHByb2ZpbGVzLgotICogCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuSVByb2ZpbGVMaXN0ZW5lcgotICogCi0gKiBQcm92aXNpb25hbCBBUEk6IFRoaXMgaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotICogdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZwotICogc3RhYmlsaXR5LiBJdCBpcyBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20KLSAqIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkKLSAqIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyCi0JZXh0ZW5kcyBFdmVudExpc3RlbmVyCi17Ci0KLQkvKioKLQkgKiBUaGUgc3BlY2lmaWVkIHByb2ZpbGUgaGFzIGJlZW4gYWRkZWQuCi0JICovCi0JcHVibGljIHZvaWQgY29ubmVjdGlvblByb2ZpbGVBZGRlZChTdHJpbmcgbmFtZSk7Ci0KLQkvKioKLQkgKiBUaGUgc3BlY2lmaWVkIHByb2ZpbGUgaGFzIGJlZW4gcmVtb3ZlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25uZWN0aW9uUHJvZmlsZVJlbW92ZWQoU3RyaW5nIG5hbWUpOwotCi0JLyoqCi0JICogVGhlIHNwZWNpZmllZCBwcm9maWxlIGhhcyBiZWVuIHJlbmFtZWQuCi0JICovCi0JcHVibGljIHZvaWQgY29ubmVjdGlvblByb2ZpbGVSZW5hbWVkKFN0cmluZyBvbGROYW1lLCBTdHJpbmcgbmV3TmFtZSk7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0RhdGFiYXNlLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9EYXRhYmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTJlMmQ5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0RhdGFiYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLS8qKgotICogRGF0YWJhc2UKLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tCi0gKiBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJCi0gKiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIERhdGFiYXNlIGV4dGVuZHMgU2NoZW1hQ29udGFpbmVyIHsKLQotCS8vICoqKioqKioqKiogcHJvcGVydGllcyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlJ3MgdmVuZG9yLgotCSAqLwotCVN0cmluZyBnZXRWZW5kb3JOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlJ3MgdmVyc2lvbi4KLQkgKi8KLQlTdHJpbmcgZ2V0VmVyc2lvbigpOwotCi0KLQkvLyAqKioqKioqKioqIGNhdGFsb2dzICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBkYXRhYmFzZSBzdXBwb3J0cyBjYXRhbG9ncy4gSWYgaXQgZG9lcywgYWxsIGRhdGFiYXNlCi0JICogb2JqZWN0cyBhcmUgY29udGFpbmVkIGJ5IHRoZSBkYXRhYmFzZSdzIGNhdGFsb2dzOyBvdGhlcndpc2UgYWxsIGRhdGFiYXNlCi0JICogb2JqZWN0cyBhcmUgY29udGFpbmVkIGJ5IHRoZSBkYXRhYmFzZSdzIHNjaGVtYXRhLgotCSAqIAotCSAqIFByYWN0aWNhbGx5IHNwZWFraW5nOgotCSAqICAgICBpZiAjc3VwcG9ydHNDYXRhbG9ncygpIHJldHVybnMgJ3RydWUnCi0JICogICAgICAgICAjY2F0YWxvZ3MoKSByZXR1cm5zIGNhdGFsb2dzIHRoYXQgY29udGFpbiB0aGUgZGF0YWJhc2UncyBzY2hlbWF0YQotCSAqICAgICAgICAgI3NjaGVtYXRhKCkgcmV0dXJucyBhbiBlbXB0eSBpdGVyYXRvcgotCSAqICAgICBlbHNlCi0JICogICAgICAgICAjY2F0YWxvZ3MoKSByZXR1cm5zIGFuIGVtcHR5IGl0ZXJhdG9yCi0JICogICAgICAgICAjc2NoZW1hdGEoKSByZXR1cm5zIHRoZSBkYXRhYmFzZSdzIHNjaGVtYXRhCi0JICogVGhpcyBpcyBjb21wbGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgYSAiZGVmYXVsdCIgY2F0YWxvZyB0aGF0IGNsaWVudHMgY2FuCi0JICogdXNlIHRvIGFsbG93IHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgY2F0YWxvZyB0byBiZSBvcHRpb25hbDsgYnV0IGNsaWVudHMKLQkgKiBtdXN0IG1hbmFnZSB0aGlzIGV4cGxpY2l0bHkuCi0JICogCi0JICogQHNlZSAjY2F0YWxvZ3MoKQotCSAqIEBzZWUgI3NjaGVtYXRhKCkKLQkgKi8KLQlib29sZWFuIHN1cHBvcnRzQ2F0YWxvZ3MoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2UncyBjYXRhbG9ncy4KLQkgKiBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IgaWYgdGhlIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgY2F0YWxvZ3MuCi0JICogQHNlZSAjc3VwcG9ydHNDYXRhbG9ncygpCi0JICovCi0JSXRlcmF0b3I8Q2F0YWxvZz4gY2F0YWxvZ3MoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNhdGFsb2dzIHRoZSBkYXRhYmFzZSBjb250YWlucy4KLQkgKiBSZXR1cm4gemVybyBpZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjYXRhbG9ncy4KLQkgKiBAc2VlICNzdXBwb3J0c0NhdGFsb2dzKCkKLQkgKi8KLQlpbnQgY2F0YWxvZ3NTaXplKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlJ3MgY2F0YWxvZyBuYW1lcywgc29ydGVkLgotCSAqIFJldHVybiBhbiBlbXB0eSBpdGVyYXRvciBpZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjYXRhbG9ncy4KLQkgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSB1c2VyIGlzIHNlbGVjdGluZyBhIGNhdGFsb2cgZnJvbSBhIHJlYWQtb25seQotCSAqIGNvbWJvLWJveCAoZS5nLiBpbiBhIHdpemFyZCkuCi0JICogQHNlZSAjc29ydGVkQ2F0YWxvZ0lkZW50aWZpZXJzKCkKLQkgKiBAc2VlICNnZXRDYXRhbG9nTmFtZWQoU3RyaW5nKQotCSAqLwotCUl0ZXJhdG9yPFN0cmluZz4gc29ydGVkQ2F0YWxvZ05hbWVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGNhdGFsb2cgd2l0aCBzcGVjaWZpZWQgbmFtZS4gVGhlIG5hbWUgbXVzdCBiZSBhbiBleGFjdCBtYXRjaAotCSAqIG9mIHRoZSBjYXRhbG9nJ3MgbmFtZS4KLQkgKiBSZXR1cm4gbnVsbCBpZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjYXRhbG9ncy4KLQkgKiBAc2VlICNzdXBwb3J0c0NhdGFsb2dzKCkKLQkgKiBAc2VlICNzb3J0ZWRDYXRhbG9nTmFtZXMoKQotCSAqIEBzZWUgI2dldENhdGFsb2dGb3JJZGVudGlmaWVyKFN0cmluZykKLQkgKi8KLQlDYXRhbG9nIGdldENhdGFsb2dOYW1lZChTdHJpbmcgbmFtZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlJ3MgY2F0YWxvZyBpZGVudGlmaWVycywgc29ydGVkIGJ5IG5hbWUuCi0JICogUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIGlmIHRoZSBkYXRhYmFzZSBkb2VzIG5vdCBzdXBwb3J0IGNhdGFsb2dzLgotCSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHVzZXIgaXMgc2VsZWN0aW5nIGFuIGlkZW50aWZpZXIgdGhhdCB3aWxsIGJlCi0JICogcGxhY2VkIGluIGEgdGV4dCBmaWxlIChlLmcuIGluIGEgSmF2YSBhbm5vdGF0aW9uKS4KLQkgKiBAc2VlICNzb3J0ZWRDYXRhbG9nTmFtZXMoKQotCSAqIEBzZWUgI2dldENhdGFsb2dGb3JJZGVudGlmaWVyKFN0cmluZykKLQkgKi8KLQlJdGVyYXRvcjxTdHJpbmc+IHNvcnRlZENhdGFsb2dJZGVudGlmaWVycygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBjYXRhbG9nIGZvciB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIuIFRoZSBpZGVudGlmaWVyIHNob3VsZAotCSAqIGJlIGFuIFNRTCBpZGVudGlmaWVyIChpLmUuIHF1b3RlZCB3aGVuIGNhc2Utc2Vuc2l0aXZlIG9yIGNvbnRhaW5pbmcKLQkgKiBzcGVjaWFsIGNoYXJhY3RlcnMsIHVucXVvdGVkIG90aGVyd2lzZSkuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgY2F0YWxvZ3MuCi0JICogQHNlZSAjc3VwcG9ydHNDYXRhbG9ncygpCi0JICogQHNlZSAjc29ydGVkQ2F0YWxvZ0lkZW50aWZpZXJzKCkKLQkgKiBAc2VlICNnZXRDYXRhbG9nTmFtZWQoU3RyaW5nKQotCSAqLwotCUNhdGFsb2cgZ2V0Q2F0YWxvZ0ZvcklkZW50aWZpZXIoU3RyaW5nIGlkZW50aWZpZXIpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBkYXRhYmFzZSdzICJkZWZhdWx0IiBjYXRhbG9nLCBhcyBkZWZpbmVkIGJ5IHRoZSBkYXRhYmFzZSB2ZW5kb3IuCi0JICogSW4gbW9zdCBjYXNlcyB0aGUgZGVmYXVsdCBjYXRhbG9nJ3MgbmFtZSB3aWxsIG1hdGNoIHRoZSB1c2VyIG5hbWUuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgY2F0YWxvZ3Mgb3IgaWYgdGhlIGRlZmF1bHQKLQkgKiBjYXRhbG9nIGRvZXMgbm90IGV4aXN0IChlLmcuIHRoZSBkYXRhYmFzZSBoYXMgbm8gY2F0YWxvZyB3aG9zZSBuYW1lCi0JICogbWF0Y2hlcyB0aGUgdXNlciBuYW1lKS4KLQkgKiBAc2VlICNzdXBwb3J0c0NhdGFsb2dzKCkKLQkgKiBAc2VlICNnZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXIoKQotCSAqLwotCUNhdGFsb2cgZ2V0RGVmYXVsdENhdGFsb2coKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2UncyAiZGVmYXVsdCIgY2F0YWxvZyBpZGVudGlmaWVyLgotCSAqIFRoZSBkYXRhYmFzZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGEgY2F0YWxvZyB3aXRoIGEgbWF0Y2hpbmcgbmFtZS4KLQkgKiBAc2VlICNzdXBwb3J0c0NhdGFsb2dzKCkKLQkgKiBAc2VlICNnZXREZWZhdWx0Q2F0YWxvZygpCi0JICovCi0JU3RyaW5nIGdldERlZmF1bHRDYXRhbG9nSWRlbnRpZmllcigpOwotCi0KLQkvLyAqKioqKioqKioqIHV0aWxpdHkgbWV0aG9kcyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBTZWxlY3QgYW5kIHJldHVybiBmcm9tIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBkYXRhYmFzZSBvYmplY3RzIHRoZQotCSAqIGRhdGFiYXNlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllci4KLQkgKiBUaGUgaWRlbnRpZmllciBzaG91bGQgYmUgYW4gU1FMIGlkZW50aWZpZXIgKGkuZS4gZGVsaW1pdGVkIHdoZW4KLQkgKiBub24tIm5vcm1hbCIpLgotCSAqLwotCTxUIGV4dGVuZHMgRGF0YWJhc2VPYmplY3Q+IFQgc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyKFRbXSBkYXRhYmFzZU9iamVjdHMsIFN0cmluZyBpZGVudGlmaWVyKTsKLQotCS8qKgotCSAqIENvbnZlcnQgdGhlIHNwZWNpZmllZCBuYW1lIHRvIGEgZGF0YWJhc2UtYXBwcm9wcmlhdGUgU1FMIGlkZW50aWZpZXIuCi0JICovCi0JU3RyaW5nIGNvbnZlcnROYW1lVG9JZGVudGlmaWVyKFN0cmluZyBuYW1lKTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvRGF0YWJhc2VGaW5kZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0RhdGFiYXNlRmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYTY3NDIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvRGF0YWJhc2VGaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGFsbG93cyBjbGllbnRzIG9mIHRoZSBEYWxpIGRiIHBhY2thZ2UgdG8gcGx1ZyBpbiBhIGN1c3RvbQotICogc3RyYXRlZ3kgZm9yIGNvbXBhcmluZyBhbiBpZGVudGlmaWVyIHRvIHRoZSBuYW1lcyBvZiBhIGNvbGxlY3Rpb24gb2YKLSAqIGRhdGFiYXNlIG9iamVjdHMuCi0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBEYXRhYmFzZUZpbmRlciB7Ci0KLQkvKioKLQkgKiBTZWxlY3QgYW5kIHJldHVybiBmcm9tIHRoZSBzcGVjaWZpZWQgbGlzdCBvZiBkYXRhYmFzZSBvYmplY3RzIHRoZQotCSAqIGRhdGFiYXNlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllci4KLQkgKi8KLQk8VCBleHRlbmRzIERhdGFiYXNlT2JqZWN0PiBUIHNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcihUW10gZGF0YWJhc2VPYmplY3RzLCBTdHJpbmcgaWRlbnRpZmllciwgRGVmYXVsdENhbGxiYWNrIGRlZmF1bHRDYWxsYmFjayk7Ci0KLQkvKioKLQkgKiBUaGUgcGxhdGZvcm0tcHJvdmlkZWQgZmluZGVyIGlzIHBhc3NlZCBhICJkZWZhdWx0IiBjYWxsYmFjayB0aGF0IGNhbiBiZQotCSAqIHVzZWQgaWYgYXBwcm9wcmlhdGUuCi0JICovCi0JaW50ZXJmYWNlIERlZmF1bHRDYWxsYmFjayB7Ci0KLQkJLyoqCi0JCSAqIFNlbGVjdCBhbmQgcmV0dXJuIGZyb20gdGhlIHNwZWNpZmllZCBsaXN0IG9mIGRhdGFiYXNlIG9iamVjdHMgdGhlCi0JCSAqIGRhdGFiYXNlIG9iamVjdCBpZGVudGlmaWVkIGJ5IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllci4KLQkJICovCi0JCTxUIGV4dGVuZHMgRGF0YWJhc2VPYmplY3Q+IFQgc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyKFRbXSBkYXRhYmFzZU9iamVjdHMsIFN0cmluZyBpZGVudGlmaWVyKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgZmluZGVyIHNlYXJjaGVzIGZvciBhbiBleGFjdCBtYXRjaC4KLQkgKi8KLQlmaW5hbCBjbGFzcyBTaW1wbGUgaW1wbGVtZW50cyBEYXRhYmFzZUZpbmRlciB7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgRGF0YWJhc2VGaW5kZXIgSU5TVEFOQ0UgPSBuZXcgU2ltcGxlKCk7Ci0JCXB1YmxpYyBzdGF0aWMgRGF0YWJhc2VGaW5kZXIgaW5zdGFuY2UoKSB7Ci0JCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JCX0KLQkJLy8gZW5zdXJlIHNpbmdsZSBpbnN0YW5jZQotCQlwcml2YXRlIFNpbXBsZSgpIHsKLQkJCXN1cGVyKCk7Ci0JCX0KLQkJLy8gc2VhcmNoIGZvciBhbiBleGFjdCBtYXRjaCBvbiB0aGUgbmFtZQotCQlwdWJsaWMgPFQgZXh0ZW5kcyBEYXRhYmFzZU9iamVjdD4gVCBzZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIoVFtdIGRhdGFiYXNlT2JqZWN0cywgU3RyaW5nIGlkZW50aWZpZXIsIERlZmF1bHRDYWxsYmFjayBkZWZhdWx0Q2FsbGJhY2spIHsKLQkJCWZvciAoVCBkYXRhYmFzZU9iamVjdCA6IGRhdGFiYXNlT2JqZWN0cykgewotCQkJCWlmIChkYXRhYmFzZU9iamVjdC5nZXROYW1lKCkuZXF1YWxzKGlkZW50aWZpZXIpKSB7Ci0JCQkJCXJldHVybiBkYXRhYmFzZU9iamVjdDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCXJldHVybiAiRGF0YWJhc2VGaW5kZXIuU2ltcGxlIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmaW5kZXIgdXNlcyB0aGUgcGFzc2VkIGluIGNhbGxiYWNrIHRvIHNlYXJjaCB0aGUgbGlzdCBvZiBkYXRhYmFzZSBvYmplY3RzLgotCSAqLwotCWZpbmFsIGNsYXNzIERlZmF1bHQgaW1wbGVtZW50cyBEYXRhYmFzZUZpbmRlciB7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgRGF0YWJhc2VGaW5kZXIgSU5TVEFOQ0UgPSBuZXcgRGVmYXVsdCgpOwotCQlwdWJsaWMgc3RhdGljIERhdGFiYXNlRmluZGVyIGluc3RhbmNlKCkgewotCQkJcmV0dXJuIElOU1RBTkNFOwotCQl9Ci0JCS8vIGVuc3VyZSBzaW5nbGUgaW5zdGFuY2UKLQkJcHJpdmF0ZSBEZWZhdWx0KCkgewotCQkJc3VwZXIoKTsKLQkJfQotCQkvLyBzaW1wbHkgdXNlIHRoZSBjYWxsYmFjawotCQlwdWJsaWMgPFQgZXh0ZW5kcyBEYXRhYmFzZU9iamVjdD4gVCBzZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIoVFtdIGRhdGFiYXNlT2JqZWN0cywgU3RyaW5nIGlkZW50aWZpZXIsIERlZmF1bHRDYWxsYmFjayBkZWZhdWx0Q2FsbGJhY2spIHsKLQkJCXJldHVybiBkZWZhdWx0Q2FsbGJhY2suc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyKGRhdGFiYXNlT2JqZWN0cywgaWRlbnRpZmllcik7Ci0JCX0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlyZXR1cm4gIkRhdGFiYXNlRmluZGVyLkRlZmF1bHQiOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0RhdGFiYXNlT2JqZWN0LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9EYXRhYmFzZU9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWY3NTVkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0RhdGFiYXNlT2JqZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotLyoqCi0gKiBDb21tb24gYmVoYXZpb3IgdG8gYWxsIGRhdGFiYXNlIG9iamVjdHMKLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tCi0gKiBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJCi0gKiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIERhdGFiYXNlT2JqZWN0IHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2Ugb2JqZWN0J3MgbmFtZS4KLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBkYXRhYmFzZSBvYmplY3QncyAiaWRlbnRpZmllciIsIHdoaWNoIGlzIHRoZSBvYmplY3QncyBuYW1lCi0JICogbW9kaWZpZWQgc28gaXQgY2FuIGJlIHVzZWQgaW4gYW4gU1FMIHN0YXRlbWVudCAoZS5nLiBpZiB0aGUgbmFtZSBjb250YWlucwotCSAqIHNwZWNpYWwgY2hhcmFjdGVycyBvciBpcyBtaXhlZCBjYXNlLCBpdCB3aWxsIGJlIGRlbGltaXRlZCwgdHlwaWNhbGx5IGJ5Ci0JICogZG91YmxlLXF1b3RlcykuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlIGRhdGFiYXNlIG9iamVjdCdzIGlkZW50aWZpZXIgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkCi0JICogImRlZmF1bHQgbmFtZSIuCi0JICovCi0JU3RyaW5nIGdldElkZW50aWZpZXIoU3RyaW5nIGRlZmF1bHROYW1lKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2Ugb2JqZWN0J3MgImlkZW50aWZpZXIiLCB3aGljaCBpcyB0aGUgb2JqZWN0J3MgbmFtZQotCSAqIG1vZGlmaWVkIHNvIGl0IGNhbiBiZSB1c2VkIGluIGFuIFNRTCBzdGF0ZW1lbnQgKGUuZy4gaWYgdGhlIG5hbWUgY29udGFpbnMKLQkgKiBzcGVjaWFsIGNoYXJhY3RlcnMgb3IgaXMgbWl4ZWQgY2FzZSwgaXQgd2lsbCBiZSBkZWxpbWl0ZWQsIHR5cGljYWxseSBieQotCSAqIGRvdWJsZS1xdW90ZXMpLgotCSAqLwotCVN0cmluZyBnZXRJZGVudGlmaWVyKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlIG9iamVjdCdzIGRhdGFiYXNlLgotCSAqLwotCURhdGFiYXNlIGdldERhdGFiYXNlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGRhdGFiYXNlIG9iamVjdCdzIGNvbm5lY3Rpb24gcHJvZmlsZS4KLQkgKi8KLQlDb25uZWN0aW9uUHJvZmlsZSBnZXRDb25uZWN0aW9uUHJvZmlsZSgpOwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Gb3JlaWduS2V5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9Gb3JlaWduS2V5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZGE3OGUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvRm9yZWlnbktleS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIERhdGFiYXNlIGZvcmVpZ24ga2V5Ci0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBGb3JlaWduS2V5IGV4dGVuZHMgRGF0YWJhc2VPYmplY3QgewotCi0JLy8gKioqKioqKioqKiB0YWJsZXMgKioqKioqKioqKgotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBmb3JlaWduIGtleSdzICJiYXNlIiB0YWJsZS4KLQkgKi8KLQlUYWJsZSBnZXRCYXNlVGFibGUoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZm9yZWlnbiBrZXkncyAicmVmZXJlbmNlZCIgdGFibGUuCi0JICovCi0JVGFibGUgZ2V0UmVmZXJlbmNlZFRhYmxlKCk7Ci0KLQotCS8vICoqKioqKioqKiogY29sdW1uIHBhaXJzICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZm9yZWlnbiBrZXkncyBjb2x1bW4gcGFpcnMuCi0JICovCi0JSXRlcmF0b3I8Q29sdW1uUGFpcj4gY29sdW1uUGFpcnMoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZm9yZWlnbiBrZXkncyBjb2x1bW4gcGFpcnMuCi0JICovCi0JaW50IGNvbHVtblBhaXJzU2l6ZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBmb3JlaWduIGtleSdzIHNpbmdsZSBjb2x1bW4gcGFpci4gVGhyb3cgYW4KLQkgKiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGZvcmVpZ24ga2V5IGhhcyBtb3JlIHRoYW4gb25lIGNvbHVtbiBwYWlyLgotCSAqLwotCUNvbHVtblBhaXIgZ2V0Q29sdW1uUGFpcigpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBmb3JlaWduIGtleSdzICJiYXNlIiBjb2x1bW5zLgotCSAqLwotCUl0ZXJhdG9yPENvbHVtbj4gYmFzZUNvbHVtbnMoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZm9yZWlnbiBrZXkncyAiYmFzZSIgY29sdW1ucyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgYmFzZQotCSAqIHRhYmxlJ3MgcHJpbWFyeSBrZXkuIChUaGUgbm9uLXByaW1hcnkga2V5IGJhc2UgY29sdW1ucyBhcmUgbm90IHVzZWQgdG8KLQkgKiBnZW5lcmF0ZSBiYXNpYyBhdHRyaWJ1dGVzIGR1cmluZyBlbnRpdHkgZ2VuZXJhdGlvbi4pCi0JICovCi0JSXRlcmF0b3I8Q29sdW1uPiBub25QcmltYXJ5S2V5QmFzZUNvbHVtbnMoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgZm9yZWlnbiBrZXkncyAicmVmZXJlbmNlZCIgY29sdW1ucy4KLQkgKi8KLQlJdGVyYXRvcjxDb2x1bW4+IHJlZmVyZW5jZWRDb2x1bW5zKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgZm9yZWlnbiBrZXkgcmVmZXJlbmNlcyB0aGUgcHJpbWFyeSBrZXkgb2YgdGhlCi0JICogInJlZmVyZW5jZWQiIHRhYmxlIGFuZCB0aGF0IHByaW1hcnkga2V5IGhhcyBvbmx5IGEgc2luZ2xlIGNvbHVtbi4KLQkgKiBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gZGV0ZXJtaW5pbmcgSlBBIGRlZmF1bHRzLgotCSAqLwotCWJvb2xlYW4gcmVmZXJlbmNlc1NpbmdsZUNvbHVtblByaW1hcnlLZXkoKTsKLQotCi0JLy8gKioqKioqKioqKiBKUEEgc3VwcG9ydCAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gYW4gYXBwcm9wcmlhdGUgbmFtZSBmb3IgYW4gYXR0cmlidXRlIHRoYXQgaG9sZHMgdGhlIGVudGl0eQotCSAqIG1hcHBlZCB0byB0aGUgZm9yZWlnbiBrZXkncyAicmVmZXJlbmNlZCIgdGFibGUuCi0JICovCi0JU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoKTsKLQotCS8qKgotCSAqIElmIHRoZSBuYW1lIG9mIHRoZSAiYmFzZSIgY29sdW1uIGFkaGVyZXMgdG8gdGhlIEpQQSBzcGVjIGZvciBhCi0JICogZGVmYXVsdCBtYXBwaW5nIChpLmUuIGl0IGVuZHMgd2l0aCBhbiB1bmRlcnNjb3JlIGZvbGxvd2VkIGJ5IHRoZSBuYW1lCi0JICogb2YgdGhlICJyZWZlcmVuY2VkIiBjb2x1bW4sIGFuZCB0aGUgInJlZmVyZW5jZWQiIGNvbHVtbiBpcyB0aGUgc2luZ2xlCi0JICogcHJpbWFyeSBrZXkgY29sdW1uIG9mIHRoZSAicmVmZXJlbmNlZCIgdGFibGUpLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBkZWZhdWx0IGF0dHJpYnV0ZSBuYW1lOgotCSAqICAgICBGb3JlaWduS2V5KEVNUC5DVUJJQ0xFX0lEID0+IENVQklDTEUuSUQpID0+ICJDVUJJQ0xFIgotCSAqIFJldHVybiBhIG51bGwgaWYgaXQgZG9lcyBub3QgYWRoZXJlIHRvIHRoZSBKUEEgc3BlYzoKLQkgKiAgICAgRm9yZWlnbktleShFTVAuQ1VCSUNMRV9JRCA9PiBDVUJJQ0xFLkNVQklDTEVfSUQpID0+IG51bGwKLQkgKiAgICAgRm9yZWlnbktleShFTVAuQ1VCSUNMRSA9PiBDVUJJQ0xFLklEKSA9PiBudWxsCi0JICovCi0JU3RyaW5nIGdldERlZmF1bHRBdHRyaWJ1dGVOYW1lKCk7Ci0KLQkvKioKLQkgKiBHaXZlbiB0aGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUgKGZpZWxkIG9yIHByb3BlcnR5KSB0aGF0IGlzIG1hcHBlZCB0byB0aGUKLQkgKiBmb3JlaWduIGtleSwKLQkgKiBidWlsZCBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlJ3MKLQkgKiBKb2luQ29sdW1uIGFubm90YXRpb24ncyAnbmFtZScgZWxlbWVudC4gUmV0dXJuIG51bGwgaWYgdGhlIGF0dHJpYnV0ZQotCSAqIG1hcHMgdG8gdGhlIGpvaW4gY29sdW1uIGJ5IGRlZmF1bHQuCi0JICogUHJlY29uZGl0aW9uOiBUaGUgZm9yZWlnbiBrZXkgY29uc2lzdHMgb2YgYSBzaW5nbGUgY29sdW1uIHBhaXIgd2hvc2UKLQkgKiByZWZlcmVuY2VkIGNvbHVtbiBpcyB0aGUgc2luZ2xlLWNvbHVtbiBwcmltYXJ5IGtleSBvZiB0aGUgZm9yZWlnbgotCSAqIGtleSdzIHJlZmVyZW5jZWQgdGFibGUuCi0JICovCi0JU3RyaW5nIGdldEpvaW5Db2x1bW5Bbm5vdGF0aW9uSWRlbnRpZmllcihTdHJpbmcgYXR0cmlidXRlTmFtZSk7Ci0KLQkvLyAqKioqKioqKioqIGNvbHVtbiBwYWlyIGludGVyZmFjZSAqKioqKioqKioqCi0KLQkvKioKLQkgKiBQYWlyIHVwIHRoZSBmb3JlaWduIGtleSdzIGNvbHVtbiBwYWlycywgbWF0Y2hpbmcgZWFjaCAiYmFzZSIgY29sdW1uIHdpdGgKLQkgKiB0aGUgYXBwcm9wcmlhdGUgInJlZmVyZW5jZWQiIGNvbHVtbi4KLQkgKiBAc2VlICNjb2x1bW5QYWlycygpCi0JICovCi0JaW50ZXJmYWNlIENvbHVtblBhaXIgewotCi0JCS8qKgotCQkgKiBSZXR1cm4gdGhlIGNvbHVtbiBwYWlyJ3MgImJhc2UiIGNvbHVtbi4KLQkJICovCi0JCUNvbHVtbiBnZXRCYXNlQ29sdW1uKCk7Ci0KLQkJLyoqCi0JCSAqIFJldHVybiB0aGUgY29sdW1uIHBhaXIncyAicmVmZXJlbmNlZCIgY29sdW1uLgotCQkgKi8KLQkJQ29sdW1uIGdldFJlZmVyZW5jZWRDb2x1bW4oKTsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvSnB0RGJQbHVnaW4uamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL0pwdERiUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNGY3MzYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvSnB0RGJQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuZW5hYmxlbWVudC5qZHQuY2xhc3NwYXRoLkRyaXZlckNsYXNzcGF0aENvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC5EVFBDb25uZWN0aW9uUHJvZmlsZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIEpQVCBEQiBwbHVnLWluIGxpZmVjeWNsZSBpbXBsZW1lbnRhdGlvbi4KLSAqIEdsb2JhbGx5IGF2YWlsYWJsZSBjb25uZWN0aW9uIHByb2ZpbGUgZmFjdG9yeS4KLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGNsYXNzIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotICogdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZwotICogc3RhYmlsaXR5LiBJdCBpcyBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20KLSAqIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkKLSAqIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqLwotcHVibGljIGNsYXNzIEpwdERiUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQlwcml2YXRlIERUUENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSBjb25uZWN0aW9uUHJvZmlsZUZhY3Rvcnk7Ci0KLQlwcml2YXRlIHN0YXRpYyBKcHREYlBsdWdpbiBJTlNUQU5DRTsgIC8vIHNvcnRhLWZpbmFsCi0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbiBKUFQgREIgcGx1Zy1pbi4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpwdERiUGx1Z2luIGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEpwdERiUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlpZiAoSU5TVEFOQ0UgIT0gbnVsbCkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCQl9Ci0JCS8vIHRoaXMgY29udmVudGlvbiBpcyAqd2FjayouLi4gIH5ianYKLQkJSU5TVEFOQ0UgPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSA9IERUUENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeS5pbnN0YW5jZSgpOwotICAgICAgICB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeS5zdGFydCgpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGVGYWN0b3J5LnN0b3AoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkgPSBudWxsOwotCQlJTlNUQU5DRSA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotCi0JcHVibGljIENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSBnZXRDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkoKSB7Ci0JCXJldHVybiB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgamFyIGxpc3QgY29udGFpbmVyIGZvciB0aGUgZ2l2ZW4gRFRQIGRyaXZlci4KLQkgKi8KLQlwdWJsaWMgSUNsYXNzcGF0aENvbnRhaW5lciBidWlsZERyaXZlckNsYXNzcGF0aENvbnRhaW5lckZvcihTdHJpbmcgZHJpdmVyTmFtZSkgewotCQlyZXR1cm4gbmV3IERyaXZlckNsYXNzcGF0aENvbnRhaW5lcihkcml2ZXJOYW1lKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL1NjaGVtYS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2NoZW1hLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjRjZjIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2NoZW1hLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotCi0vKioKLSAqIERhdGFiYXNlIHNjaGVtYQotICogCi0gKiBQcm92aXNpb25hbCBBUEk6IFRoaXMgaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbAotICogdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZwotICogc3RhYmlsaXR5LiBJdCBpcyBhdmFpbGFibGUgYXQgdGhpcyBlYXJseSBzdGFnZSB0byBzb2xpY2l0IGZlZWRiYWNrIGZyb20KLSAqIHBpb25lZXJpbmcgYWRvcHRlcnMgb24gdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBhbnkgY29kZSB0aGF0IHVzZXMgdGhpcyBBUEkKLSAqIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBiZSBicm9rZW4gKHJlcGVhdGVkbHkpIGFzIHRoZSBBUEkgZXZvbHZlcy4KLSAqIAotICogVGhpcyBpbnRlcmZhY2UgaXMgbm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hIGV4dGVuZHMgRGF0YWJhc2VPYmplY3QgewotCS8qKgotCSAqIFJldHVybiB0aGUgc2NoZW1hJ3MgY29udGFpbmVyOyBlaXRoZXIgYSBjYXRhbG9nIG9yIGEgZGF0YWJhc2UuCi0JICovCi0JU2NoZW1hQ29udGFpbmVyIGdldENvbnRhaW5lcigpOwotCi0KLQkvLyAqKioqKioqKioqIHRhYmxlcyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNjaGVtYSdzIHRhYmxlcy4KLQkgKi8KLQlJdGVyYXRvcjxUYWJsZT4gdGFibGVzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0YWJsZXMgdGhlIHNjaGVtYSBjb250YWlucy4KLQkgKi8KLQlpbnQgdGFibGVzU2l6ZSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB0YWJsZSB3aXRoIHNwZWNpZmllZCBuYW1lLiBUaGUgbmFtZSBtdXN0IGJlIGFuIGV4YWN0IG1hdGNoCi0JICogb2YgdGhlIHRhYmxlJ3MgbmFtZS4KLQkgKiBAc2VlICNnZXRUYWJsZUZvcklkZW50aWZpZXIoU3RyaW5nKQotCSAqLwotCSBUYWJsZSBnZXRUYWJsZU5hbWVkKFN0cmluZyBuYW1lKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2NoZW1hJ3MgdGFibGUgaWRlbnRpZmllcnMsIHNvcnRlZCBieSBuYW1lLgotCSAqLwotCUl0ZXJhdG9yPFN0cmluZz4gc29ydGVkVGFibGVJZGVudGlmaWVycygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLiBUaGUgaWRlbnRpZmllciBzaG91bGQKLQkgKiBiZSBhbiBTUUwgaWRlbnRpZmllciAoaS5lLiBxdW90ZWQgd2hlbiBjYXNlLXNlbnNpdGl2ZSBvciBjb250YWluaW5nCi0JICogc3BlY2lhbCBjaGFyYWN0ZXJzLCB1bnF1b3RlZCBvdGhlcndpc2UpLgotCSAqIEBzZWUgI2dldFRhYmxlTmFtZWQoU3RyaW5nKQotCSAqLwotCVRhYmxlIGdldFRhYmxlRm9ySWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcik7Ci0KLQotCS8vICoqKioqKioqKiogc2VxdWVuY2VzICoqKioqKioqKioKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2NoZW1hJ3Mgc2VxdWVuY2VzLgotCSAqLwotCUl0ZXJhdG9yPFNlcXVlbmNlPiBzZXF1ZW5jZXMoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlcXVlbmNlcyB0aGUgc2NoZW1hIGNvbnRhaW5zLgotCSAqLwotCWludCBzZXF1ZW5jZXNTaXplKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNlcXVlbmNlIHdpdGggc3BlY2lmaWVkIG5hbWUuIFRoZSBuYW1lIG11c3QgYmUgYW4gZXhhY3QgbWF0Y2gKLQkgKiBvZiB0aGUgc2VxdWVuY2UncyBuYW1lLgotCSAqIEBzZWUgI2dldFNlcXVlbmNlRm9ySWRlbnRpZmllcihTdHJpbmcpCi0JICovCi0JU2VxdWVuY2UgZ2V0U2VxdWVuY2VOYW1lZChTdHJpbmcgbmFtZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNjaGVtYSdzIHNlcXVlbmNlIGlkZW50aWZlcnMsIHNvcnRlZCBieSBuYW1lLgotCSAqLwotCUl0ZXJhdG9yPFN0cmluZz4gc29ydGVkU2VxdWVuY2VJZGVudGlmaWVycygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzZXF1ZW5jZSBmb3IgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLiBUaGUgaWRlbnRpZmllciBzaG91bGQKLQkgKiBiZSBhbiBTUUwgaWRlbnRpZmllciAoaS5lLiBxdW90ZWQgd2hlbiBjYXNlLXNlbnNpdGl2ZSBvciBjb250YWluaW5nCi0JICogc3BlY2lhbCBjaGFyYWN0ZXJzLCB1bnF1b3RlZCBvdGhlcndpc2UpLgotCSAqIEBzZWUgI2dldFNlcXVlbmNlTmFtZWQoU3RyaW5nKQotCSAqLwotCVNlcXVlbmNlIGdldFNlcXVlbmNlRm9ySWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcik7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL1NjaGVtYUNvbnRhaW5lci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2NoZW1hQ29udGFpbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkY2Q0NGQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2NoZW1hQ29udGFpbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotLyoqCi0gKiBTY2hlbWEgImNvbnRhaW5lciIgKGkuZS4gRGF0YWJhc2Ugb3IgQ2F0YWxvZykKLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tCi0gKiBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJCi0gKiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKiAKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBjbGllbnRzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYUNvbnRhaW5lcgotCWV4dGVuZHMgRGF0YWJhc2VPYmplY3QKLXsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29udGFpbmVyJ3Mgc2NoZW1hdGEuCi0JICovCi0JSXRlcmF0b3I8U2NoZW1hPiBzY2hlbWF0YSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2NoZW1hdGEgaW4gdGhlIGNvbnRhaW5lci4KLQkgKi8KLQlpbnQgc2NoZW1hdGFTaXplKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGNvbnRhaW5lcidzIHNjaGVtYSBuYW1lcywgc29ydGVkLgotCSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHVzZXIgaXMgc2VsZWN0aW5nIGEgc2NoZW1hIGZyb20gYSByZWFkLW9ubHkKLQkgKiBjb21iby1ib3ggKGUuZy4gaW4gYSB3aXphcmQpLgotCSAqIEBzZWUgI2dldFNjaGVtYU5hbWVkKFN0cmluZykKLQkgKiBAc2VlICNzb3J0ZWRTY2hlbWFJZGVudGlmaWVycygpCi0JICovCi0JSXRlcmF0b3I8U3RyaW5nPiBzb3J0ZWRTY2hlbWFOYW1lcygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzY2hlbWEgd2l0aCBzcGVjaWZpZWQgbmFtZS4gVGhlIG5hbWUgbXVzdCBiZSBhbiBleGFjdCBtYXRjaAotCSAqIG9mIHRoZSBzY2hlbWEncyBuYW1lLgotCSAqIEBzZWUgI3NvcnRlZFNjaGVtYU5hbWVzKCkKLQkgKiBAc2VlICNnZXRTY2hlbWFGb3JJZGVudGlmaWVyKFN0cmluZykKLQkgKi8KLQlTY2hlbWEgZ2V0U2NoZW1hTmFtZWQoU3RyaW5nIG5hbWUpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBjb250YWluZXIncyBzY2hlbWEgaWRlbnRpZmllcnMsIHNvcnRlZCBieSBuYW1lLgotCSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHVzZXIgaXMgc2VsZWN0aW5nIGFuIGlkZW50aWZpZXIgdGhhdCB3aWxsIGJlCi0JICogcGxhY2VkIGluIGEgdGV4dCBmaWxlIChlLmcuIGluIGEgSmF2YSBhbm5vdGF0aW9uKS4KLQkgKiBAc2VlICNnZXRTY2hlbWFGb3JJZGVudGlmaWVyKFN0cmluZykKLQkgKiBAc2VlICNzb3J0ZWRTY2hlbWFOYW1lcygpCi0JICovCi0JSXRlcmF0b3I8U3RyaW5nPiBzb3J0ZWRTY2hlbWFJZGVudGlmaWVycygpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzY2hlbWEgZm9yIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllci4gVGhlIGlkZW50aWZpZXIgc2hvdWxkCi0JICogYmUgYW4gU1FMIGlkZW50aWZpZXIgKGkuZS4gcXVvdGVkIHdoZW4gY2FzZS1zZW5zaXRpdmUgb3IgY29udGFpbmluZwotCSAqIHNwZWNpYWwgY2hhcmFjdGVycywgdW5xdW90ZWQgb3RoZXJ3aXNlKS4KLQkgKiBAc2VlICNzb3J0ZWRTY2hlbWFJZGVudGlmaWVycygpCi0JICogQHNlZSAjZ2V0U2NoZW1hTmFtZWQoU3RyaW5nKQotCSAqLwotCVNjaGVtYSBnZXRTY2hlbWFGb3JJZGVudGlmaWVyKFN0cmluZyBpZGVudGlmaWVyKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29udGFpbmVyJ3MgImRlZmF1bHQiIHNjaGVtYSwgYXMgZGVmaW5lZCBieSB0aGUgZGF0YWJhc2UgdmVuZG9yLgotCSAqIEluIG1vc3QgY2FzZXMgdGhlIGRlZmF1bHQgc2NoZW1hJ3MgbmFtZSB3aWxsIG1hdGNoIHRoZSB1c2VyIG5hbWUuCi0JICogUmV0dXJuIG51bGwgaWYgdGhlIGRlZmF1bHQgc2NoZW1hIGRvZXMgbm90IGV4aXN0IChlLmcuIHRoZSBjb250YWluZXIgaGFzCi0JICogbm8gc2NoZW1hIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgdXNlciBuYW1lKS4KLQkgKiBAc2VlICNnZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcigpCi0JICovCi0JU2NoZW1hIGdldERlZmF1bHRTY2hlbWEoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29udGFpbmVyJ3MgImRlZmF1bHQiIHNjaGVtYSBpZGVudGlmaWVyLgotCSAqIFRoZSBjb250YWluZXIgbWF5IG9yIG1heSBub3QgaGF2ZSBhIHNjaGVtYSB3aXRoIGEgbWF0Y2hpbmcgbmFtZS4KLQkgKiBAc2VlICNnZXREZWZhdWx0U2NoZW1hKCkKLQkgKi8KLQlTdHJpbmcgZ2V0RGVmYXVsdFNjaGVtYUlkZW50aWZpZXIoKTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2VxdWVuY2UuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL1NlcXVlbmNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNGMyMzEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvU2VxdWVuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi0vKioKLSAqIERhdGFiYXNlIHNlcXVlbmNlCi0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBTZXF1ZW5jZSBleHRlbmRzIERhdGFiYXNlT2JqZWN0IHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2VxdWVuY2UncyBzY2hlbWEuCi0JICovCi0JU2NoZW1hIGdldFNjaGVtYSgpOwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9UYWJsZS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvVGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRkZTMxYy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9UYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIERhdGFiYXNlIHRhYmxlCi0gKiAKLSAqIFByb3Zpc2lvbmFsIEFQSTogVGhpcyBpbnRlcmZhY2UgaXMgcGFydCBvZiBhbiBpbnRlcmltIEFQSSB0aGF0IGlzIHN0aWxsCi0gKiB1bmRlciBkZXZlbG9wbWVudCBhbmQgZXhwZWN0ZWQgdG8gY2hhbmdlIHNpZ25pZmljYW50bHkgYmVmb3JlIHJlYWNoaW5nCi0gKiBzdGFiaWxpdHkuIEl0IGlzIGF2YWlsYWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbQotICogcGlvbmVlcmluZyBhZG9wdGVycyBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IGFueSBjb2RlIHRoYXQgdXNlcyB0aGlzIEFQSQotICogd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJyb2tlbiAocmVwZWF0ZWRseSkgYXMgdGhlIEFQSSBldm9sdmVzLgotICogCi0gKiBUaGlzIGludGVyZmFjZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2xpZW50cy4KLSAqLwotcHVibGljIGludGVyZmFjZSBUYWJsZSBleHRlbmRzIERhdGFiYXNlT2JqZWN0IHsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgdGFibGUncyBzY2hlbWEuCi0JICovCi0JU2NoZW1hIGdldFNjaGVtYSgpOwotCi0KLQkvLyAqKioqKioqKioqIGNvbHVtbnMgKioqKioqKioqKgotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB0YWJsZSdzIGNvbHVtbnMuCi0JICovCi0JSXRlcmF0b3I8Q29sdW1uPiBjb2x1bW5zKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSB0YWJsZSBjb250YWlucy4KLQkgKi8KLQlpbnQgY29sdW1uc1NpemUoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgY29sdW1uIHdpdGggc3BlY2lmaWVkIG5hbWUuIFRoZSBuYW1lIG11c3QgYmUgYW4gZXhhY3QgbWF0Y2gKLQkgKiBvZiB0aGUgY29sdW1uJ3MgbmFtZS4KLQkgKiBAc2VlICNnZXRDb2x1bW5Gb3JJZGVudGlmaWVyKFN0cmluZykKLQkgKi8KLQlDb2x1bW4gZ2V0Q29sdW1uTmFtZWQoU3RyaW5nIG5hbWUpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSB0YWJsZSdzIGNvbHVtbiBpZGVudGlmZXJzLCBzb3J0ZWQgYnkgbmFtZS4KLQkgKi8KLQlJdGVyYXRvcjxTdHJpbmc+IHNvcnRlZENvbHVtbklkZW50aWZpZXJzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGNvbHVtbiBmb3IgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLiBUaGUgaWRlbnRpZmllciBzaG91bGQKLQkgKiBiZSBhbiBTUUwgaWRlbnRpZmllciAoaS5lLiBxdW90ZWQgd2hlbiBjYXNlLXNlbnNpdGl2ZSBvciBjb250YWluaW5nCi0JICogc3BlY2lhbCBjaGFyYWN0ZXJzLCB1bnF1b3RlZCBvdGhlcndpc2UpLgotCSAqIEBzZWUgI2dldENvbHVtbk5hbWVkKFN0cmluZykKLQkgKi8KLQlDb2x1bW4gZ2V0Q29sdW1uRm9ySWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcik7Ci0KLQotCS8vICoqKioqKioqKiogcHJpbWFyeSBrZXkgY29sdW1ucyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHRhYmxlJ3MgcHJpbWFyeSBrZXkgY29sdW1ucy4KLQkgKi8KLQlJdGVyYXRvcjxDb2x1bW4+IHByaW1hcnlLZXlDb2x1bW5zKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwcmltYXJ5IGtleSBjb2x1bW5zIHRoZSB0YWJsZSBjb250YWlucy4KLQkgKi8KLQlpbnQgcHJpbWFyeUtleUNvbHVtbnNTaXplKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHRhYmxlJ3Mgc2luZ2xlIHByaW1hcnkga2V5IGNvbHVtbi4gVGhyb3cgYW4KLQkgKiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIHRhYmxlIGhhcyBtb3JlIHRoYW4gb25lIHByaW1hcnkga2V5IGNvbHVtbi4KLQkgKi8KLQlDb2x1bW4gZ2V0UHJpbWFyeUtleUNvbHVtbigpOwotCi0KLQkvLyAqKioqKioqKioqIGZvcmVpZ24ga2V5cyAqKioqKioqKioqCi0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHRhYmxlJ3MgZm9yZWlnbiBrZXlzLgotCSAqLwotCUl0ZXJhdG9yPEZvcmVpZ25LZXk+IGZvcmVpZ25LZXlzKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmb3JlaWduIGtleXMgdGhlIHRhYmxlIGNvbnRhaW5zLgotCSAqLwotCWludCBmb3JlaWduS2V5c1NpemUoKTsKLQotCi0JLy8gKioqKioqKioqKiBqb2luIHRhYmxlIHN1cHBvcnQgKioqKioqKioqKgotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIHRhYmxlIGlzIHBvc3NpYmx5IGEgImpvaW4iIHRhYmxlCi0JICogKGkuZS4gaXQgY29udGFpbnMgb25seSAyIGZvcmVpZ24ga2V5cykuIFdoZXRoZXIgdGhlIHRhYmxlICphY3R1YWxseSogaXMKLQkgKiBhICJqb2luIiB0YWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGRhdGFiYXNlIGRlc2lnbi4KLQkgKi8KLQlib29sZWFuIGlzUG9zc2libGVKb2luVGFibGUoKTsKLQotCS8qKgotCSAqIEFzc3VtaW5nIHRoZSB0YWJsZSBpcyBhICJqb2luIiB0YWJsZSwgcmV0dXJuIHRoZSBmb3JlaWduIGtleSB0byB0aGUKLQkgKiAib3duaW5nIiB0YWJsZS4KLQkgKiBAc2VlICNpc1Bvc3NpYmxlSm9pblRhYmxlKCkKLQkgKi8KLQlGb3JlaWduS2V5IGdldEpvaW5UYWJsZU93bmluZ0ZvcmVpZ25LZXkoKTsKLQotCS8qKgotCSAqIEFzc3VtaW5nIHRoZSB0YWJsZSBpcyBhICJqb2luIiB0YWJsZSwgcmV0dXJuIHRoZSBmb3JlaWduIGtleSB0byB0aGUKLQkgKiAibm9uLW93bmluZyIgdGFibGUuCi0JICogQHNlZSAjaXNQb3NzaWJsZUpvaW5UYWJsZSgpCi0JICovCi0JRm9yZWlnbktleSBnZXRKb2luVGFibGVOb25Pd25pbmdGb3JlaWduS2V5KCk7Ci0KLQkvKioKLQkgKiBBc3N1bWluZyB0aGUgdGFibGUgaXMgYSAiam9pbiIgdGFibGUsIHJldHVybiB3aGV0aGVyIGl0cyBuYW1lIG1hdGNoZXMKLQkgKiB0aGUgSlBBIGRlZmF1bHQgKGkuZS4gIk9XTklOR1RBQkxFX05PTk9XTklOR1RBQkxFIikuCi0JICogQHNlZSAjaXNQb3NzaWJsZUpvaW5UYWJsZSgpCi0JICovCi0JYm9vbGVhbiBqb2luVGFibGVOYW1lSXNEZWZhdWx0KCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENhdGFsb2dXcmFwcGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBDYXRhbG9nV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFhMzY2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENhdGFsb2dXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNhdGFsb2c7Ci0KLS8qKgotICogV3JhcCBhIERUUCBDYXRhbG9nCi0gKi8KLWZpbmFsIGNsYXNzIERUUENhdGFsb2dXcmFwcGVyCi0JZXh0ZW5kcyBEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyCi0JaW1wbGVtZW50cyBDYXRhbG9nCi17Ci0JLy8gdGhlIHdyYXBwZWQgRFRQIGNhdGFsb2cKLQlwcml2YXRlIGZpbmFsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGR0cENhdGFsb2c7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0b3IgKioqKioqKioqKgotCi0JRFRQQ2F0YWxvZ1dyYXBwZXIoRFRQRGF0YWJhc2VXcmFwcGVyIGRhdGFiYXNlLCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZyBkdHBDYXRhbG9nKSB7Ci0JCXN1cGVyKGRhdGFiYXNlLCBkdHBDYXRhbG9nKTsKLQkJdGhpcy5kdHBDYXRhbG9nID0gZHRwQ2F0YWxvZzsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRFRQV3JhcHBlciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBjYXRhbG9nT2JqZWN0Q2hhbmdlZCgpIHsKLQkJc3VwZXIuY2F0YWxvZ09iamVjdENoYW5nZWQoKTsKLQkJdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLmNhdGFsb2dDaGFuZ2VkKHRoaXMpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyIGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCUxpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYT4gZ2V0RFRQU2NoZW1hdGEoKSB7Ci0JCXJldHVybiB0aGlzLmR0cENhdGFsb2cuZ2V0U2NoZW1hcygpOwotCX0KLQotCUBPdmVycmlkZQotCURUUFNjaGVtYVdyYXBwZXIgZ2V0U2NoZW1hKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEgZHRwU2NoZW1hKSB7Ci0JCS8vIHRyeSB0byBzaG9ydC1jaXJjdWl0IHRoZSBzZWFyY2gKLQkJcmV0dXJuIHRoaXMud3JhcHMoZHRwU2NoZW1hLmdldENhdGFsb2coKSkgPwotCQkJCQkJdGhpcy5nZXRTY2hlbWFfKGR0cFNjaGVtYSkKLQkJCQkJOgotCQkJCQkJdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZyb21DYXRhbG9ncyhkdHBTY2hlbWEpOwotCX0KLQotCUBPdmVycmlkZQotCURUUFRhYmxlV3JhcHBlciBnZXRUYWJsZShvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgZHRwVGFibGUpIHsKLQkJLy8gdHJ5IHRvIHNob3J0LWNpcmN1aXQgdGhlIHNlYXJjaAotCQlyZXR1cm4gdGhpcy53cmFwcyhkdHBUYWJsZS5nZXRTY2hlbWEoKS5nZXRDYXRhbG9nKCkpID8KLQkJCQkJCXRoaXMuZ2V0VGFibGVfKGR0cFRhYmxlKQotCQkJCQk6Ci0JCQkJCQl0aGlzLmdldERhdGFiYXNlKCkuZ2V0VGFibGVGcm9tQ2F0YWxvZ3MoZHRwVGFibGUpOwotCX0KLQotCUBPdmVycmlkZQotCURUUENvbHVtbldyYXBwZXIgZ2V0Q29sdW1uKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5Db2x1bW4gZHRwQ29sdW1uKSB7Ci0JCS8vIHRyeSB0byBzaG9ydC1jaXJjdWl0IHRoZSBzZWFyY2gKLQkJcmV0dXJuIHRoaXMud3JhcHMoZHRwQ29sdW1uLmdldFRhYmxlKCkuZ2V0U2NoZW1hKCkuZ2V0Q2F0YWxvZygpKSA/Ci0JCQkJCQl0aGlzLmdldENvbHVtbl8oZHRwQ29sdW1uKQotCQkJCQk6Ci0JCQkJCQl0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q29sdW1uRnJvbUNhdGFsb2dzKGR0cENvbHVtbik7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIERhdGFiYXNlT2JqZWN0IGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwQ2F0YWxvZy5nZXROYW1lKCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JYm9vbGVhbiB3cmFwcyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZyBjYXRhbG9nKSB7Ci0JCXJldHVybiB0aGlzLmR0cENhdGFsb2cgPT0gY2F0YWxvZzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENvbHVtbldyYXBwZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENvbHVtbldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhZjlhYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBDb2x1bW5XcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLmRiZGVmaW5pdGlvbi5QcmVkZWZpbmVkRGF0YVR5cGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmRhdGF0eXBlcy5DaGFyYWN0ZXJTdHJpbmdEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5kYXRhdHlwZXMuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuZGF0YXR5cGVzLkV4YWN0TnVtZXJpY0RhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmRhdGF0eXBlcy5OdW1lcmljYWxEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5kYXRhdHlwZXMuUHJlZGVmaW5lZERhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmRhdGF0eXBlcy5QcmltaXRpdmVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuSmF2YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TaW1wbGVKYXZhVHlwZTsKLQotLyoqCi0gKiAgV3JhcCBhIERUUCBDb2x1bW4KLSAqLwotZmluYWwgY2xhc3MgRFRQQ29sdW1uV3JhcHBlcgotCWV4dGVuZHMgRFRQRGF0YWJhc2VPYmplY3RXcmFwcGVyCi0JaW1wbGVtZW50cyBDb2x1bW4KLXsKLQkvLyB0aGUgd3JhcHBlZCBEVFAgY29sdW1uCi0JcHJpdmF0ZSBmaW5hbCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGR0cENvbHVtbjsKLQotCi0JLy8gKioqKioqKioqKiBjb25zdHJ1Y3RvciAqKioqKioqKioqCi0KLQlEVFBDb2x1bW5XcmFwcGVyKERUUFRhYmxlV3JhcHBlciB0YWJsZSwgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLkNvbHVtbiBkdHBDb2x1bW4pIHsKLQkJc3VwZXIodGFibGUsIGR0cENvbHVtbik7Ci0JCXRoaXMuZHRwQ29sdW1uID0gZHRwQ29sdW1uOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFBXcmFwcGVyIGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIGNhdGFsb2dPYmplY3RDaGFuZ2VkKCkgewotCQlzdXBlci5jYXRhbG9nT2JqZWN0Q2hhbmdlZCgpOwotCQl0aGlzLmdldENvbm5lY3Rpb25Qcm9maWxlKCkuY29sdW1uQ2hhbmdlZCh0aGlzKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogQ29sdW1uIGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwQ29sdW1uLmdldE5hbWUoKTsKLQl9Ci0KLQlwdWJsaWMgRFRQVGFibGVXcmFwcGVyIGdldFRhYmxlKCkgewotCQlyZXR1cm4gKERUUFRhYmxlV3JhcHBlcikgdGhpcy5nZXRQYXJlbnQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1BhcnRPZlByaW1hcnlLZXkoKSB7Ci0JCXJldHVybiB0aGlzLmdldFRhYmxlKCkucHJpbWFyeUtleUNvbHVtbnNDb250YWlucyh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1BhcnRPZkZvcmVpZ25LZXkoKSB7Ci0JCXJldHVybiB0aGlzLmdldFRhYmxlKCkuZm9yZWlnbktleUJhc2VDb2x1bW5zQ29udGFpbnModGhpcyk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNQYXJ0T2ZVbmlxdWVDb25zdHJhaW50KCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb2x1bW4uaXNQYXJ0T2ZVbmlxdWVDb25zdHJhaW50KCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNOdWxsYWJsZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwQ29sdW1uLmlzTnVsbGFibGUoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldERhdGFUeXBlTmFtZSgpIHsKLQkJRGF0YVR5cGUgZGF0YVR5cGUgPSB0aGlzLmR0cENvbHVtbi5nZXREYXRhVHlwZSgpOwotCQlyZXR1cm4gKGRhdGFUeXBlID09IG51bGwpID8gbnVsbCA6IGRhdGFUeXBlLmdldE5hbWUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc051bWVyaWMoKSB7Ci0JCXJldHVybiB0aGlzLmR0cENvbHVtbi5nZXREYXRhVHlwZSgpIGluc3RhbmNlb2YgTnVtZXJpY2FsRGF0YVR5cGU7Ci0JfQkKLQotCXB1YmxpYyBpbnQgZ2V0UHJlY2lzaW9uKCkgewotCQlEYXRhVHlwZSBkYXRhVHlwZSA9IHRoaXMuZHRwQ29sdW1uLmdldERhdGFUeXBlKCk7Ci0JCXJldHVybiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBOdW1lcmljYWxEYXRhVHlwZSkgPwotCQkJCQkJKChOdW1lcmljYWxEYXRhVHlwZSkgZGF0YVR5cGUpLmdldFByZWNpc2lvbigpCi0JCQkJCToKLQkJCQkJCS0xOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0U2NhbGUoKXsKLQkJRGF0YVR5cGUgZGF0YVR5cGUgPSB0aGlzLmR0cENvbHVtbi5nZXREYXRhVHlwZSgpOwotCQlyZXR1cm4gKGRhdGFUeXBlIGluc3RhbmNlb2YgRXhhY3ROdW1lcmljRGF0YVR5cGUpID8KLQkJCQkJCSgoRXhhY3ROdW1lcmljRGF0YVR5cGUpIGRhdGFUeXBlKS5nZXRTY2FsZSgpCi0JCQkJCToKLQkJCQkJCS0xOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQlEYXRhVHlwZSBkYXRhVHlwZSA9IHRoaXMuZHRwQ29sdW1uLmdldERhdGFUeXBlKCk7Ci0JCXJldHVybiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBDaGFyYWN0ZXJTdHJpbmdEYXRhVHlwZSkgPwotCQkJCQkJKChDaGFyYWN0ZXJTdHJpbmdEYXRhVHlwZSkgZGF0YVR5cGUpLmdldExlbmd0aCgpCi0JCQkJCToKLQkJCQkJCS0xOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzTE9CKCkgewotCQlEYXRhVHlwZSBkYXRhVHlwZSA9IHRoaXMuZHRwQ29sdW1uLmdldERhdGFUeXBlKCk7Ci0JCXJldHVybiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBQcmVkZWZpbmVkRGF0YVR5cGUpID8KLQkJCQkJCXByaW1pdGl2ZVR5cGVJc0xvYigoKFByZWRlZmluZWREYXRhVHlwZSkgZGF0YVR5cGUpLmdldFByaW1pdGl2ZVR5cGUoKSkKLQkJCQkJOgotCQkJCQkJZmFsc2U7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5nZXRKYXZhVHlwZSgpLmRlY2xhcmF0aW9uKCk7Ci0JfQotCi0JcHVibGljIEphdmFUeXBlIGdldEphdmFUeXBlKCkgewotCQlEYXRhVHlwZSBkYXRhVHlwZSA9IHRoaXMuZHRwQ29sdW1uLmdldERhdGFUeXBlKCk7Ci0JCXJldHVybiAoZGF0YVR5cGUgaW5zdGFuY2VvZiBQcmVkZWZpbmVkRGF0YVR5cGUpID8KLQkJCWNvbnZlcnRUb0pQQUphdmFUeXBlKHRoaXMuZ2V0SmF2YVR5cGUoKFByZWRlZmluZWREYXRhVHlwZSkgZGF0YVR5cGUpKQotCQk6Ci0JCQlERUZBVUxUX0pBVkFfVFlQRTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFByaW1hcnlLZXlKYXZhVHlwZURlY2xhcmF0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5nZXRQcmltYXJ5S2V5SmF2YVR5cGUoKS5kZWNsYXJhdGlvbigpOwotCX0KLQotCXB1YmxpYyBKYXZhVHlwZSBnZXRQcmltYXJ5S2V5SmF2YVR5cGUoKSB7Ci0JCXJldHVybiBjb252ZXJ0VG9KUEFQcmltYXJ5S2V5SmF2YVR5cGUodGhpcy5nZXRKYXZhVHlwZSgpKTsKLQl9Ci0KLQlwcml2YXRlIEphdmFUeXBlIGdldEphdmFUeXBlKFByZWRlZmluZWREYXRhVHlwZSBkYXRhVHlwZSkgewotCQkvLyB0aGlzIGlzIGp1c3QgYSBiaXQgaGFja3k6IG1vdmluZyBmcm9tIGEgdHlwZSBkZWNsYXJhdGlvbiB0byBhIGNsYXNzIG5hbWUgdG8gYSB0eXBlIGRlY2xhcmF0aW9uLi4uCi0JCVN0cmluZyBkdHBKYXZhQ2xhc3NOYW1lID0gdGhpcy5nZXREZWZpbml0aW9uKGRhdGFUeXBlKS5nZXRKYXZhQ2xhc3NOYW1lKCk7Ci0JCXJldHVybiBuZXcgU2ltcGxlSmF2YVR5cGUoQ2xhc3NUb29scy5jbGFzc05hbWVGb3JUeXBlRGVjbGFyYXRpb24oZHRwSmF2YUNsYXNzTmFtZSkpOwotCX0KLQotCXByaXZhdGUgUHJlZGVmaW5lZERhdGFUeXBlRGVmaW5pdGlvbiBnZXREZWZpbml0aW9uKFByZWRlZmluZWREYXRhVHlwZSBkYXRhVHlwZSkgewotCQlyZXR1cm4gdGhpcy5nZXREYXRhYmFzZSgpLmdldERUUERlZmluaXRpb24oKS5nZXRQcmVkZWZpbmVkRGF0YVR5cGVEZWZpbml0aW9uKGRhdGFUeXBlLmdldE5hbWUoKSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JYm9vbGVhbiB3cmFwcyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGNvbHVtbikgewotCQlyZXR1cm4gdGhpcy5kdHBDb2x1bW4gPT0gY29sdW1uOwotCX0KLQotCUBPdmVycmlkZQotCXZvaWQgY2xlYXIoKSB7Ci0JCS8vIG5vIHN0YXRlIHRvIGNsZWFyCi0JfQotCi0KLQkvLyAqKioqKioqKioqIHN0YXRpYyBtZXRob2RzICoqKioqKioqKioKLQotCS8qKgotCSAqIFRoZSBKREJDIHNwZWMgc2F5cyBKREJDIGRyaXZlcnMgc2hvdWxkIGJlIGFibGUgdG8gbWFwIEJMT0JzIGFuZCBDTE9CcwotCSAqIGRpcmVjdGx5LCBidXQgdGhlIEpQQSBzcGVjIGRvZXMgbm90IGFsbG93IHRoZW0uCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSmF2YVR5cGUgY29udmVydFRvSlBBSmF2YVR5cGUoSmF2YVR5cGUgamF2YVR5cGUpIHsKLQkJaWYgKGphdmFUeXBlLmVxdWFscyhCTE9CX0pBVkFfVFlQRSkpIHsKLQkJCXJldHVybiBCWVRFX0FSUkFZX0pBVkFfVFlQRTsKLQkJfQotCQlpZiAoamF2YVR5cGUuZXF1YWxzKENMT0JfSkFWQV9UWVBFKSkgewotCQkJcmV0dXJuIFNUUklOR19KQVZBX1RZUEU7Ci0JCX0KLQkJcmV0dXJuIGphdmFUeXBlOwotCX0KLQotCS8qKgotCSAqIFRoZSBKUEEgc3BlYyBbMi4xLjRdIHNheXMgb25seSB0aGUgZm9sbG93aW5nIHR5cGVzIGFyZSBhbGxvd2VkIGluCi0JICogcHJpbWFyeSBrZXkgZmllbGRzOgotCSAqICAgICBbdmFyaWFibGVdIHByaW1pdGl2ZXMKLQkgKiAgICAgW3ZhcmlhYmxlXSBwcmltaXRpdmUgd3JhcHBlcnMKLQkgKiAgICAgamF2YS5sYW5nLlN0cmluZwotCSAqICAgICBqYXZhLnV0aWwuRGF0ZQotCSAqICAgICBqYXZhLnNxbC5EYXRlCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSmF2YVR5cGUgY29udmVydFRvSlBBUHJpbWFyeUtleUphdmFUeXBlKEphdmFUeXBlIGphdmFUeXBlKSB7Ci0JCWlmIChqYXZhVHlwZS5pc1ZhcmlhYmxlUHJpbWl0aXZlKCkKLQkJCQl8fCBqYXZhVHlwZS5pc1ZhcmlhYmxlUHJpbWl0aXZlV3JhcHBlcigpCi0JCQkJfHwgamF2YVR5cGUuZXF1YWxzKFNUUklOR19KQVZBX1RZUEUpCi0JCQkJfHwgamF2YVR5cGUuZXF1YWxzKFVUSUxfREFURV9KQVZBX1RZUEUpCi0JCQkJfHwgamF2YVR5cGUuZXF1YWxzKFNRTF9EQVRFX0pBVkFfVFlQRSkpIHsKLQkJCXJldHVybiBqYXZhVHlwZTsKLQkJfQotCQlpZiAoamF2YVR5cGUuZXF1YWxzKEJJR19ERUNJTUFMX0pBVkFfVFlQRSkpIHsKLQkJCXJldHVybiBMT05HX0pBVkFfVFlQRTsgIC8vID8/Ci0JCX0KLQkJaWYgKGphdmFUeXBlLmVxdWFscyhTUUxfVElNRV9KQVZBX1RZUEUpKSB7Ci0JCQlyZXR1cm4gVVRJTF9EQVRFX0pBVkFfVFlQRTsgIC8vID8/PwotCQl9Ci0JCWlmIChqYXZhVHlwZS5lcXVhbHMoU1FMX1RJTUVTVEFNUF9KQVZBX1RZUEUpKSB7Ci0JCQlyZXR1cm4gVVRJTF9EQVRFX0pBVkFfVFlQRTsgIC8vID8/PwotCQl9Ci0JCS8vIGFsbCB0aGUgb3RoZXIgdHlwaWNhbCB0eXBlcyBhcmUgcHJldHR5IG11Y2ggdW4tbWFwcGFibGUgLSByZXR1cm4gU3RyaW5nKD8pCi0JCXJldHVybiBTVFJJTkdfSkFWQV9UWVBFOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gcHJpbWl0aXZlVHlwZUlzTG9iKFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSkgewotCQlyZXR1cm4gKHByaW1pdGl2ZVR5cGUgPT0gUHJpbWl0aXZlVHlwZS5CSU5BUllfTEFSR0VfT0JKRUNUX0xJVEVSQUwpCi0JCQkJfHwgKHByaW1pdGl2ZVR5cGUgPT0gUHJpbWl0aXZlVHlwZS5DSEFSQUNURVJfTEFSR0VfT0JKRUNUX0xJVEVSQUwpCi0JCQkJfHwgKHByaW1pdGl2ZVR5cGUgPT0gUHJpbWl0aXZlVHlwZS5OQVRJT05BTF9DSEFSQUNURVJfTEFSR0VfT0JKRUNUX0xJVEVSQUwpOwotCX0KLQotCi0JLy8gKioqKiogc29tZSBjb25zdGFudHMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGNvbHVtbiB0byBhIEphdmEgYXR0cmlidXRlCi0JLy8gVE9ETyBPYmplY3QgaXMgdGhlIGRlZmF1bHQ/Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgREVGQVVMVF9KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUoamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBKYXZhVHlwZSBCTE9CX0pBVkFfVFlQRSA9IG5ldyBTaW1wbGVKYXZhVHlwZShqYXZhLnNxbC5CbG9iLmNsYXNzKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBKYXZhVHlwZSBCWVRFX0FSUkFZX0pBVkFfVFlQRSA9IG5ldyBTaW1wbGVKYXZhVHlwZShieXRlW10uY2xhc3MpOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgQ0xPQl9KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUoamF2YS5zcWwuQ2xvYi5jbGFzcyk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgU1RSSU5HX0pBVkFfVFlQRSA9IG5ldyBTaW1wbGVKYXZhVHlwZShqYXZhLmxhbmcuU3RyaW5nLmNsYXNzKTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIEphdmFUeXBlIFVUSUxfREFURV9KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUoamF2YS51dGlsLkRhdGUuY2xhc3MpOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIEphdmFUeXBlIFNRTF9EQVRFX0pBVkFfVFlQRSA9IG5ldyBTaW1wbGVKYXZhVHlwZShqYXZhLnNxbC5EYXRlLmNsYXNzKTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBKYXZhVHlwZSBTUUxfVElNRV9KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUoamF2YS5zcWwuVGltZS5jbGFzcyk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgU1FMX1RJTUVTVEFNUF9KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUoamF2YS5zcWwuVGltZXN0YW1wLmNsYXNzKTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIEphdmFUeXBlIEJJR19ERUNJTUFMX0pBVkFfVFlQRSA9IG5ldyBTaW1wbGVKYXZhVHlwZShqYXZhLm1hdGguQmlnRGVjaW1hbC5jbGFzcyk7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgTE9OR19KQVZBX1RZUEUgPSBuZXcgU2ltcGxlSmF2YVR5cGUobG9uZy5jbGFzcyk7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzY2IyYzcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LklDb25uZWN0aW9uUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LklQcm9maWxlTGlzdGVuZXIxOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuUHJvZmlsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbm5lY3Rpb25Qcm9maWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db25uZWN0aW9uUHJvZmlsZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkRhdGFiYXNlRmluZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuQXJyYXlJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuVHJhbnNmb3JtYXRpb25JdGVyYXRvcjsKLQotLyoqCi0gKiBXcmFwIHRoZSBEVFAgUHJvZmlsZU1hbmFnZXIgaW4geWV0IGFub3RoZXIgc2luZ2xldG9uLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRFRQQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5Ci0JaW1wbGVtZW50cyBDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkKLXsKLQlwcml2YXRlIFByb2ZpbGVNYW5hZ2VyIGR0cFByb2ZpbGVNYW5hZ2VyOwotCi0JcHJpdmF0ZSBMb2NhbFByb2ZpbGVMaXN0ZW5lciBwcm9maWxlTGlzdGVuZXI7Ci0KLQotCS8vICoqKioqKioqKiogc2luZ2xldG9uICoqKioqKioqKioKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIERUUENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBEVFBDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkoKTsKLQotCXB1YmxpYyBzdGF0aWMgRFRQQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogJ3ByaXZhdGUnIHRvIGVuc3VyZSBzaW5nbGV0b24KLQkgKi8KLQlwcml2YXRlIERUUENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbGlmZWN5Y2xlICoqKioqKioqKioKLQotCS8qKgotCSAqIGNhbGxlZCBieSBwbHVnLWluCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0KCkgewotCQl0aGlzLmR0cFByb2ZpbGVNYW5hZ2VyID0gUHJvZmlsZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJdGhpcy5wcm9maWxlTGlzdGVuZXIgPSBuZXcgTG9jYWxQcm9maWxlTGlzdGVuZXIoKTsKLQkJdGhpcy5kdHBQcm9maWxlTWFuYWdlci5hZGRQcm9maWxlTGlzdGVuZXIodGhpcy5wcm9maWxlTGlzdGVuZXIpOwotCX0KLQotCS8qKgotCSAqIGNhbGxlZCBieSBwbHVnLWluCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3AoKSB7Ci0JCXRoaXMuZHRwUHJvZmlsZU1hbmFnZXIucmVtb3ZlUHJvZmlsZUxpc3RlbmVyKHRoaXMucHJvZmlsZUxpc3RlbmVyKTsKLQkJdGhpcy5wcm9maWxlTGlzdGVuZXIgPSBudWxsOwotCQl0aGlzLmR0cFByb2ZpbGVNYW5hZ2VyID0gbnVsbDsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogY29ubmVjdGlvbiBwcm9maWxlcyAqKioqKioqKioqCi0KLQlwdWJsaWMgc3luY2hyb25pemVkIENvbm5lY3Rpb25Qcm9maWxlIGJ1aWxkQ29ubmVjdGlvblByb2ZpbGUoU3RyaW5nIG5hbWUsIERhdGFiYXNlRmluZGVyIGZpbmRlcikgewotCQlmb3IgKElDb25uZWN0aW9uUHJvZmlsZSBkdHBQcm9maWxlIDogdGhpcy5kdHBQcm9maWxlTWFuYWdlci5nZXRQcm9maWxlcygpKSB7Ci0JCQlpZiAoZHRwUHJvZmlsZS5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSB7Ci0JCQkJcmV0dXJuIG5ldyBEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIoZHRwUHJvZmlsZSwgZmluZGVyKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgQ29ubmVjdGlvblByb2ZpbGUgYnVpbGRDb25uZWN0aW9uUHJvZmlsZShTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gdGhpcy5idWlsZENvbm5lY3Rpb25Qcm9maWxlKG5hbWUsIERhdGFiYXNlRmluZGVyLlNpbXBsZS5pbnN0YW5jZSgpKTsKLQl9Ci0KLQlwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBjb25uZWN0aW9uUHJvZmlsZU5hbWVzKCkgewotCQlyZXR1cm4gbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8SUNvbm5lY3Rpb25Qcm9maWxlLCBTdHJpbmc+KHRoaXMuZHRwQ29ubmVjdGlvblByb2ZpbGVzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyB0cmFuc2Zvcm0oSUNvbm5lY3Rpb25Qcm9maWxlIGR0cFByb2ZpbGUpIHsKLQkJCQkgcmV0dXJuIGR0cFByb2ZpbGUuZ2V0TmFtZSgpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIEl0ZXJhdG9yPElDb25uZWN0aW9uUHJvZmlsZT4gZHRwQ29ubmVjdGlvblByb2ZpbGVzKCkgewotCQlyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3I8SUNvbm5lY3Rpb25Qcm9maWxlPih0aGlzLmR0cFByb2ZpbGVNYW5hZ2VyLmdldFByb2ZpbGVzKCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBsaXN0ZW5lcnMgKioqKioqKioqKgotCi0JcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcihDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCXRoaXMucHJvZmlsZUxpc3RlbmVyLmFkZENvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIoQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lciBsaXN0ZW5lcikgewotCQl0aGlzLnByb2ZpbGVMaXN0ZW5lci5yZW1vdmVDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbGlzdGVuZXIgKioqKioqKioqKgotCi0JLyoqCi0JICogRm9yd2FyZCBldmVudHMgdG8gdGhlIGZhY3RvcnkncyBsaXN0ZW5lcnMuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTG9jYWxQcm9maWxlTGlzdGVuZXIgaW1wbGVtZW50cyBJUHJvZmlsZUxpc3RlbmVyMSB7Ci0JCXByaXZhdGUgTGlzdGVuZXJMaXN0PENvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXI+IGxpc3RlbmVyTGlzdCA9IG5ldyBMaXN0ZW5lckxpc3Q8Q29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcj4oQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lci5jbGFzcyk7Ci0KLQkJTG9jYWxQcm9maWxlTGlzdGVuZXIoKSB7Ci0JCQlzdXBlcigpOwotCQl9Ci0KLQkJdm9pZCBhZGRDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyKENvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCXRoaXMubGlzdGVuZXJMaXN0LmFkZChsaXN0ZW5lcik7Ci0JCX0KLQotCQl2b2lkIHJlbW92ZUNvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIoQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJdGhpcy5saXN0ZW5lckxpc3QucmVtb3ZlKGxpc3RlbmVyKTsKLQkJfQotCi0JCS8vICoqKioqKioqKiogSVByb2ZpbGVMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQkJcHVibGljIHZvaWQgcHJvZmlsZUFkZGVkKElDb25uZWN0aW9uUHJvZmlsZSBkdHBQcm9maWxlKSB7Ci0JCQlTdHJpbmcgbmFtZSA9IGR0cFByb2ZpbGUuZ2V0TmFtZSgpOwotCQkJZm9yIChDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyIDogdGhpcy5saXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCkpIHsKLQkJCQlsaXN0ZW5lci5jb25uZWN0aW9uUHJvZmlsZUFkZGVkKG5hbWUpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgcHJvZmlsZUNoYW5nZWQoSUNvbm5lY3Rpb25Qcm9maWxlIGR0cFByb2ZpbGUsIFN0cmluZyBvbGROYW1lLCBTdHJpbmcgb2xkRGVzY3JpcHRpb24sIEJvb2xlYW4gb2xkQXV0b0Nvbm5lY3QpIHsKLQkJCVN0cmluZyBuZXdOYW1lID0gZHRwUHJvZmlsZS5nZXROYW1lKCk7Ci0JCQlpZiAoICEgbmV3TmFtZS5lcXVhbHMob2xkTmFtZSkpIHsKLQkJCQlmb3IgKENvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCQlsaXN0ZW5lci5jb25uZWN0aW9uUHJvZmlsZVJlbmFtZWQob2xkTmFtZSwgbmV3TmFtZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgcHJvZmlsZUNoYW5nZWQoSUNvbm5lY3Rpb25Qcm9maWxlIGR0cFByb2ZpbGUpIHsKLQkJCS8vIHRoaXMgbWV0aG9kIHNob3VsZG4ndCBiZSBjYWxsZWQgb24gSVByb2ZpbGVMaXN0ZW5lcjEKLQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcHJvZmlsZURlbGV0ZWQoSUNvbm5lY3Rpb25Qcm9maWxlIGR0cFByb2ZpbGUpIHsKLQkJCVN0cmluZyBuYW1lID0gZHRwUHJvZmlsZS5nZXROYW1lKCk7Ci0JCQlmb3IgKENvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLmNvbm5lY3Rpb25Qcm9maWxlUmVtb3ZlZChuYW1lKTsKLQkJCX0KLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2I1NjNlLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5Db25uZWN0RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5JQ29ubmVjdGlvblByb2ZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5JTWFuYWdlZENvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5JTWFuYWdlZENvbm5lY3Rpb25PZmZsaW5lTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kcml2ZXJzLkRyaXZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kcml2ZXJzLmpkYmMuSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUuY29ubmVjdGlvbi5Db25uZWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuc3FsdG9vbHMuY29yZS5EYXRhYmFzZUlkZW50aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLnNxbHRvb2xzLmNvcmUucHJvZmlsZS5Qcm9maWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29ubmVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db25uZWN0aW9uUHJvZmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRGF0YWJhc2VGaW5kZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkRhdGFiYXNlT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLQotLyoqCi0gKiAgV3JhcCBhIERUUCBDb25uZWN0aW9uUHJvZmlsZQotICovCi1maW5hbCBjbGFzcyBEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIKLQlpbXBsZW1lbnRzIERUUERhdGFiYXNlT2JqZWN0LCBDb25uZWN0aW9uUHJvZmlsZQotewotCS8vIHRoZSB3cmFwcGVkIERUUCBjb25uZWN0aW9uIHByb2ZpbGUKLQlwcml2YXRlIGZpbmFsIElDb25uZWN0aW9uUHJvZmlsZSBkdHBDb25uZWN0aW9uUHJvZmlsZTsKLQotCS8vIGZpbmRlciBzdXBwbGllZCBieSB0aGUgSlBBIHBsYXRmb3JtIChkZXRlcm1pbmVzIGNhc2Utc2Vuc2l0aXZpdHksIGV0Yy4pCi0JcHJpdmF0ZSBmaW5hbCBEYXRhYmFzZUZpbmRlciBmaW5kZXI7Ci0KLQkvLyBjYWxsYmFjayBwYXNzZWQgdG8gdGhlIGZpbmRlcgotCXByaXZhdGUgZmluYWwgRGF0YWJhc2VGaW5kZXIuRGVmYXVsdENhbGxiYWNrIGRhdGFiYXNlRmluZGVyQ2FsbGJhY2s7Ci0KLQkvLyB0aGUgRFRQIG1hbmFnZWQgY29ubmVjdGlvbiB3ZSBsaXN0ZW4gdG8KLQlwcml2YXRlIGZpbmFsIElNYW5hZ2VkQ29ubmVjdGlvbiBkdHBNYW5hZ2VkQ29ubmVjdGlvbjsKLQotCS8vIGZvcndhcmQgZXZlbnRzIGZyb20gdGhlIERUUCBtYW5hZ2VkIGNvbm5lY3Rpb24gYWJvdmU7Ci0JLy8gd2UgbGlzdGVuIGFuZCBwcm9wYWdhdGUgZXZlbnRzIGlmZiB3ZSBoYXZlIGxpc3RlbmVycyBvdXJzZWx2ZXMKLQlwcml2YXRlIGZpbmFsIExvY2FsQ29ubmVjdGlvbkxpc3RlbmVyIGNvbm5lY3Rpb25MaXN0ZW5lcjsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQsIGFuZCBkZWxldGVkIGF0IGRpc2Nvbm5lY3QKLQlwcml2YXRlIERUUERhdGFiYXNlV3JhcHBlciBkYXRhYmFzZTsKLQotCi0JLy8gKioqKioqKioqKiBjb25zdGFudHMgKioqKioqKioqKgotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJVkVfRFRQX0NPTk5FQ1RJT05fVFlQRSA9ICJqYXZhLnNxbC5Db25uZWN0aW9uIjsgIC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPRkZMSU5FX0RUUF9DT05ORUNUSU9OX1RZUEUgPSBDb25uZWN0aW9uSW5mby5jbGFzcy5nZXROYW1lKCk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQUJBU0VfUFJPRFVDVF9QUk9QX0lEID0gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc2VydmVyLnZlcnNpb24iOyAgLy8kTk9OLU5MUy0xJAotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cnVjdG9yICoqKioqKioqKioKLQotCURUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlcihJQ29ubmVjdGlvblByb2ZpbGUgZHRwQ29ubmVjdGlvblByb2ZpbGUsIERhdGFiYXNlRmluZGVyIGZpbmRlcikgewotCQlzdXBlcigpOwotCQl0aGlzLmR0cENvbm5lY3Rpb25Qcm9maWxlID0gZHRwQ29ubmVjdGlvblByb2ZpbGU7Ci0JCXRoaXMuZmluZGVyID0gZmluZGVyOwotCQl0aGlzLmRhdGFiYXNlRmluZGVyQ2FsbGJhY2sgPSBuZXcgRGF0YWJhc2VGaW5kZXJDYWxsYmFjaygpOwotCQl0aGlzLmR0cE1hbmFnZWRDb25uZWN0aW9uID0gdGhpcy5idWlsZERUUE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JCXRoaXMuY29ubmVjdGlvbkxpc3RlbmVyID0gbmV3IExvY2FsQ29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCS8vIGRvbid0IGxpc3RlbiB0byB0aGUgbWFuYWdlZCBjb25uZWN0aW9uIHlldAotCX0KLQotCXByaXZhdGUgSU1hbmFnZWRDb25uZWN0aW9uIGJ1aWxkRFRQTWFuYWdlZENvbm5lY3Rpb24oKSB7Ci0JCVN0cmluZyBjb25uZWN0aW9uVHlwZSA9IHRoaXMuZHRwQ29ubmVjdGlvblByb2ZpbGUuc3VwcG9ydHNXb3JrT2ZmbGluZU1vZGUoKSA/Ci0JCQkJT0ZGTElORV9EVFBfQ09OTkVDVElPTl9UWVBFIDogTElWRV9EVFBfQ09OTkVDVElPTl9UWVBFOwotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS5nZXRNYW5hZ2VkQ29ubmVjdGlvbihjb25uZWN0aW9uVHlwZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIERhdGFiYXNlT2JqZWN0IGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwQ29ubmVjdGlvblByb2ZpbGUuZ2V0TmFtZSgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcihTdHJpbmcgamF2YUlkZW50aWZpZXIpIHsKLQkJLy8gY29ubmVjdGlvbiBwcm9maWxlcyBkbyBub3QgaGF2ZSAiaWRlbnRpZmllcnMiCi0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKLQkJLy8gY29ubmVjdGlvbiBwcm9maWxlcyBkbyBub3QgaGF2ZSAiaWRlbnRpZmllcnMiCi0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFBEYXRhYmFzZU9iamVjdCBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlwdWJsaWMgRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyIGdldENvbm5lY3Rpb25Qcm9maWxlKCkgewotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIERUUERhdGFiYXNlV3JhcHBlciBnZXREYXRhYmFzZSgpIHsKLQkJaWYgKHRoaXMuZGF0YWJhc2UgPT0gbnVsbCkgewotCQkJdGhpcy5kYXRhYmFzZSA9IHRoaXMuYnVpbGREYXRhYmFzZSgpOwotCQl9Ci0JCXJldHVybiB0aGlzLmRhdGFiYXNlOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBDb25uZWN0aW9uUHJvZmlsZSBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQkvLyAqKioqKiBwcm9wZXJ0aWVzCi0JcHVibGljIFN0cmluZyBnZXRQcm92aWRlcklEKCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS5nZXRQcm92aWRlcklkKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRJbnN0YW5jZUlEKCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS5nZXRJbnN0YW5jZUlEKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7Ci0JCXJldHVybiB0aGlzLmdldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5EQVRBQkFTRV9OQU1FX1BST1BfSUQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VQcm9kdWN0KCkgewotCQlyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShEQVRBQkFTRV9QUk9EVUNUX1BST1BfSUQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VWZW5kb3IoKSB7Ci0JCXJldHVybiB0aGlzLmdldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5EQVRBQkFTRV9WRU5ET1JfUFJPUF9JRCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKSB7Ci0JCXJldHVybiB0aGlzLmdldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5EQVRBQkFTRV9WRVJTSU9OX1BST1BfSUQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyQ2xhc3NOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuRFJJVkVSX0NMQVNTX1BST1BfSUQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VVJMKCkgewotCQlyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuVVJMX1BST1BfSUQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVzZXIgbmFtZS4KLQkgKiBBbGxvd3MgdXNlciBuYW1lIGNvbXBvc2VkIGJ5IG1vcmUgdGhhbiBvbmUgd29yZC4KLQkgKiBJZiB0aGUgdXNlciBuYW1lIGNvbnRhaW5zIGEga2V5d29yZCwgaXQgcmV0dXJucyB0aGUgZmlyc3Qgd29yZCBvbmx5LgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB7Ci0JCVN0cmluZyB1c2VyTmFtZSA9IHRoaXMuZ2V0UHJvcGVydHkoSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzLlVTRVJOQU1FX1BST1BfSUQpOwotCQl1c2VyTmFtZSA9IHVzZXJOYW1lLnRyaW0oKTsgCi0JCVN0cmluZ1tdIG5hbWVzID0gIHVzZXJOYW1lLnNwbGl0KCJcXHMrIik7CS8vJE5PTi1OTFMtMSQKLQkJaWYobmFtZXMubGVuZ3RoID09IDMpIHsgLy8gMjA4OTQ2IGhhbmRsZSB1c2VybmFtZSBsaWtlICJzeXMgYXMgc3lzZGJhIiBvbiBPcmFjbGUKLQkJICAgIGlmKHRoaXMubmFtZUlzS2V5d29yZChuYW1lc1sxXSkpIHsKLQkJICAgIAlyZXR1cm4gbmFtZXNbMF07Ci0JCSAgICB9Ci0JCX0KLQkJcmV0dXJuIHVzZXJOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VXNlclBhc3N3b3JkKCkgewotCQlyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuUEFTU1dPUkRfUFJPUF9JRCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uSUQoKSB7Ci0JCXJldHVybiB0aGlzLmdldFByb3BlcnR5KERSSVZFUl9ERUZJTklUSU9OX1BST1BfSUQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVySmFyTGlzdCgpIHsKLQkJcmV0dXJuIERyaXZlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREcml2ZXJJbnN0YW5jZUJ5SUQodGhpcy5nZXREcml2ZXJEZWZpbml0aW9uSUQoKSkuZ2V0SmFyTGlzdCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyTmFtZSgpIHsKLQkJcmV0dXJuIERyaXZlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXREcml2ZXJJbnN0YW5jZUJ5SUQodGhpcy5nZXREcml2ZXJEZWZpbml0aW9uSUQoKSkuZ2V0TmFtZSgpOwotCX0KLQotCS8vICoqKioqIGNvbm5lY3Rpb24KLQlwdWJsaWMgYm9vbGVhbiBpc0FjdGl2ZSgpIHsKLQkJcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKSB8fCB0aGlzLmlzV29ya2luZ09mZmxpbmUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0luYWN0aXZlKCkgewotCQlyZXR1cm4gISB0aGlzLmlzQWN0aXZlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWQoKSB7Ci0JCXJldHVybiB0aGlzLmR0cE1hbmFnZWRDb25uZWN0aW9uLmlzQ29ubmVjdGVkKCkKLQkJCQkmJiAhIHRoaXMuZHRwTWFuYWdlZENvbm5lY3Rpb24uaXNXb3JraW5nT2ZmbGluZSgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRGlzY29ubmVjdGVkKCkgewotCQlyZXR1cm4gISB0aGlzLmlzQ29ubmVjdGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgY29ubmVjdCgpIHsKLQkJaWYgKHRoaXMuaXNEaXNjb25uZWN0ZWQoKSkgewotCQkJdGhpcy5jaGVja1N0YXR1cyh0aGlzLmR0cENvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKSk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsKLQkJdGhpcy5jaGVja1N0YXR1cyh0aGlzLmR0cENvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKSk7Ci0JfQotCi0JLy8gKioqKiogb2ZmLWxpbmUgc3VwcG9ydAotCXB1YmxpYyBib29sZWFuIGlzV29ya2luZ09mZmxpbmUoKSB7Ci0JCXJldHVybiB0aGlzLmR0cE1hbmFnZWRDb25uZWN0aW9uLmlzV29ya2luZ09mZmxpbmUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1dvcmtPZmZsaW5lTW9kZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwQ29ubmVjdGlvblByb2ZpbGUuc3VwcG9ydHNXb3JrT2ZmbGluZU1vZGUoKTsKLQl9Ci0KLQlwdWJsaWMgSVN0YXR1cyBzYXZlV29ya09mZmxpbmVEYXRhKCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS5zYXZlV29ya09mZmxpbmVEYXRhKCk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGNhbldvcmtPZmZsaW5lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS5jYW5Xb3JrT2ZmbGluZSgpOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHdvcmtPZmZsaW5lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBDb25uZWN0aW9uUHJvZmlsZS53b3JrT2ZmbGluZSgpOwotCX0KLQkKLQkvLyAqKioqKiBsaXN0ZW5lcnMKLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkQ29ubmVjdGlvbkxpc3RlbmVyKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotCQlpZiAodGhpcy5oYXNOb0xpc3RlbmVycygpKSB7ICAvLyBmaXJzdCBsaXN0ZW5lciBhZGRlZAotCQkJdGhpcy5zdGFydExpc3RlbmluZygpOwotCQl9Ci0JCXRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0TGlzdGVuaW5nKCkgewotCQl0aGlzLmR0cE1hbmFnZWRDb25uZWN0aW9uLmFkZENvbm5lY3Rpb25MaXN0ZW5lcih0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lcik7Ci0JCWlmICh0aGlzLmRhdGFiYXNlICE9IG51bGwpIHsgIC8vIGRvbid0IHRyaWdnZXIgZGF0YWJhc2UgY3JlYXRpb24KLQkJCWlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHsgIC8vIERUUCBkb2VzIG5vdCBjaGFuZ2Ugd2hlbiBvZmYtbGluZQotCQkJCXRoaXMuZGF0YWJhc2Uuc3RhcnRMaXN0ZW5pbmcoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCXRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCWlmICh0aGlzLmhhc05vTGlzdGVuZXJzKCkpIHsgIC8vIGxhc3QgbGlzdGVuZXIgcmVtb3ZlZAotCQkJdGhpcy5zdG9wTGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLQkJaWYgKHRoaXMuZGF0YWJhc2UgIT0gbnVsbCkgeyAgLy8gZG9uJ3QgdHJpZ2dlciBkYXRhYmFzZSBjcmVhdGlvbgotCQkJaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkgeyAgLy8gRFRQIGRvZXMgbm90IGNoYW5nZSB3aGVuIG9mZi1saW5lCi0JCQkJdGhpcy5kYXRhYmFzZS5zdG9wTGlzdGVuaW5nKCk7Ci0JCQl9Ci0JCX0KLQkJdGhpcy5kdHBNYW5hZ2VkQ29ubmVjdGlvbi5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIodGhpcy5jb25uZWN0aW9uTGlzdGVuZXIpOwotCX0KLQotCWJvb2xlYW4gaGFzTm9MaXN0ZW5lcnMoKSB7Ci0JCXJldHVybiB0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lci5oYXNOb0xpc3RlbmVycygpOwotCX0KLQotCWJvb2xlYW4gaGFzQW55TGlzdGVuZXJzKCkgewotCQlyZXR1cm4gdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuaGFzQW55TGlzdGVuZXJzKCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU3RhdHVzKElTdGF0dXMgc3RhdHVzKSB7Ci0JCWlmIChzdGF0dXMuaXNPSygpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0YXR1cy5pc011bHRpU3RhdHVzKCkpIHsKLQkJCWZvciAoSVN0YXR1cyBjaGlsZCA6IHN0YXR1cy5nZXRDaGlsZHJlbigpKSB7Ci0JCQkJdGhpcy5jaGVja1N0YXR1cyhjaGlsZCk7ICAvLyByZWN1cnNlLCBsb29raW5nIGZvciB0aGUgZmlyc3QgZXJyb3IKLQkJCX0KLQkJfQotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihzdGF0dXMuZ2V0TWVzc2FnZSgpLCBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkpOwotCX0KLQotCXByaXZhdGUgRFRQRGF0YWJhc2VXcmFwcGVyIGJ1aWxkRGF0YWJhc2UoKSB7Ci0JCWlmICh0aGlzLmlzSW5hY3RpdmUoKSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlpZiAodGhpcy5pc1dvcmtpbmdPZmZsaW5lKCkpIHsKLQkJCUNvbm5lY3Rpb25JbmZvIGNvbm5lY3Rpb25JbmZvID0gKENvbm5lY3Rpb25JbmZvKSB0aGlzLmR0cE1hbmFnZWRDb25uZWN0aW9uLmdldENvbm5lY3Rpb24oKS5nZXRSYXdDb25uZWN0aW9uKCk7Ci0JCQlyZXR1cm4gbmV3IERUUERhdGFiYXNlV3JhcHBlcih0aGlzLCBjb25uZWN0aW9uSW5mby5nZXRTaGFyZWREYXRhYmFzZSgpKTsKLQkJfQotCi0JCS8vIFRPRE8gc2VlIERUUCBidWcgMjAyMzA2Ci0JCS8vIHBhc3MgY29ubmVjdD10cnVlIGluIHRvIFByb2ZpbGVVdGlsLmdldERhdGFiYXNlKCkKLQkJLy8gdGhlcmUgaXMgYSBidWcgbWVudGlvbmVkIGluIGEgY29tbWVudDogCi0JCS8vICAgICAiZHVyaW5nIHRoZSBwcm9maWxlIGNvbm5lY3RlZCBldmVudCBub3RpZmljYXRpb24sIAotCQkvLyAgICAgSU1hbmFnZWRDb25uZWN0aW9uIGlzIGNvbm5lY3RlZCB3aGlsZSBJQ29ubmVjdGlvblByb2ZpbGUgaXMgbm90IgotCQkvLyBzbywgc29tZSBoYWNrZXJ5IGhlcmUgdG8gaGFuZGxlIGhhY2tlcnkgdGhlcmUKLQkJcmV0dXJuIG5ldyBEVFBEYXRhYmFzZVdyYXBwZXIodGhpcywgUHJvZmlsZVV0aWwuZ2V0RGF0YWJhc2UobmV3IERhdGFiYXNlSWRlbnRpZmllcih0aGlzLmdldE5hbWUoKSwgdGhpcy5nZXREYXRhYmFzZU5hbWUoKSksIHRydWUpKTsKLQl9Ci0KLQlzeW5jaHJvbml6ZWQgdm9pZCBjbGVhckRhdGFiYXNlKCkgewotCQlpZiAodGhpcy5kYXRhYmFzZSAhPSBudWxsKSB7Ci0JCQlpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7ICAvLyBEVFAgZG9lcyBub3QgY2hhbmdlIHdoZW4gb2ZmLWxpbmUKLQkJCQl0aGlzLmRhdGFiYXNlLnN0b3BMaXN0ZW5pbmcoKTsKLQkJCX0KLQkJCXRoaXMuZGF0YWJhc2UgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBmaW5kIGEgY29tcG9uZW50IGJ5IGlkZW50aWZpZXIKLQkgKiAoZS5nLiBUYWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKFN0cmluZykpLiBXZSBjaGFubmVsIGFsbCB0aGUgY2FsbHMgdG8gaGVyZQotCSAqIGFuZCB0aGVuIHdlIGRlbGVnYXRlIHRvIHRoZSBKUEEgcGxhdGZvcm0tc3VwcGxpZWQgImRhdGFiYXNlIGZpbmRlciIuCi0JICovCi0JPFQgZXh0ZW5kcyBEYXRhYmFzZU9iamVjdD4gVCBzZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIoVFtdIGRhdGFiYXNlT2JqZWN0cywgU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJcmV0dXJuIHRoaXMuZmluZGVyLnNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcihkYXRhYmFzZU9iamVjdHMsIGlkZW50aWZpZXIsIHRoaXMuZGF0YWJhc2VGaW5kZXJDYWxsYmFjayk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGRlZmF1bHQgImRhdGFiYXNlIGZpbmRlciIgY2FsbHMgYmFjayB0byBoZXJlIHNvIHdlIGNhbiBkZWxlZ2F0ZSB0bwotCSAqIHRoZSBkYXRhYmFzZSwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gcHJvcGVybHkKLQkgKiBtYXRjaCBpZGVudGlmaWVycy4KLQkgKi8KLQk8VCBleHRlbmRzIERhdGFiYXNlT2JqZWN0PiBUIHNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcl8oVFtdIGRhdGFiYXNlT2JqZWN0cywgU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJLy8gdGhlIGRhdGFiYXNlIHNob3VsZCBub3QgYmUgbnVsbCBoZXJlIC0gY2FsbCBpdHMgaW50ZXJuYWwgbWV0aG9kCi0JCXJldHVybiB0aGlzLmRhdGFiYXNlLnNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcl8oZGF0YWJhc2VPYmplY3RzLCBpZGVudGlmaWVyKTsKLQl9Ci0KLQl2b2lkIGRhdGFiYXNlQ2hhbmdlZChEVFBEYXRhYmFzZVdyYXBwZXIgZGIpIHsKLQkJdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuZGF0YWJhc2VDaGFuZ2VkKGRiKTsKLQl9Ci0KLQl2b2lkIGNhdGFsb2dDaGFuZ2VkKERUUENhdGFsb2dXcmFwcGVyIGNhdGFsb2cpIHsKLQkJdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuY2F0YWxvZ0NoYW5nZWQoY2F0YWxvZyk7Ci0JfQotCi0Jdm9pZCBzY2hlbWFDaGFuZ2VkKERUUFNjaGVtYVdyYXBwZXIgc2NoZW1hKSB7Ci0JCXRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLnNjaGVtYUNoYW5nZWQoc2NoZW1hKTsKLQl9Ci0KLQl2b2lkIHNlcXVlbmNlQ2hhbmdlZChEVFBTZXF1ZW5jZVdyYXBwZXIgc2VxdWVuY2UpIHsKLQkJdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuc2VxdWVuY2VDaGFuZ2VkKHNlcXVlbmNlKTsKLQl9Ci0KLQl2b2lkIHRhYmxlQ2hhbmdlZChEVFBUYWJsZVdyYXBwZXIgdGFibGUpIHsKLQkJdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIudGFibGVDaGFuZ2VkKHRhYmxlKTsKLQl9Ci0KLQl2b2lkIGNvbHVtbkNoYW5nZWQoRFRQQ29sdW1uV3JhcHBlciBjb2x1bW4pIHsKLQkJdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuY29sdW1uQ2hhbmdlZChjb2x1bW4pOwotCX0KLQotCXZvaWQgZm9yZWlnbktleUNoYW5nZWQoRFRQRm9yZWlnbktleVdyYXBwZXIgZm9yZWlnbktleSkgewotCQl0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lci5mb3JlaWduS2V5Q2hhbmdlZChmb3JlaWduS2V5KTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRQcm9wZXJ0eShTdHJpbmcgcHJvcGVydHlOYW1lKSB7Ci0JCXJldHVybiB0aGlzLmR0cENvbm5lY3Rpb25Qcm9maWxlLmdldEJhc2VQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gbmFtZUlzS2V5d29yZChTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gbmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJhcyIpOyAgLy8kTk9OLU5MUy0xJAotCX0KLQotCi0JLy8gKioqKioqKioqKiBvdmVycmlkZXMgKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLmJ1aWxkVG9TdHJpbmdGb3IodGhpcywgdGhpcy5nZXROYW1lKCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFAgY29ubmVjdGlvbiBsaXN0ZW5lciAqKioqKioqKioqCi0KLQkvKioKLQkgKiBUaGlzIGxpc3RlbmVyIHRyYW5zbGF0ZXMgYW5kIGZvcndhcmRzIElNYW5hZ2VkQ29ubmVjdGlvbkxpc3RlbmVyIGFuZAotCSAqIElNYW5hZ2VkQ29ubmVjdGlvbk9mZmxpbmVMaXN0ZW5lciBldmVudHMgdG8gQ29ubmVjdGlvbkxpc3RlbmVycy4KLQkgKi8KLQljbGFzcyBMb2NhbENvbm5lY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElNYW5hZ2VkQ29ubmVjdGlvbk9mZmxpbmVMaXN0ZW5lciB7Ci0JCXByaXZhdGUgTGlzdGVuZXJMaXN0PENvbm5lY3Rpb25MaXN0ZW5lcj4gbGlzdGVuZXJMaXN0ID0gbmV3IExpc3RlbmVyTGlzdDxDb25uZWN0aW9uTGlzdGVuZXI+KENvbm5lY3Rpb25MaXN0ZW5lci5jbGFzcyk7Ci0KLQkJTG9jYWxDb25uZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQlzdXBlcigpOwotCQl9Ci0KLQkJdm9pZCBhZGRDb25uZWN0aW9uTGlzdGVuZXIoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQl0aGlzLmxpc3RlbmVyTGlzdC5hZGQobGlzdGVuZXIpOwotCQl9Ci0KLQkJdm9pZCByZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQl0aGlzLmxpc3RlbmVyTGlzdC5yZW1vdmUobGlzdGVuZXIpOwotCQl9Ci0KLQkJYm9vbGVhbiBoYXNOb0xpc3RlbmVycygpIHsKLQkJCXJldHVybiB0aGlzLmxpc3RlbmVyTGlzdC5pc0VtcHR5KCk7Ci0JCX0KLQotCQlib29sZWFuIGhhc0FueUxpc3RlbmVycygpIHsKLQkJCXJldHVybiAhIHRoaXMubGlzdGVuZXJMaXN0LmlzRW1wdHkoKTsKLQkJfQotCi0KLQkJLy8gKioqKioqKioqKiBJTWFuYWdlZENvbm5lY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQkJLy8gb2ZmLWxpbmUgb3IgaW5hY3RpdmUgPT4gbGl2ZQotCQlwdWJsaWMgdm9pZCBvcGVuZWQoQ29ubmVjdEV2ZW50IGV2ZW50KSB7Ci0JCQkvLyBkbyBub3QgYnVpbGQgdGhlIGRhdGFiYXNlIGhlcmUgLSBpdCBpcyBidWlsdCBvbi1kZW1hbmQKLQkJCS8vIGZvcndhcmQgZXZlbnQgdG8gbGlzdGVuZXJzCi0JCQlmb3IgKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHRoaXMubGlzdGVuZXJMaXN0LmdldExpc3RlbmVycygpKSB7Ci0JCQkJbGlzdGVuZXIub3BlbmVkKERUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci50aGlzKTsKLQkJCX0KLQkJfQotCi0JCS8qKgotCQkgKiBUaGlzIG1ldGhvZCBpcyBuZXZlciBjYWxsZWQgZnJvbSB0aGUgYmFzZSBEVFAgY29kZS4KLQkJICogUGVyaGFwcyBEVFAgZXh0ZW5kZXJzIGNhbGwgaXQuLi4uCi0JCSAqIEBzZWUgTWFuYWdlZENvbm5lY3Rpb24jZmlyZU1vZGlmaWVkRXZlbnQoT2JqZWN0KQotCQkgKiAgICAgd2hpY2ggaXMgbmV2ZXIgY2FsbGVkLi4uCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBtb2RpZmllZChDb25uZWN0RXZlbnQgZXZlbnQpIHsKLQkJCS8vIGZvcndhcmQgZXZlbnQgdG8gbGlzdGVuZXJzCi0JCQlmb3IgKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHRoaXMubGlzdGVuZXJMaXN0LmdldExpc3RlbmVycygpKSB7Ci0JCQkJbGlzdGVuZXIubW9kaWZpZWQoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gb2tUb0Nsb3NlKENvbm5lY3RFdmVudCBldmVudCkgewotCQkJLy8gZm9yd2FyZCBldmVudCB0byBsaXN0ZW5lcnMKLQkJCWZvciAoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogdGhpcy5saXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCkpIHsKLQkJCQlpZiAoICEgbGlzdGVuZXIub2tUb0Nsb3NlKERUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci50aGlzKSkgewotCQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhYm91dFRvQ2xvc2UoQ29ubmVjdEV2ZW50IGV2ZW50KSB7Ci0JCQkvLyBmb3J3YXJkIGV2ZW50IHRvIGxpc3RlbmVycwotCQkJZm9yIChDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLmFib3V0VG9DbG9zZShEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBsaXZlIG9yIG9mZi1saW5lID0+IGluYWN0aXZlCi0JCXB1YmxpYyB2b2lkIGNsb3NlZChDb25uZWN0RXZlbnQgZXZlbnQpIHsKLQkJCS8vIGNsZWFyIHRoZSBkYXRhYmFzZQotCQkJRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMuY2xlYXJEYXRhYmFzZSgpOwotCQkJLy8gZm9yd2FyZCBldmVudCB0byBsaXN0ZW5lcnMKLQkJCWZvciAoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogdGhpcy5saXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCkpIHsKLQkJCQlsaXN0ZW5lci5jbG9zZWQoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMpOwotCQkJfQotCQl9Ci0KLQotCQkvLyAqKioqKioqKioqIElNYW5hZ2VkQ29ubmVjdGlvbk9mZmxpbmVMaXN0ZW5lciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQkJLy8gbGl2ZSA9PiBvZmYtbGluZQotCQlwdWJsaWMgYm9vbGVhbiBva1RvRGV0YWNoKENvbm5lY3RFdmVudCBldmVudCkgewotCQkJLy8gY29udmVydCB0aGUgZXZlbnQgdG8gYW4gIm9rIHRvIGNsb3NlIiBldmVudDsKLQkJCS8vIHdlIGFyZSAiY2xvc2luZyIgdGhlIGxpdmUgY29ubmVjdGlvbgotCQkJcmV0dXJuIHRoaXMub2tUb0Nsb3NlKGV2ZW50KTsKLQkJfQotCQkKLQkJLy8gbGl2ZSA9PiBvZmYtbGluZQotCQlwdWJsaWMgdm9pZCBhYm91dFRvRGV0YWNoKENvbm5lY3RFdmVudCBldmVudCkgewotCQkJLy8gY29udmVydCB0aGUgZXZlbnQgdG8gYSAiY2xvc2UiIGV2ZW50OwotCQkJLy8gd2UgYXJlICJjbG9zaW5nIiB0aGUgbGl2ZSBjb25uZWN0aW9uCi0JCQl0aGlzLmNsb3NlZChldmVudCk7Ci0JCX0KLQotCQkvLyBpbmFjdGl2ZSBvciBsaXZlID0+IG9mZi1saW5lCi0JCXB1YmxpYyB2b2lkIHdvcmtpbmdPZmZsaW5lKENvbm5lY3RFdmVudCBldmVudCkgewotCQkJLy8gY29udmVydCB0aGUgZXZlbnQgdG8gYW4gIm9wZW4iIGV2ZW50OwotCQkJLy8gd2UgYXJlICJvcGVuaW5nIiB0aGUgb2ZmLWxpbmUgY29ubmVjdGlvbgotCQkJdGhpcy5vcGVuZWQoZXZlbnQpOwotCQl9Ci0KLQkJLy8gb2ZmLWxpbmUgPT4gbGl2ZQotCQlwdWJsaWMgdm9pZCBhYm91dFRvQXR0YWNoKENvbm5lY3RFdmVudCBldmVudCkgewotCQkJLy8gY29udmVydCB0aGUgZXZlbnQgdG8gYW4gImNsb3NlIiBldmVudDsKLQkJCS8vIHdlIGFyZSAiY2xvc2luZyIgdGhlIG9mZi1saW5lIGNvbm5lY3Rpb24KLQkJCXRoaXMuY2xvc2VkKGV2ZW50KTsKLQkJfQotCi0KLQkJLy8gKioqKioqKioqKiBpbnRlcm5hbCBtZXRob2RzICoqKioqKioqKioKLQotCQl2b2lkIGRhdGFiYXNlQ2hhbmdlZChEVFBEYXRhYmFzZVdyYXBwZXIgZGIpIHsKLQkJCWZvciAoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogdGhpcy5saXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCkpIHsKLQkJCQlsaXN0ZW5lci5kYXRhYmFzZUNoYW5nZWQoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMsIGRiKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgY2F0YWxvZ0NoYW5nZWQoRFRQQ2F0YWxvZ1dyYXBwZXIgY2F0YWxvZykgewotCQkJZm9yIChDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLmNhdGFsb2dDaGFuZ2VkKERUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci50aGlzLCBjYXRhbG9nKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgc2NoZW1hQ2hhbmdlZChEVFBTY2hlbWFXcmFwcGVyIHNjaGVtYSkgewotCQkJZm9yIChDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLnNjaGVtYUNoYW5nZWQoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMsIHNjaGVtYSk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIHNlcXVlbmNlQ2hhbmdlZChEVFBTZXF1ZW5jZVdyYXBwZXIgc2VxdWVuY2UpIHsKLQkJCWZvciAoQ29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogdGhpcy5saXN0ZW5lckxpc3QuZ2V0TGlzdGVuZXJzKCkpIHsKLQkJCQlsaXN0ZW5lci5zZXF1ZW5jZUNoYW5nZWQoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyLnRoaXMsIHNlcXVlbmNlKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgdGFibGVDaGFuZ2VkKERUUFRhYmxlV3JhcHBlciB0YWJsZSkgewotCQkJZm9yIChDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLnRhYmxlQ2hhbmdlZChEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIudGhpcywgdGFibGUpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBjb2x1bW5DaGFuZ2VkKERUUENvbHVtbldyYXBwZXIgY29sdW1uKSB7Ci0JCQlmb3IgKENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHRoaXMubGlzdGVuZXJMaXN0LmdldExpc3RlbmVycygpKSB7Ci0JCQkJbGlzdGVuZXIuY29sdW1uQ2hhbmdlZChEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIudGhpcywgY29sdW1uKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZm9yZWlnbktleUNoYW5nZWQoRFRQRm9yZWlnbktleVdyYXBwZXIgZm9yZWlnbktleSkgewotCQkJZm9yIChDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiB0aGlzLmxpc3RlbmVyTGlzdC5nZXRMaXN0ZW5lcnMoKSkgewotCQkJCWxpc3RlbmVyLmZvcmVpZ25LZXlDaGFuZ2VkKERUUENvbm5lY3Rpb25Qcm9maWxlV3JhcHBlci50aGlzLCBmb3JlaWduS2V5KTsKLQkJCX0KLQkJfQotCi0JfQotCi0KLQkvLyAqKioqKioqKioqIGRlZmF1bHQgRGF0YWJhc2VGaW5kZXIgKioqKioqKioqKgotCi0JY2xhc3MgRGF0YWJhc2VGaW5kZXJDYWxsYmFjayBpbXBsZW1lbnRzIERhdGFiYXNlRmluZGVyLkRlZmF1bHRDYWxsYmFjayB7Ci0JCXB1YmxpYyA8VCBleHRlbmRzIERhdGFiYXNlT2JqZWN0PiBUIHNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcihUW10gZGF0YWJhc2VPYmplY3RzLCBTdHJpbmcgaWRlbnRpZmllcikgewotCQkJLy8gY2FsbCBiYWNrIHRvIHRoZSBpbnRlcm5hbCBtZXRob2QKLQkJCXJldHVybiBEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIudGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXJfKGRhdGFiYXNlT2JqZWN0cywgaWRlbnRpZmllcik7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUERhdGFiYXNlT2JqZWN0LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBEYXRhYmFzZU9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTc2ZmU0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUERhdGFiYXNlT2JqZWN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5EYXRhYmFzZU9iamVjdDsKLQotLyoqCi0gKiBEVFAgZGF0YWJhc2Ugb2JqZWN0Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRFRQRGF0YWJhc2VPYmplY3QgZXh0ZW5kcyBEYXRhYmFzZU9iamVjdCB7Ci0KLQkvKioKLQkgKiBjb3ZhcmlhbnQgb3ZlcnJpZGUKLQkgKi8KLQlEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIgZ2V0Q29ubmVjdGlvblByb2ZpbGUoKTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQRGF0YWJhc2VPYmplY3RXcmFwcGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkMmQyYy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUucnRlLklDYXRhbG9nT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUucnRlLklDYXRhbG9nT2JqZWN0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5zcW0uY29yZS5ydGUuUmVmcmVzaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkRhdGFiYXNlT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlN0cmluZ1Rvb2xzOwotCi0vKioKLSAqICBEVFAgQ2F0YWxvZyBPYmplY3QgV3JhcHBlciBiYXNlIGNsYXNzCi0gKi8KLWFic3RyYWN0IGNsYXNzIERUUERhdGFiYXNlT2JqZWN0V3JhcHBlcgotCWltcGxlbWVudHMgRFRQRGF0YWJhc2VPYmplY3QKLXsKLQkvLyB3ZSBuZWVkIGEgd2F5IHRvIGdldCB0byB0aGUgY29ubmVjdGlvbiBwcm9maWxlCi0JcHJpdmF0ZSBmaW5hbCBEVFBEYXRhYmFzZU9iamVjdCBwYXJlbnQ7Ci0KLQkvLyBsaXN0ZW4gZm9yIHRoZSAiY2F0YWxvZyBvYmplY3QiIGJlaW5nIHJlZnJlc2hlZAotCXByaXZhdGUgZmluYWwgSUNhdGFsb2dPYmplY3RMaXN0ZW5lciBjYXRhbG9nT2JqZWN0TGlzdGVuZXI7Ci0KLQkvLyBsaXN0ZW4gZm9yIHRoaXMgRFRQIGNhdGFsb2cgb2JqZWN0IHRvIHJlZnJlc2gKLQlmaW5hbCBJQ2F0YWxvZ09iamVjdCBjYXRhbG9nT2JqZWN0OwotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cnVjdGlvbi9pbml0aWFsaXphdGlvbiAqKioqKioqKioqCi0KLQlEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIoRFRQRGF0YWJhc2VPYmplY3QgcGFyZW50LCBPYmplY3QgZHRwT2JqZWN0KSB7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCQlpZiAodGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLmlzQ29ubmVjdGVkKCkpIHsKLQkJCS8vIHdlIG9ubHkgbGlzdGVuIHRvICJsaXZlIiBjb25uZWN0aW9ucyAoYXMgb3Bwb3NlZCB0byAib2ZmLWxpbmUiIGNvbm5lY3Rpb25zKTsKLQkJCS8vIGFuZCB0aGUgbW9kZWwgaXMgcmVidWlsdCB3aGVuIHRoZSBjb25uZWN0aW9uIGNvbm5lY3RzIG9yIGRpc2Nvbm5lY3RzCi0JCQl0aGlzLmNhdGFsb2dPYmplY3QgPSAoSUNhdGFsb2dPYmplY3QpIGR0cE9iamVjdDsKLQkJCXRoaXMuY2F0YWxvZ09iamVjdExpc3RlbmVyID0gdGhpcy5idWlsZENhdGFsb2dPYmplY3RMaXN0ZW5lcigpOwotCQkJaWYgKHRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGUoKS5oYXNBbnlMaXN0ZW5lcnMoKSkgewotCQkJCXRoaXMuc3RhcnRMaXN0ZW5pbmcoKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXRoaXMuY2F0YWxvZ09iamVjdCA9IG51bGw7Ci0JCQl0aGlzLmNhdGFsb2dPYmplY3RMaXN0ZW5lciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElDYXRhbG9nT2JqZWN0TGlzdGVuZXIgYnVpbGRDYXRhbG9nT2JqZWN0TGlzdGVuZXIoKSB7Ci0JCXJldHVybiBuZXcgSUNhdGFsb2dPYmplY3RMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSUNhdGFsb2dPYmplY3QgZG1FbGVtZW50LCBpbnQgZXZlbnRUeXBlKSB7Ci0JCQkJaWYgKGRtRWxlbWVudCA9PSBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIudGhpcy5jYXRhbG9nT2JqZWN0KSB7Ci0JCQkJCS8vICdldmVudFR5cGUnIGRvZXNuJ3Qgc2VlbSB0byBiZSB2ZXJ5IHVzZWZ1bCwgc28gZHJvcCBpdAotCQkJCQlEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIudGhpcy5jYXRhbG9nT2JqZWN0Q2hhbmdlZCgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQl9Ci0KLQkvLyB0eXBpY2FsbHksIG5vdGlmeSB0aGUgY29ubmVjdGlvbiBwcm9maWxlIHNvbWV0aGluZyBoYXMgY2hhbmdlZAotCXZvaWQgY2F0YWxvZ09iamVjdENoYW5nZWQoKSB7Ci0JCXRoaXMuY2xlYXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgRFRQIG9iamVjdCBoYXMgY2hhbmdlZCwgY2xlYXIgdGhlIHdyYXBwZXIncyBzdGF0ZSBzbyBpdCB3aWxsIGJlCi0JICogc3luY2hyb25pemVkIG9uLWRlbWFuZC4KLQkgKi8KLQlhYnN0cmFjdCB2b2lkIGNsZWFyKCk7Ci0KLQotCi0JLy8gKioqKioqKioqKiBxdWVyaWVzICoqKioqKioqKioKLQotCURUUERhdGFiYXNlT2JqZWN0IGdldFBhcmVudCgpIHsKLQkJcmV0dXJuIHRoaXMucGFyZW50OwotCX0KLQotCXB1YmxpYyBEVFBDb25uZWN0aW9uUHJvZmlsZVdyYXBwZXIgZ2V0Q29ubmVjdGlvblByb2ZpbGUoKSB7Ci0JCXJldHVybiB0aGlzLnBhcmVudC5nZXRDb25uZWN0aW9uUHJvZmlsZSgpOwotCX0KLQotCXB1YmxpYyBEVFBEYXRhYmFzZVdyYXBwZXIgZ2V0RGF0YWJhc2UoKSB7Ci0JCXJldHVybiB0aGlzLmdldENvbm5lY3Rpb25Qcm9maWxlKCkuZ2V0RGF0YWJhc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGNhbGxlZCBieSB3aGVuZXZlciB3ZSBuZWVkIHRvIGZpbmQgYSBjb21wb25lbnQgYnkgaWRlbnRpZmllcgotCSAqIChlLmcuIFRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoU3RyaW5nKSkuIFdlIGNoYW5uZWwgYWxsIHRoZSBjYWxscyB0byB0aGUKLQkgKiBjb25uZWN0aW9uIHByb2ZpbGUsIHdoaWNoIHRoZW4gZGVsZWdhdGVzIHRvIHRoZSBKUEEgcGxhdGZvcm0tc3VwcGxpZWQKLQkgKiAiZGF0YWJhc2UgZmluZGVyIi4KLQkgKi8KLQk8VCBleHRlbmRzIERhdGFiYXNlT2JqZWN0PiBUIHNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcihUW10gZGF0YWJhc2VPYmplY3RzLCBTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLnNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcihkYXRhYmFzZU9iamVjdHMsIGlkZW50aWZpZXIpOwotCX0KLQotCS8qKgotCSAqIENvbnZlbmllbmNlIG1ldGhvZC4KLQkgKi8KLQk8VCBleHRlbmRzIERhdGFiYXNlT2JqZWN0PiBUIHNlbGVjdERhdGFiYXNlT2JqZWN0TmFtZWQoVFtdIGRhdGFiYXNlT2JqZWN0cywgU3RyaW5nIG5hbWUpIHsKLQkJZm9yIChUIGRiT2JqZWN0IDogZGF0YWJhc2VPYmplY3RzKSB7Ci0JCQlpZiAoZGJPYmplY3QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgewotCQkJCXJldHVybiBkYk9iamVjdDsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBFeGFtcGxlczoKLQkgKiBPcmFjbGUgZXRjLgotCSAqICAgICBUYWJsZShGT08pIHZzLiAiRm9vIiA9PiBudWxsCi0JICogICAgIFRhYmxlKEJBUikgdnMuICJGb28iID0+ICJCQVIiCi0JICogICAgIFRhYmxlKEZvbykgdnMuICJGb28iID0+ICJcIkZvb1wiIgotCSAqICAgICBUYWJsZShCYXIpIHZzLiAiRm9vIiA9PiAiXCJCYXJcIiIKLQkgKiAgICAgCi0JICogUG9zdGdyZVNRTCBldGMuCi0JICogICAgIFRhYmxlKGZvbykgdnMuICJGb28iID0+IG51bGwKLQkgKiAgICAgVGFibGUoYmFyKSB2cy4gIkZvbyIgPT4gImJhciIKLQkgKiAgICAgVGFibGUoRm9vKSB2cy4gIkZvbyIgPT4gIlwiRm9vXCIiCi0JICogICAgIFRhYmxlKEJhcikgdnMuICJGb28iID0+ICJcIkJhclwiIgotCSAqICAgICAKLQkgKiBTUUwgU2VydmVyIGV0Yy4KLQkgKiAgICAgVGFibGUoRm9vKSB2cy4gIkZvbyIgPT4gbnVsbAotCSAqICAgICBUYWJsZShmb28pIHZzLiAiRm9vIiA9PiAiZm9vIgotCSAqICAgICBUYWJsZShiYXIpIHZzLiAiRm9vIiA9PiAiYmFyIgotCSAqICAgICBUYWJsZShCYXIpIHZzLiAiRm9vIiA9PiAiQmFyIgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcihTdHJpbmcgZGVmYXVsdE5hbWUpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2UoKS5jb252ZXJ0TmFtZVRvSWRlbnRpZmllcih0aGlzLmdldE5hbWUoKSwgZGVmYXVsdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIEV4YW1wbGVzOgotCSAqIE9yYWNsZSBldGMuCi0JICogICAgIFRhYmxlKEZPTykgPT4gIkZPTyIKLQkgKiAgICAgVGFibGUoRm9vKSA9PiAiXCJGb29cIiIKLQkgKiAgICAgVGFibGUoZm9vKSA9PiAiXCJmb29cIiIKLQkgKiAgICAgVGFibGUoZm9vKyspID0+ICJcImZvbysrXCIiCi0JICogICAgIFRhYmxlKGYibykgPT4gIlwiZlwiXCJvKytcIiIgKGkuZS4gImYiIm8iKQotCSAqICAgICAKLQkgKiBQb3N0Z3JlU1FMIGV0Yy4KLQkgKiAgICAgVGFibGUoRk9PKSA9PiAiXCJGT09cIiIKLQkgKiAgICAgVGFibGUoRm9vKSA9PiAiXCJGb29cIiIKLQkgKiAgICAgVGFibGUoZm9vKSA9PiAiZm9vIgotCSAqICAgICBUYWJsZShmb28rKykgPT4gIlwiZm9vKytcIiIKLQkgKiAgICAgVGFibGUoZiJvKSA9PiAiXCJmXCJcIm8rK1wiIiAoaS5lLiAiZiIibyIpCi0JICogICAgIAotCSAqIFNRTCBTZXJ2ZXIgZXRjLgotCSAqICAgICBUYWJsZShGT08pID0+ICJGT08iCi0JICogICAgIFRhYmxlKEZvbykgPT4gIkZvbyIKLQkgKiAgICAgVGFibGUoZm9vKSA9PiAiZm9vIgotCSAqICAgICBUYWJsZShmb28rKykgPT4gIlwiZm9vKytcIiIKLQkgKiAgICAgVGFibGUoZiJvKSA9PiAiXCJmXCJcIm8rK1wiIiAoaS5lLiAiZiIibyIpCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgewotCQlyZXR1cm4gdGhpcy5nZXREYXRhYmFzZSgpLmNvbnZlcnROYW1lVG9JZGVudGlmaWVyKHRoaXMuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gU3RyaW5nVG9vbHMuYnVpbGRUb1N0cmluZ0Zvcih0aGlzLCB0aGlzLmdldE5hbWUoKSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGxpc3RlbmluZyB0byBEVFAgZGF0YWJhc2Ugb2JqZWN0ICoqKioqKioqKioKLQotCS8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gcHJvZmlsZSBpcyAibGl2ZSIgYW5kIGhhcyBsaXN0ZW5lcnMKLQl2b2lkIHN0YXJ0TGlzdGVuaW5nKCkgewotCQl0aGlzLmNoZWNrTGlzdGVuZXIoKTsKLQkJUmVmcmVzaE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5BZGRMaXN0ZW5lcih0aGlzLmNhdGFsb2dPYmplY3QsIHRoaXMuY2F0YWxvZ09iamVjdExpc3RlbmVyKTsKLQl9Ci0KLQkvLyB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHByb2ZpbGUgaXMgImxpdmUiIGFuZCBoYXMgbm8gbGlzdGVuZXJzCi0Jdm9pZCBzdG9wTGlzdGVuaW5nKCkgewotCQl0aGlzLmNoZWNrTGlzdGVuZXIoKTsKLSAgICAgICAgUmVmcmVzaE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLmNhdGFsb2dPYmplY3QsIHRoaXMuY2F0YWxvZ09iamVjdExpc3RlbmVyKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tMaXN0ZW5lcigpIHsKLQkJaWYgKHRoaXMuY2F0YWxvZ09iamVjdExpc3RlbmVyID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInRoZSBjYXRhbG9nIGxpc3RlbmVyIGlzIG51bGwiKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQRGF0YWJhc2VXcmFwcGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBEYXRhYmFzZVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkOGI4Zi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBEYXRhYmFzZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUuZGVmaW5pdGlvbi5EYXRhYmFzZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5zcW0uaW50ZXJuYWwuY29yZS5SREJDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5EYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRGF0YWJhc2VPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvci5WZW5kb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvci5WZW5kb3JSZXBvc2l0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkFycmF5VG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkFycmF5SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLlRyYW5zZm9ybWF0aW9uSXRlcmF0b3I7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotCi0vKioKLSAqIFdyYXAgYSBEVFAgRGF0YWJhc2UuCi0gKiAKLSAqIENhdGFsb2dzIHZzLiBTY2hlbWF0YToKLSAqIFR5cGljYWxseSwgaWYgYSBEVFAgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCAiY2F0YWxvZ3MiLAotICogby5lLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZSNnZXRDYXRhbG9ncygpIHdpbGwgcmV0dXJuIGEKLSAqIHNpbmdsZSBjYXRhbG9nIHdpdGhvdXQgYSBuYW1lIChhY3R1YWxseSwgaXQncyBhbiBlbXB0eSBzdHJpbmcpLiBUaGlzIGNhdGFsb2cKLSAqIHdpbGwgY29udGFpbiBhbGwgdGhlIGRhdGFiYXNlJ3Mgc2NoZW1hdGEuIFdlIHRyeSB0byBpZ25vcmUgdGhpcyBjYXRhbG9nIGFuZAotICogcmV0dXJuIHRoZSBzY2hlbWF0YSBmcm9tIHRoZSBkYXRhYmFzZSBkaXJlY3RseS4KLSAqIAotICogQ2F0YWxvZyBOb3RlIDE6Ci0gKiBBcyBvZiBKYW4gMjAwOSwgdGhlIERUUCBNeVNRTCBkcml2ZXIgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGlzIHBhdHRlcm4uCi0gKiBBIERUUCBNeVNRTCBkYXRhYmFzZSBoYXMgKm5vKiBjYXRhbG9nczsgaXQgaG9sZHMgYSBzaW5nbGUgc2NoZW1hCi0gKiBkaXJlY3RseSwgYW5kIHRoYXQgc2NoZW1hIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYXRhYmFzZS4gU2VlIGJ1ZyAyNDkwMTMuCi0gKiAKLSAqIENhdGFsb2cgTm90ZSAyOgotICogQXMgb2YgSmFuIDIwMDksIHRoZSBQb3N0Z3JlU1FMIEpEQkMgZHJpdmVyIGNvbXBsaWNhdGVzIHRoaXMgcGF0dGVybiBhIGJpdC4KLSAqIEV2ZW4gdGhvdWdoIFBvc3RncmVTUUwgZG9lcyBub3Qgc3VwcG9ydCAiY2F0YWxvZ3MiLCBpdHMgSkRCQyBkcml2ZXIKLSAqIHJldHVybnMgYSBzaW5nbGUgY2F0YWxvZyB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYXRhYmFzZSBzcGVjaWZpZWQKLSAqIGluIHRoZSBKREJDIGNvbm5lY3Rpb24gVVJMLiBUaGUgRFRQIFBvc3RncmVTUUwgZHJpdmVyIHNpbXBseSByZXBsaWNhdGVzIHRoaXMKLSAqIGJlaGF2aW9yLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNhdGFsb2cgY2FuIGJlIHVubmFtZWQ7IGkuZS4gaXRzIG5hbWUgaXMgYW4KLSAqIGVtcHR5IHN0cmluZy4uLi4KLSAqIAotICogKFlldCBBbm90aGVyKSBOb3RlOgotICogV2UgdXNlICJuYW1lIiB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgdW5tb2RpZmllZCBuYW1lIG9mIGEgZGF0YWJhc2Ugb2JqZWN0Ci0gKiBhcyBzdXBwbGllZCBieSB0aGUgZGF0YWJhc2UgaXRzZWxmIChpLmUuIGl0IGlzIG5vdCBkZWxpbWl0ZWQgYW5kIGl0IGlzIGFsd2F5cwotICogY2FzZS1zZW5zaXRpdmUpLgotICogV2UgdXNlICJpZGVudGlmaWVyIiB3aGVuIGRlYWxpbmcgd2l0aCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGRhdGFiYXNlCi0gKiBvYmplY3QgbmFtZSAoaS5lLiBpdCBtYXkgYmUgZGVsaW1pdGVkIGFuZCwgZGVwZW5kaW5nIG9uIHRoZSB2ZW5kb3IsIGl0IG1heQotICogYmUgY2FzZS1pbnNlbnNpdGl2ZSkuCi0gKi8KLWZpbmFsIGNsYXNzIERUUERhdGFiYXNlV3JhcHBlcgotCWV4dGVuZHMgRFRQU2NoZW1hQ29udGFpbmVyV3JhcHBlcgotCWltcGxlbWVudHMgRGF0YWJhc2UKLXsKLQkvLyB0aGUgd3JhcHBlZCBEVFAgZGF0YWJhc2UKLQlwcml2YXRlIGZpbmFsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZSBkdHBEYXRhYmFzZTsKLQotCS8vIHZlbmRvci1zcGVjaWZpYyBiZWhhdmlvcgotCXByaXZhdGUgZmluYWwgVmVuZG9yIHZlbmRvcjsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQsIHNvcnRlZAotCXByaXZhdGUgRFRQQ2F0YWxvZ1dyYXBwZXJbXSBjYXRhbG9nczsKLQotCi0JLy8gKioqKioqKioqKiBjb25zdHJ1Y3RvciAqKioqKioqKioqCi0KLQlEVFBEYXRhYmFzZVdyYXBwZXIoRFRQQ29ubmVjdGlvblByb2ZpbGVXcmFwcGVyIGNvbm5lY3Rpb25Qcm9maWxlLCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2UgZHRwRGF0YWJhc2UpIHsKLQkJc3VwZXIoY29ubmVjdGlvblByb2ZpbGUsIGR0cERhdGFiYXNlKTsKLQkJdGhpcy5kdHBEYXRhYmFzZSA9IGR0cERhdGFiYXNlOwotCQl0aGlzLnZlbmRvciA9IFZlbmRvclJlcG9zaXRvcnkuaW5zdGFuY2UoKS5nZXRWZW5kb3IodGhpcy5nZXRWZW5kb3JOYW1lKCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFBXcmFwcGVyIGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCS8qIFRPRE8KLQkgKiBXZSBtaWdodCB3YW50IHRvIGxpc3RlbiB0byB0aGUgInZpcnR1YWwiIGNhdGFsb2c7IGJ1dCB0aGF0J3MgcHJvYmFibHkKLQkgKiBub3QgbmVjZXNzYXJ5IHNpbmNlIHRoZXJlIGlzIG5vIGVhc3kgd2F5IGZvciB0aGUgdXNlciB0byByZWZyZXNoIGl0Ci0JICogKGkuZS4gaXQgaXMgbm90IGRpc3BsYXllZCBpbiB0aGUgRFRQIFVJKS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBjYXRhbG9nT2JqZWN0Q2hhbmdlZCgpIHsKLQkJc3VwZXIuY2F0YWxvZ09iamVjdENoYW5nZWQoKTsKLQkJdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLmRhdGFiYXNlQ2hhbmdlZCh0aGlzKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgRFRQRGF0YWJhc2VXcmFwcGVyIGdldERhdGFiYXNlKCkgewotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRFRQU2NoZW1hQ29udGFpbmVyV3JhcHBlciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWE+IGdldERUUFNjaGVtYXRhKCkgewotCQlyZXR1cm4gdGhpcy52ZW5kb3IuZ2V0U2NoZW1hcyh0aGlzLmR0cERhdGFiYXNlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlEVFBTY2hlbWFXcmFwcGVyIGdldFNjaGVtYShvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hIGR0cFNjaGVtYSkgewotCQlyZXR1cm4gdGhpcy5nZXRTY2hlbWFfKGR0cFNjaGVtYSk7Ci0JfQotCi0JRFRQU2NoZW1hV3JhcHBlciBnZXRTY2hlbWFGcm9tQ2F0YWxvZ3Mob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYSBkdHBTY2hlbWEpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZyhkdHBTY2hlbWEuZ2V0Q2F0YWxvZygpKS5nZXRTY2hlbWFfKGR0cFNjaGVtYSk7Ci0JfQotCi0JLyoqCi0JICogdGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgc2NoZW1hIHdoZW4gdGhlIGRhdGFiYXNlIGlzIHRoZSBzY2hlbWEKLQkgKiBjb250YWluZXIsIHNvIHdlIGtub3cgd2UgZG9uJ3QgaGF2ZSBhbnkgY2F0YWxvZ3MKLQkgKi8KLQlAT3ZlcnJpZGUKLQlEVFBUYWJsZVdyYXBwZXIgZ2V0VGFibGUob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLlRhYmxlIGR0cFRhYmxlKSB7Ci0JCXJldHVybiB0aGlzLmdldFRhYmxlXyhkdHBUYWJsZSk7Ci0JfQotCi0JLyoqCi0JICogdGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgY2F0YWxvZywgc28gd2Uga25vdyB3ZSBoYXZlIGNhdGFsb2dzOwotCSAqIGkuZS4gdGhlIHNlYXJjaCBoYXMgdG8gZGVzY2VuZCB0aHJvdWdoIGNhdGFsb2dzLCB0aGVuIHRvIHNjaGVtYXRhCi0JICovCi0JRFRQVGFibGVXcmFwcGVyIGdldFRhYmxlRnJvbUNhdGFsb2dzKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5UYWJsZSBkdHBUYWJsZSkgewotCQlyZXR1cm4gdGhpcy5nZXRDYXRhbG9nKGR0cFRhYmxlLmdldFNjaGVtYSgpLmdldENhdGFsb2coKSkuZ2V0VGFibGVfKGR0cFRhYmxlKTsKLQl9Ci0KLQkvKioKLQkgKiB0aGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gYSBzY2hlbWEgd2hlbiB0aGUgZGF0YWJhc2UgaXMgdGhlIHNjaGVtYQotCSAqIGNvbnRhaW5lciwgc28gd2Uga25vdyB3ZSBkb24ndCBoYXZlIGFueSBjYXRhbG9ncwotCSAqLwotCUBPdmVycmlkZQotCURUUENvbHVtbldyYXBwZXIgZ2V0Q29sdW1uKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5Db2x1bW4gZHRwQ29sdW1uKSB7Ci0JCXJldHVybiB0aGlzLmdldENvbHVtbl8oZHRwQ29sdW1uKTsKLQl9Ci0KLQkvKioKLQkgKiB0aGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gYSBjYXRhbG9nLCBzbyB3ZSBrbm93IHdlIGhhdmUgY2F0YWxvZ3M7Ci0JICogaS5lLiB0aGUgc2VhcmNoIGhhcyB0byBkZXNjZW5kIHRocm91Z2ggY2F0YWxvZ3MsIHRoZW4gdG8gc2NoZW1hdGEKLQkgKi8KLQlEVFBDb2x1bW5XcmFwcGVyIGdldENvbHVtbkZyb21DYXRhbG9ncyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGR0cENvbHVtbikgewotCQlyZXR1cm4gdGhpcy5nZXRDYXRhbG9nKGR0cENvbHVtbi5nZXRUYWJsZSgpLmdldFNjaGVtYSgpLmdldENhdGFsb2coKSkuZ2V0Q29sdW1uXyhkdHBDb2x1bW4pOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEYXRhYmFzZU9iamVjdCBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiB0aGlzLmR0cERhdGFiYXNlLmdldE5hbWUoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRGF0YWJhc2UgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JcHVibGljIFN0cmluZyBnZXRWZW5kb3JOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBEYXRhYmFzZS5nZXRWZW5kb3IoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24oKSB7Ci0JCXJldHVybiB0aGlzLmR0cERhdGFiYXNlLmdldFZlcnNpb24oKTsKLQl9Ci0KLQkvLyBvdmVycmlkZSB0byBtYWtlIG1ldGhvZCBwdWJsaWMgc2luY2UgaXQncyBpbiB0aGUgRGF0YWJhc2UgaW50ZXJmYWNlCi0JQE92ZXJyaWRlCi0JcHVibGljIDxUIGV4dGVuZHMgRGF0YWJhc2VPYmplY3Q+IFQgc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyKFRbXSBkYXRhYmFzZU9iamVjdHMsIFN0cmluZyBpZGVudGlmaWVyKSB7Ci0JCXJldHVybiBzdXBlci5zZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIoZGF0YWJhc2VPYmplY3RzLCBpZGVudGlmaWVyKTsKLQl9Ci0KLQkvLyAqKioqKiBjYXRhbG9ncwotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncygpIHsKLQkJcmV0dXJuIHRoaXMudmVuZG9yLnN1cHBvcnRzQ2F0YWxvZ3ModGhpcy5kdHBEYXRhYmFzZSk7Ci0JfQotCi0JcHVibGljIEl0ZXJhdG9yPENhdGFsb2c+IGNhdGFsb2dzKCkgewotCQlyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3I8Q2F0YWxvZz4odGhpcy5nZXRDYXRhbG9ncygpKTsKLQl9Ci0KLQlwcml2YXRlIEl0ZXJhdG9yPERUUENhdGFsb2dXcmFwcGVyPiBjYXRhbG9nV3JhcHBlcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxEVFBDYXRhbG9nV3JhcHBlcj4odGhpcy5nZXRDYXRhbG9ncygpKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCBEVFBDYXRhbG9nV3JhcHBlcltdIGdldENhdGFsb2dzKCkgewotCQlpZiAodGhpcy5jYXRhbG9ncyA9PSBudWxsKSB7Ci0JCQl0aGlzLmNhdGFsb2dzID0gdGhpcy5idWlsZENhdGFsb2dzKCk7Ci0JCX0KLQkJcmV0dXJuIHRoaXMuY2F0YWxvZ3M7Ci0JfQotCi0JcHJpdmF0ZSBEVFBDYXRhbG9nV3JhcHBlcltdIGJ1aWxkQ2F0YWxvZ3MoKSB7Ci0JCUxpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkNhdGFsb2c+IGR0cENhdGFsb2dzID0gdGhpcy5nZXREVFBDYXRhbG9ncygpOwotCQlEVFBDYXRhbG9nV3JhcHBlcltdIHJlc3VsdCA9IG5ldyBEVFBDYXRhbG9nV3JhcHBlcltkdHBDYXRhbG9ncy5zaXplKCldOwotCQlmb3IgKGludCBpID0gcmVzdWx0Lmxlbmd0aDsgaS0tID4gMDspIHsKLQkJCXJlc3VsdFtpXSA9IG5ldyBEVFBDYXRhbG9nV3JhcHBlcih0aGlzLCBkdHBDYXRhbG9ncy5nZXQoaSkpOwotCQl9Ci0JCXJldHVybiBBcnJheVRvb2xzLnNvcnQocmVzdWx0LCB0aGlzLmJ1aWxkQ2F0YWxvZ0NvbXBhcmF0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSBDb21wYXJhdG9yPENhdGFsb2c+IGJ1aWxkQ2F0YWxvZ0NvbXBhcmF0b3IoKSB7Ci0JCXJldHVybiBuZXcgQ29tcGFyYXRvcjxDYXRhbG9nPigpIHsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShDYXRhbG9nIGNhdGFsb2cxLCBDYXRhbG9nIGNhdGFsb2cyKSB7Ci0JCQkJcmV0dXJuIENvbGxhdG9yLmdldEluc3RhbmNlKCkuY29tcGFyZShjYXRhbG9nMS5nZXROYW1lKCksIGNhdGFsb2cyLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nPiBnZXREVFBDYXRhbG9ncygpIHsKLQkJcmV0dXJuIHRoaXMudmVuZG9yLmdldENhdGFsb2dzKHRoaXMuZHRwRGF0YWJhc2UpOwotCX0KLQotCXB1YmxpYyBpbnQgY2F0YWxvZ3NTaXplKCkgewotCQlyZXR1cm4gdGhpcy5nZXRDYXRhbG9ncygpLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIGNhdGFsb2cgZm9yIHRoZSBzcGVjaWZpZWQgRFRQIGNhdGFsb2cKLQkgKi8KLQlEVFBDYXRhbG9nV3JhcHBlciBnZXRDYXRhbG9nKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGR0cENhdGFsb2cpIHsKLQkJZm9yIChEVFBDYXRhbG9nV3JhcHBlciBjYXRhbG9nIDogdGhpcy5nZXRDYXRhbG9ncygpKSB7Ci0JCQlpZiAoY2F0YWxvZy53cmFwcyhkdHBDYXRhbG9nKSkgewotCQkJCXJldHVybiBjYXRhbG9nOwotCQkJfQotCQl9Ci0JCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludmFsaWQgRFRQIGNhdGFsb2c6ICIgKyBkdHBDYXRhbG9nKTsgIC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBzb3J0ZWRDYXRhbG9nTmFtZXMoKSB7Ci0JCS8vIHRoZSBjYXRhbG9ncyBhcmUgYWxyZWFkeSBzb3J0ZWQKLQkJcmV0dXJuIG5ldyBUcmFuc2Zvcm1hdGlvbkl0ZXJhdG9yPERUUENhdGFsb2dXcmFwcGVyLCBTdHJpbmc+KHRoaXMuY2F0YWxvZ1dyYXBwZXJzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyB0cmFuc2Zvcm0oRFRQQ2F0YWxvZ1dyYXBwZXIgbmV4dCkgewotCQkJCSByZXR1cm4gbmV4dC5nZXROYW1lKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIERUUENhdGFsb2dXcmFwcGVyIGdldENhdGFsb2dOYW1lZChTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gdGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdE5hbWVkKHRoaXMuZ2V0Q2F0YWxvZ3MoKSwgbmFtZSk7Ci0JfQotCi0JcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gc29ydGVkQ2F0YWxvZ0lkZW50aWZpZXJzKCkgewotCQkvLyB0aGUgY2F0YWxvZ3MgYXJlIGFscmVhZHkgc29ydGVkCi0JCXJldHVybiBuZXcgVHJhbnNmb3JtYXRpb25JdGVyYXRvcjxEVFBDYXRhbG9nV3JhcHBlciwgU3RyaW5nPih0aGlzLmNhdGFsb2dXcmFwcGVycygpKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBTdHJpbmcgdHJhbnNmb3JtKERUUENhdGFsb2dXcmFwcGVyIG5leHQpIHsKLQkJCQkgcmV0dXJuIG5leHQuZ2V0SWRlbnRpZmllcigpOwotCQkJfQotCQl9OwotCX0KLQotCXB1YmxpYyBEVFBDYXRhbG9nV3JhcHBlciBnZXRDYXRhbG9nRm9ySWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gdGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIodGhpcy5nZXRDYXRhbG9ncygpLCBpZGVudGlmaWVyKTsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIERUUENhdGFsb2dXcmFwcGVyIGdldERlZmF1bHRDYXRhbG9nKCkgewotCQlyZXR1cm4gdGhpcy5nZXRDYXRhbG9nRm9ySWRlbnRpZmllcnModGhpcy5nZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzKCkpOwotCX0KLQotCXByaXZhdGUgTGlzdDxTdHJpbmc+IGdldERlZmF1bHRDYXRhbG9nSWRlbnRpZmllcnMoKSB7Ci0JCXJldHVybiB0aGlzLnZlbmRvci5nZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzKHRoaXMuZHRwRGF0YWJhc2UsIHRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGUoKS5nZXRVc2VyTmFtZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIGZpcnN0IGNhdGFsb2cgZm91bmQuCi0JICovCi0JcHJpdmF0ZSBEVFBDYXRhbG9nV3JhcHBlciBnZXRDYXRhbG9nRm9ySWRlbnRpZmllcnMoTGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzKSB7Ci0JCWZvciAoU3RyaW5nIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykgewotCQkJRFRQQ2F0YWxvZ1dyYXBwZXIgY2F0YWxvZyA9IHRoaXMuZ2V0Q2F0YWxvZ0ZvcklkZW50aWZpZXIoaWRlbnRpZmllcik7Ci0JCQlpZiAoY2F0YWxvZyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuIGNhdGFsb2c7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogSWYgd2UgZmluZCBhIGRlZmF1bHQgY2F0YWxvZywgcmV0dXJuIGl0cyBpZGVudGlmaWVyOwotCSAqIG90aGVyd2lzZSwgcmV0dXJuIHRoZSBsYXN0IGlkZW50aWZpZXIgb24gdGhlIGxpc3Qgb2YgZGVmYXVsdCBpZGVudGlmaWVycy4KLQkgKiAoU29tZSBkYXRhYmFzZXMgaGF2ZSBtdWx0aXBsZSBwb3NzaWJsZSBkZWZhdWx0IG5hbWVzLikKLQkgKiBSZXR1cm4gbnVsbCBpZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjYXRhbG9ncy4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIFN0cmluZyBnZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXIoKSB7Ci0JCURUUENhdGFsb2dXcmFwcGVyIGNhdGFsb2cgPSB0aGlzLmdldERlZmF1bHRDYXRhbG9nKCk7Ci0JCXJldHVybiAoY2F0YWxvZyAhPSBudWxsKSA/IGNhdGFsb2cuZ2V0SWRlbnRpZmllcigpIDogdGhpcy5nZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJfKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdENhdGFsb2dJZGVudGlmaWVyXygpIHsKLQkJTGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzKCk7Ci0JCXJldHVybiBpZGVudGlmaWVycy5pc0VtcHR5KCkgPyBudWxsIDogaWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXJzLnNpemUoKSAtIDEpOwotCX0KLQotCS8vICoqKioqIHNjaGVtYXRhCi0KLQlMaXN0PFN0cmluZz4gZ2V0RGVmYXVsdFNjaGVtYUlkZW50aWZpZXJzKCkgewotCQlyZXR1cm4gdGhpcy52ZW5kb3IuZ2V0RGVmYXVsdFNjaGVtYUlkZW50aWZpZXJzKHRoaXMuZHRwRGF0YWJhc2UsIHRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGUoKS5nZXRVc2VyTmFtZSgpKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbmFtZXMgdnMuIGlkZW50aWZpZXJzICoqKioqKioqKioKLQotCS8qKgotCSAqIENvbnZlcnQgdGhlIHNwZWNpZmllZCBuYW1lIHRvIGFuIGlkZW50aWZpZXIuIFJldHVybiBudWxsIGlmIHRoZSByZXN1bHRpbmcKLQkgKiBpZGVudGlmaWVyIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBkZWZhdWx0IG5hbWUuCi0JICovCi0JU3RyaW5nIGNvbnZlcnROYW1lVG9JZGVudGlmaWVyKFN0cmluZyBuYW1lLCBTdHJpbmcgZGVmYXVsdE5hbWUpIHsKLQkJcmV0dXJuIHRoaXMudmVuZG9yLmNvbnZlcnROYW1lVG9JZGVudGlmaWVyKG5hbWUsIGRlZmF1bHROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgbmFtZSB0byBhbiBpZGVudGlmaWVyLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgY29udmVydE5hbWVUb0lkZW50aWZpZXIoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIHRoaXMudmVuZG9yLmNvbnZlcnROYW1lVG9JZGVudGlmaWVyKG5hbWUpOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0aGUgZGF0YWJhc2Ugb2JqZWN0IGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLiBJZgotCSAqIHRoZSBpZGVudGlmaWVyIGlzICJkZWxpbWl0ZWQiICh0eXBpY2FsbHkgd2l0aCBkb3VibGUtcXVvdGVzKSwgaXQgd2lsbCBiZQotCSAqIHVzZWQgd2l0aG91dCBhbnkgZm9sZGluZy4gSWYgdGhlIG5hbWUgaXMgIm5vcm1hbCIgKGkuZS4gbm90IGRlbGltaXRlZCksCi0JICogaXQgd2lsbCBiZSBmb2xkZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGNhc2UgKHR5cGljYWxseSB1cHBlcmNhc2UpLgotCSAqIAotCSAqIFNpbmNlIHRoZSBkYXRhYmFzZSBoYXMgdGhlIGFwcHJvcHJpYXRlIHN0YXRlIHRvIGNvbXBhcmUgaWRlbnRpZmllcnMgYW5kCi0JICogbmFtZXMsIHRoZSBjb25uZWN0aW9uIHByb2ZpbGUgZGVsZWdhdGVzIHRvIGhlcmUgd2hlbiB1c2luZyB0aGUgZGVmYXVsdAotCSAqICJkYXRhYmFzZSBmaW5kZXIiLgotCSAqLwotCTxUIGV4dGVuZHMgRGF0YWJhc2VPYmplY3Q+IFQgc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyXyhUW10gZGF0YWJhc2VPYmplY3RzLCBTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gdGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdE5hbWVkKGRhdGFiYXNlT2JqZWN0cywgdGhpcy5jb252ZXJ0SWRlbnRpZmllclRvTmFtZShpZGVudGlmaWVyKSk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCB0aGUgc3BlY2lmaWVkIGlkZW50aWZpZXIgdG8gYSBuYW1lLgotCSAqLwotCVN0cmluZyBjb252ZXJ0SWRlbnRpZmllclRvTmFtZShTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gdGhpcy52ZW5kb3IuY29udmVydElkZW50aWZpZXJUb05hbWUoaWRlbnRpZmllcik7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JRGF0YWJhc2VEZWZpbml0aW9uIGdldERUUERlZmluaXRpb24oKSB7Ci0JCXJldHVybiBSREJDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREYXRhYmFzZURlZmluaXRpb25SZWdpc3RyeSgpLmdldERlZmluaXRpb24odGhpcy5kdHBEYXRhYmFzZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGxpc3RlbmluZyAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBzdGFydExpc3RlbmluZygpIHsKLQkJaWYgKHRoaXMuY2F0YWxvZ3MgIT0gbnVsbCkgewotCQkJdGhpcy5zdGFydENhdGFsb2dzKCk7Ci0JCX0KLQkJc3VwZXIuc3RhcnRMaXN0ZW5pbmcoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RhcnRDYXRhbG9ncygpIHsKLQkJZm9yIChEVFBDYXRhbG9nV3JhcHBlciBjYXRhbG9nIDogdGhpcy5jYXRhbG9ncykgewotCQkJY2F0YWxvZy5zdGFydExpc3RlbmluZygpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLQkJaWYgKHRoaXMuY2F0YWxvZ3MgIT0gbnVsbCkgewotCQkJdGhpcy5zdG9wQ2F0YWxvZ3MoKTsKLQkJfQotCQlzdXBlci5zdG9wTGlzdGVuaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0b3BDYXRhbG9ncygpIHsKLQkJZm9yIChEVFBDYXRhbG9nV3JhcHBlciBjYXRhbG9nIDogdGhpcy5jYXRhbG9ncykgewotCQkJY2F0YWxvZy5zdG9wTGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogY2xlYXIgKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgY2xlYXIoKSB7Ci0JCWlmICh0aGlzLmNhdGFsb2dzICE9IG51bGwpIHsKLQkJCXRoaXMuY2xlYXJDYXRhbG9ncygpOwotCQl9Ci0JCXN1cGVyLmNsZWFyKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFyQ2F0YWxvZ3MoKSB7Ci0JCXRoaXMuc3RvcENhdGFsb2dzKCk7Ci0JCWZvciAoRFRQQ2F0YWxvZ1dyYXBwZXIgY2F0YWxvZyA6IHRoaXMuY2F0YWxvZ3MpIHsKLQkJCWNhdGFsb2cuY2xlYXIoKTsKLQkJfQotCQl0aGlzLmNhdGFsb2dzID0gbnVsbDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUEZvcmVpZ25LZXlXcmFwcGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBGb3JlaWduS2V5V3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2JlMWQzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUEZvcmVpZ25LZXlXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQXJyYXlUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5Db2xsZWN0aW9uVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkFycmF5SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkZpbHRlcmluZ0l0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5UcmFuc2Zvcm1hdGlvbkl0ZXJhdG9yOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKLQotLyoqCi0gKiAgV3JhcCBhIERUUCBGb3JlaWduS2V5Ci0gKi8KLWZpbmFsIGNsYXNzIERUUEZvcmVpZ25LZXlXcmFwcGVyCi0JZXh0ZW5kcyBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIKLQlpbXBsZW1lbnRzIEZvcmVpZ25LZXkKLXsKLQkvLyB0aGUgd3JhcHBlZCBEVFAgZm9yZWlnbiBrZXkKLQlwcml2YXRlIGZpbmFsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmNvbnN0cmFpbnRzLkZvcmVpZ25LZXkgZHRwRm9yZWlnbktleTsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQKLQlwcml2YXRlIERUUFRhYmxlV3JhcHBlciByZWZlcmVuY2VkVGFibGU7Ci0KLQkvLyBsYXp5LWluaXRpYWxpemVkCi0JcHJpdmF0ZSBMb2NhbENvbHVtblBhaXJbXSBjb2x1bW5QYWlyczsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQgLSBidXQgaXQgY2FuIGJlICdudWxsJyBzbyB3ZSB1c2UgYSBmbGFnCi0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEF0dHJpYnV0ZU5hbWU7Ci0JcHJpdmF0ZSBib29sZWFuIGRlZmF1bHRBdHRyaWJ1dGVOYW1lQ2FsY3VsYXRlZCA9IGZhbHNlOwotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cnVjdG9yICoqKioqKioqKioKLQotCURUUEZvcmVpZ25LZXlXcmFwcGVyKERUUFRhYmxlV3JhcHBlciBiYXNlVGFibGUsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmNvbnN0cmFpbnRzLkZvcmVpZ25LZXkgZHRwRm9yZWlnbktleSkgewotCQlzdXBlcihiYXNlVGFibGUsIGR0cEZvcmVpZ25LZXkpOwotCQl0aGlzLmR0cEZvcmVpZ25LZXkgPSBkdHBGb3JlaWduS2V5OwotCX0KLQotCi0JLy8gKioqKioqKioqKiBEVFBXcmFwcGVyIGltcGxlbWVudGF0aW9uICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIGNhdGFsb2dPYmplY3RDaGFuZ2VkKCkgewotCQlzdXBlci5jYXRhbG9nT2JqZWN0Q2hhbmdlZCgpOwotCQl0aGlzLmdldENvbm5lY3Rpb25Qcm9maWxlKCkuZm9yZWlnbktleUNoYW5nZWQodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLmJ1aWxkVG9TdHJpbmdGb3IodGhpcywgdGhpcy5nZXROYW1lKCkgKyAiOiAiICsgQXJyYXlzLmFzTGlzdCh0aGlzLmdldENvbHVtblBhaXJzKCkpKTsgIC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRm9yZWlnbktleSBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiB0aGlzLmR0cEZvcmVpZ25LZXkuZ2V0TmFtZSgpOwotCX0KLQotCXB1YmxpYyBEVFBUYWJsZVdyYXBwZXIgZ2V0QmFzZVRhYmxlKCkgewotCQlyZXR1cm4gKERUUFRhYmxlV3JhcHBlcikgdGhpcy5nZXRQYXJlbnQoKTsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIERUUFRhYmxlV3JhcHBlciBnZXRSZWZlcmVuY2VkVGFibGUoKSB7Ci0JCWlmICh0aGlzLnJlZmVyZW5jZWRUYWJsZSA9PSBudWxsKSB7Ci0JCQl0aGlzLnJlZmVyZW5jZWRUYWJsZSA9IHRoaXMuZ2V0QmFzZVRhYmxlKCkuZ2V0VGFibGUodGhpcy5kdHBGb3JlaWduS2V5LmdldFVuaXF1ZUNvbnN0cmFpbnQoKS5nZXRCYXNlVGFibGUoKSk7Ci0JCX0KLQkJcmV0dXJuIHRoaXMucmVmZXJlbmNlZFRhYmxlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHJlZmVyZW5jZXNTaW5nbGVDb2x1bW5QcmltYXJ5S2V5KCkgewotCQlpZiAodGhpcy5jb2x1bW5QYWlyc1NpemUoKSAhPSAxKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKHRoaXMuZ2V0UmVmZXJlbmNlZFRhYmxlKCkucHJpbWFyeUtleUNvbHVtbnNTaXplKCkgIT0gMSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0aGlzLmdldENvbHVtblBhaXIoKS5nZXRSZWZlcmVuY2VkQ29sdW1uKCkgPT0gdGhpcy5nZXRSZWZlcmVuY2VkVGFibGUoKS5nZXRQcmltYXJ5S2V5Q29sdW1uKCk7Ci0JfQotCi0JLy8gKioqKiogY29sdW1uIHBhaXJzCi0KLQlwdWJsaWMgSXRlcmF0b3I8Q29sdW1uUGFpcj4gY29sdW1uUGFpcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxDb2x1bW5QYWlyPih0aGlzLmdldENvbHVtblBhaXJzKCkpOwotCX0KLQotCXB1YmxpYyBMb2NhbENvbHVtblBhaXIgZ2V0Q29sdW1uUGFpcigpIHsKLQkJTG9jYWxDb2x1bW5QYWlyW10gcGFpcnMgPSB0aGlzLmdldENvbHVtblBhaXJzKCk7Ci0JCWlmIChwYWlycy5sZW5ndGggIT0gMSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibXVsdGlwbGUgY29sdW1uIHBhaXJzOiAiICsgcGFpcnMubGVuZ3RoKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gcGFpcnNbMF07Ci0JfQotCi0JcHJpdmF0ZSBJdGVyYXRvcjxMb2NhbENvbHVtblBhaXI+IGxvY2FsQ29sdW1uUGFpcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxMb2NhbENvbHVtblBhaXI+KHRoaXMuZ2V0Q29sdW1uUGFpcnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgTG9jYWxDb2x1bW5QYWlyW10gZ2V0Q29sdW1uUGFpcnMoKSB7Ci0JCWlmICh0aGlzLmNvbHVtblBhaXJzID09IG51bGwpIHsKLQkJCXRoaXMuY29sdW1uUGFpcnMgPSB0aGlzLmJ1aWxkQ29sdW1uUGFpcnMoKTsKLQkJfQotCQlyZXR1cm4gdGhpcy5jb2x1bW5QYWlyczsKLQl9Ci0KLQlwcml2YXRlIExvY2FsQ29sdW1uUGFpcltdIGJ1aWxkQ29sdW1uUGFpcnMoKSB7Ci0JCUxpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLkNvbHVtbj4gYmFzZUNvbHVtbnMgPSB0aGlzLmdldERUUEJhc2VDb2x1bW5zKCk7Ci0JCWludCBzaXplID0gYmFzZUNvbHVtbnMuc2l6ZSgpOwotCQlMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5Db2x1bW4+IHJlZkNvbHVtbnMgPSB0aGlzLmdldERUUFJlZmVyZW5jZUNvbHVtbnMoKTsKLQkJaWYgKHJlZkNvbHVtbnMuc2l6ZSgpICE9IHNpemUpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24odGhpcy5nZXRCYXNlVGFibGUoKS5nZXROYW1lKCkgKyAnLicgKyB0aGlzLmdldE5hbWUoKSArCi0JCQkJCQkJCSIgLSBtaXNtYXRjaGVkIHNpemVzOiAiICsgc2l6ZSArICIgdnMuICIgKyByZWZDb2x1bW5zLnNpemUoKSk7ICAvLyROT04tTkxTLTEkICAvLyROT04tTkxTLTIkCi0JCX0KLQkJTG9jYWxDb2x1bW5QYWlyW10gcmVzdWx0ID0gbmV3IExvY2FsQ29sdW1uUGFpcltiYXNlQ29sdW1ucy5zaXplKCldOwotCQlmb3IgKGludCBpID0gYmFzZUNvbHVtbnMuc2l6ZSgpOyBpLS0gPiAwOyApIHsKLQkJCXJlc3VsdFtpXSA9IG5ldyBMb2NhbENvbHVtblBhaXIoCi0JCQkJCQkJCXRoaXMuZ2V0QmFzZVRhYmxlKCkuZ2V0Q29sdW1uKGJhc2VDb2x1bW5zLmdldChpKSksCi0JCQkJCQkJCXRoaXMuZ2V0QmFzZVRhYmxlKCkuZ2V0Q29sdW1uKHJlZkNvbHVtbnMuZ2V0KGkpKQotCQkJCQkJKTsKLQkJfQotCQlyZXR1cm4gQXJyYXlUb29scy5zb3J0KHJlc3VsdCwgdGhpcy5idWlsZENvbHVtblBhaXJDb21wYXJhdG9yKCkpOwotCX0KLQotCXByaXZhdGUgQ29tcGFyYXRvcjxDb2x1bW5QYWlyPiBidWlsZENvbHVtblBhaXJDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8Q29sdW1uUGFpcj4oKSB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoQ29sdW1uUGFpciBjb2x1bW5QYWlyMSwgQ29sdW1uUGFpciBjb2x1bW5QYWlyMikgewotCQkJCXJldHVybiBDb2xsYXRvci5nZXRJbnN0YW5jZSgpLmNvbXBhcmUoY29sdW1uUGFpcjEuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKSwgY29sdW1uUGFpcjIuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JLy8gbWluaW1pemUgc2NvcGUgb2Ygc3VwcHJlc3NlZCB3YXJuaW5ncwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uPiBnZXREVFBCYXNlQ29sdW1ucygpIHsKLQkJcmV0dXJuIHRoaXMuZHRwRm9yZWlnbktleS5nZXRNZW1iZXJzKCk7Ci0JfQotCi0JLy8gbWluaW1pemUgc2NvcGUgb2Ygc3VwcHJlc3NlZCB3YXJuaW5ncwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uPiBnZXREVFBSZWZlcmVuY2VDb2x1bW5zKCkgewotCQlyZXR1cm4gdGhpcy5kdHBGb3JlaWduS2V5LmdldFVuaXF1ZUNvbnN0cmFpbnQoKS5nZXRNZW1iZXJzKCk7Ci0JfQotCi0JcHVibGljIGludCBjb2x1bW5QYWlyc1NpemUoKSB7Ci0JCXJldHVybiB0aGlzLmdldENvbHVtblBhaXJzKCkubGVuZ3RoOwotCX0KLQotCXB1YmxpYyBJdGVyYXRvcjxDb2x1bW4+IGJhc2VDb2x1bW5zKCkgewotCQlyZXR1cm4gbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8TG9jYWxDb2x1bW5QYWlyLCBDb2x1bW4+KHRoaXMubG9jYWxDb2x1bW5QYWlycygpKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDb2x1bW4gdHJhbnNmb3JtKExvY2FsQ29sdW1uUGFpciBwYWlyKSB7Ci0JCQkJcmV0dXJuIHBhaXIuZ2V0QmFzZUNvbHVtbigpOwotCQkJfQotCQl9OwotCX0KLQotCWJvb2xlYW4gYmFzZUNvbHVtbnNDb250YWlucyhDb2x1bW4gY29sdW1uKSB7Ci0JCXJldHVybiBDb2xsZWN0aW9uVG9vbHMuY29udGFpbnModGhpcy5iYXNlQ29sdW1ucygpLCBjb2x1bW4pOwotCX0KLQotCXB1YmxpYyBJdGVyYXRvcjxDb2x1bW4+IG5vblByaW1hcnlLZXlCYXNlQ29sdW1ucygpIHsKLQkJcmV0dXJuIG5ldyBGaWx0ZXJpbmdJdGVyYXRvcjxDb2x1bW4sIENvbHVtbj4odGhpcy5iYXNlQ29sdW1ucygpKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBib29sZWFuIGFjY2VwdChDb2x1bW4gY29sdW1uKSB7Ci0JCQkJcmV0dXJuICEgY29sdW1uLmlzUGFydE9mUHJpbWFyeUtleSgpOwotCQkJfQotCQl9OwotCX0KLQotCXB1YmxpYyBJdGVyYXRvcjxDb2x1bW4+IHJlZmVyZW5jZWRDb2x1bW5zKCkgewotCQlyZXR1cm4gbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8TG9jYWxDb2x1bW5QYWlyLCBDb2x1bW4+KHRoaXMubG9jYWxDb2x1bW5QYWlycygpKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDb2x1bW4gdHJhbnNmb3JtKExvY2FsQ29sdW1uUGFpciBjb2x1bW5QYWlyKSB7Ci0JCQkJcmV0dXJuIGNvbHVtblBhaXIuZ2V0UmVmZXJlbmNlZENvbHVtbigpOwotCQkJfQotCQl9OwotCX0KLQotCS8vICoqKioqIGF0dHJpYnV0ZSBuYW1lCi0KLQlwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoKSB7Ci0JCVN0cmluZyBkZWZhdWx0TmFtZSA9IHRoaXMuZ2V0RGVmYXVsdEF0dHJpYnV0ZU5hbWUoKTsKLQkJcmV0dXJuIChkZWZhdWx0TmFtZSAhPSBudWxsKSA/IGRlZmF1bHROYW1lIDogdGhpcy5nZXROb25EZWZhdWx0QXR0cmlidXRlTmFtZSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgU3RyaW5nIGdldERlZmF1bHRBdHRyaWJ1dGVOYW1lKCkgewotCQlpZiAoICEgdGhpcy5kZWZhdWx0QXR0cmlidXRlTmFtZUNhbGN1bGF0ZWQpIHsKLQkJCXRoaXMuZGVmYXVsdEF0dHJpYnV0ZU5hbWVDYWxjdWxhdGVkID0gdHJ1ZTsKLQkJCXRoaXMuZGVmYXVsdEF0dHJpYnV0ZU5hbWUgPSB0aGlzLmJ1aWxkRGVmYXVsdEF0dHJpYnV0ZU5hbWUoKTsKLQkJfQotCQlyZXR1cm4gdGhpcy5kZWZhdWx0QXR0cmlidXRlTmFtZTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZERlZmF1bHRBdHRyaWJ1dGVOYW1lKCkgewotCQlpZiAoICEgdGhpcy5yZWZlcmVuY2VzU2luZ2xlQ29sdW1uUHJpbWFyeUtleSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlMb2NhbENvbHVtblBhaXIgY29sdW1uUGFpciA9IHRoaXMuZ2V0Q29sdW1uUGFpcigpOwotCQlTdHJpbmcgYmFzZUNvbE5hbWUgPSBjb2x1bW5QYWlyLmdldEJhc2VDb2x1bW4oKS5nZXROYW1lKCk7Ci0JCVN0cmluZyByZWZDb2xOYW1lID0gY29sdW1uUGFpci5nZXRSZWZlcmVuY2VkQ29sdW1uKCkuZ2V0TmFtZSgpOwotCQlpZiAoYmFzZUNvbE5hbWUubGVuZ3RoKCkgPD0gKHJlZkNvbE5hbWUubGVuZ3RoKCkgKyAxKSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJaWYgKCAhIGJhc2VDb2xOYW1lLmVuZHNXaXRoKHJlZkNvbE5hbWUpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlpbnQgX2luZGV4ID0gYmFzZUNvbE5hbWUubGVuZ3RoKCkgLSByZWZDb2xOYW1lLmxlbmd0aCgpIC0gMTsKLQkJaWYgKGJhc2VDb2xOYW1lLmNoYXJBdChfaW5kZXgpICE9ICdfJykgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJcmV0dXJuIGJhc2VDb2xOYW1lLnN1YnN0cmluZygwLCBfaW5kZXgpOwotCX0KLQotCS8qKgotCSAqIElmIHRoaXMgaXMgYSBzaW1wbGUgKHNpbmdsZS1jb2x1bW4pIGZvcmVpZ24ga2V5LCB1c2UgdGhlIG5hbWUgb2YgdGhlCi0JICogc2luZ2xlIGJhc2UgY29sdW1uIHRvIGJ1aWxkIGEgbmFtZS4gSWYgdGhpcyBpcyBhIGNvbXBvdW5kIGZvcmVpZ24ga2V5LAotCSAqIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCB0YWJsZS4KLQkgKi8KLQkvLyBUT0RPIGlmIHRoZXJlIGlzIG9ubHkgb25lIEZLIHRvIGEgZ2l2ZW4gdGFibGUsIHVzZSB0aGUgdGFibGUncyBuYW1lIGluc3RlYWQgb2YgdGhlIGNvbHVtbidzIG5hbWU/Ci0JcHJpdmF0ZSBTdHJpbmcgZ2V0Tm9uRGVmYXVsdEF0dHJpYnV0ZU5hbWUoKSB7Ci0JCXJldHVybiAodGhpcy5jb2x1bW5QYWlyc1NpemUoKSA9PSAxKSA/Ci0JCQkJCQl0aGlzLmdldE5vbkRlZmF1bHRBdHRyaWJ1dGVOYW1lRnJvbUJhc2VDb2x1bW4oKQotCQkJCQk6Ci0JCQkJCQl0aGlzLmdldFJlZmVyZW5jZWRUYWJsZSgpLmdldE5hbWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgdW5kZXJzY29yZSBjaGVjayBpcyBoZWxwZnVsIHdoZW4gdGhlIHJlZmVyZW5jZWQgY29sdW1uIGlzIE5PVCB0aGUKLQkgKiBwcmltYXJ5IGtleSBvZiB0aGUgcmVmZXJlbmNlZCB0YWJsZSAoaS5lLiBpdCBoYXMgb25seSBhIFVOSVFVRSBjb25zdHJhaW50KS4KLQkgKiAgICAgRm9yZWlnbktleShFTVAuQ1VCSUNMRV9JRCA9PiBDVUJJQ0xFLklEKSA9PiAiQ1VCSUNMRSIKLQkgKiAgICAgRm9yZWlnbktleShFTVAuQ1VCSUNMRUlEID0+IENVQklDTEUuSUQpID0+ICJDVUJJQ0xFIgotCSAqICAgICBGb3JlaWduS2V5KEVNUC5DVUJJQ0xFX1BLID0+IENVQklDTEUuSUQpID0+ICJDVUJJQ0xFX1BLIgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldE5vbkRlZmF1bHRBdHRyaWJ1dGVOYW1lRnJvbUJhc2VDb2x1bW4oKSB7Ci0JCUxvY2FsQ29sdW1uUGFpciBjb2x1bW5QYWlyID0gdGhpcy5nZXRDb2x1bW5QYWlyKCk7Ci0JCVN0cmluZyBiYXNlQ29sTmFtZSA9IGNvbHVtblBhaXIuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKTsKLQkJU3RyaW5nIHJlZkNvbE5hbWUgPSBjb2x1bW5QYWlyLmdldFJlZmVyZW5jZWRDb2x1bW4oKS5nZXROYW1lKCk7Ci0JCWludCBsZW4gPSBiYXNlQ29sTmFtZS5sZW5ndGgoKTsKLQkJaW50IHJlZkxlbiA9IHJlZkNvbE5hbWUubGVuZ3RoKCk7Ci0JCWlmICgobGVuID4gcmVmTGVuKSAmJiBiYXNlQ29sTmFtZS5lbmRzV2l0aChyZWZDb2xOYW1lKSkgewotCQkJbGVuID0gbGVuIC0gcmVmTGVuOwotCQkJaWYgKChsZW4gPiAxKSAmJiBiYXNlQ29sTmFtZS5jaGFyQXQobGVuIC0gMSkgPT0gJ18nKSB7Ci0JCQkJbGVuID0gbGVuIC0gMTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmFzZUNvbE5hbWUuc3Vic3RyaW5nKDAsIGxlbik7Ci0JfQotCi0JLyoqCi0JICogRXhhbXBsZXM6Ci0JICogT3JhY2xlIGV0Yy4KLQkgKiAgICAgRm9yZWlnbktleShGT09fSUQgPT4gSUQpIHZzLiAiZm9vIiA9PiBudWxsCi0JICogICAgIEZvcmVpZ25LZXkoRk9PX0lEID0+IEZPT19JRCkgdnMuICJmb28iID0+ICJGT09fSUQiCi0JICogICAgIEZvcmVpZ25LZXkoRk9PID0+IElEKSB2cy4gImZvbyIgPT4gIkZPTyIKLQkgKiAgICAgRm9yZWlnbktleShGb29fSUQgPT4gSUQpIHZzLiAiZm9vIiA9PiAiXCJGb29fSURcIiIKLQkgKiAgICAgCi0JICogUG9zdGdyZVNRTCBldGMuCi0JICogICAgIEZvcmVpZ25LZXkoZm9vX2lkID0+IGlkKSB2cy4gImZvbyIgPT4gbnVsbAotCSAqICAgICBGb3JlaWduS2V5KGZvb19pZCA9PiBmb29faWQpIHZzLiAiZm9vIiA9PiAiZm9vX2lkIgotCSAqICAgICBGb3JlaWduS2V5KGZvbyA9PiBpZCkgdnMuICJmb28iID0+ICJmb28iCi0JICogICAgIEZvcmVpZ25LZXkoRm9vX0lEID0+IElEKSB2cy4gImZvbyIgPT4gIlwiRm9vX0lEXCIiCi0JICogICAgIAotCSAqIFNRTCBTZXJ2ZXIgZXRjLgotCSAqICAgICBGb3JlaWduS2V5KGZvb19JRCA9PiBJRCkgdnMuICJmb28iID0+IG51bGwKLQkgKiAgICAgRm9yZWlnbktleShGT09fSUQgPT4gRk9PX0lEKSB2cy4gImZvbyIgPT4gIkZPT19JRCIKLQkgKiAgICAgRm9yZWlnbktleShGT08gPT4gSUQpIHZzLiAiZm9vIiA9PiAiRk9PIgotCSAqICAgICBGb3JlaWduS2V5KEZvb19JRCA9PiBJRCkgdnMuICJmb28iID0+ICJGb29fSUQiCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRKb2luQ29sdW1uQW5ub3RhdGlvbklkZW50aWZpZXIoU3RyaW5nIGF0dHJpYnV0ZU5hbWUpIHsKLQkJU3RyaW5nIGJhc2VDb2x1bW5OYW1lID0gdGhpcy5nZXRDb2x1bW5QYWlyKCkuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKTsKLQkJU3RyaW5nIGRlZmF1bHRCYXNlQ29sdW1uTmFtZSA9IGF0dHJpYnV0ZU5hbWUgKyAnXycgKyB0aGlzLmdldFJlZmVyZW5jZWRUYWJsZSgpLmdldFByaW1hcnlLZXlDb2x1bW4oKS5nZXROYW1lKCk7Ci0JCXJldHVybiB0aGlzLmdldERhdGFiYXNlKCkuY29udmVydE5hbWVUb0lkZW50aWZpZXIoYmFzZUNvbHVtbk5hbWUsIGRlZmF1bHRCYXNlQ29sdW1uTmFtZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JYm9vbGVhbiB3cmFwcyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5jb25zdHJhaW50cy5Gb3JlaWduS2V5IGZvcmVpZ25LZXkpIHsKLQkJcmV0dXJuIHRoaXMuZHRwRm9yZWlnbktleSA9PSBmb3JlaWduS2V5OwotCX0KLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIGNsZWFyKCkgewotCQkvLyB0aGUgZm9yZWlnbiBrZXkgZG9lcyBub3QgImNvbnRhaW4iIGFueSBvdGhlciBvYmplY3RzLAotCQkvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGZvcndhcmQgdGhlICNjbGVhcigpCi0JCXRoaXMuZGVmYXVsdEF0dHJpYnV0ZU5hbWVDYWxjdWxhdGVkID0gZmFsc2U7Ci0JCXRoaXMuZGVmYXVsdEF0dHJpYnV0ZU5hbWUgPSBudWxsOwotCQl0aGlzLmNvbHVtblBhaXJzID0gIG51bGw7Ci0JCXRoaXMucmVmZXJlbmNlZFRhYmxlID0gbnVsbDsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogY29sdW1uIHBhaXIgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0Jc3RhdGljIGNsYXNzIExvY2FsQ29sdW1uUGFpciBpbXBsZW1lbnRzIENvbHVtblBhaXIgewotCQlwcml2YXRlIGZpbmFsIERUUENvbHVtbldyYXBwZXIgYmFzZUNvbHVtbjsKLQkJcHJpdmF0ZSBmaW5hbCBEVFBDb2x1bW5XcmFwcGVyIHJlZmVyZW5jZWRDb2x1bW47Ci0KLQkJTG9jYWxDb2x1bW5QYWlyKERUUENvbHVtbldyYXBwZXIgYmFzZUNvbHVtbiwgRFRQQ29sdW1uV3JhcHBlciByZWZlcmVuY2VkQ29sdW1uKSB7Ci0JCQlzdXBlcigpOwotCQkJaWYgKChiYXNlQ29sdW1uID09IG51bGwpIHx8IChyZWZlcmVuY2VkQ29sdW1uID09IG51bGwpKSB7Ci0JCQkJdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0JCQl9Ci0JCQl0aGlzLmJhc2VDb2x1bW4gPSBiYXNlQ29sdW1uOwotCQkJdGhpcy5yZWZlcmVuY2VkQ29sdW1uID0gcmVmZXJlbmNlZENvbHVtbjsKLQkJfQotCi0JCXB1YmxpYyBEVFBDb2x1bW5XcmFwcGVyIGdldEJhc2VDb2x1bW4oKSB7Ci0JCQlyZXR1cm4gdGhpcy5iYXNlQ29sdW1uOwotCQl9Ci0KLQkJcHVibGljIERUUENvbHVtbldyYXBwZXIgZ2V0UmVmZXJlbmNlZENvbHVtbigpIHsKLQkJCXJldHVybiB0aGlzLnJlZmVyZW5jZWRDb2x1bW47Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuYmFzZUNvbHVtbi5nZXROYW1lKCkgKyAiPT4iICsgdGhpcy5yZWZlcmVuY2VkQ29sdW1uLmdldE5hbWUoKSk7ICAvLyROT04tTkxTLTEkCi0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQU2NoZW1hQ29udGFpbmVyV3JhcHBlci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQU2NoZW1hQ29udGFpbmVyV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjM2MWM3Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUFNjaGVtYUNvbnRhaW5lcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5TY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5BcnJheVRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5BcnJheUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5UcmFuc2Zvcm1hdGlvbkl0ZXJhdG9yOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKLQotLyoqCi0gKiBDb2FsZXNjZSBiZWhhdmlvciBmb3IgYSBzY2hlbWEgY29udGFpbmVyIChpLmUuIGRhdGFiYXNlIG9yIGNhdGFsb2cpLgotICovCi1hYnN0cmFjdCBjbGFzcyBEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyCi0JZXh0ZW5kcyBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIKLQlpbXBsZW1lbnRzIFNjaGVtYUNvbnRhaW5lcgotewotCS8vIGxhenktaW5pdGlhbGl6ZWQKLQlwcml2YXRlIERUUFNjaGVtYVdyYXBwZXJbXSBzY2hlbWF0YTsKLQotCi0JLy8gKioqKioqKioqKiBjb25zdHJ1Y3RvciAqKioqKioqKioqCi0KLQlEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyKERUUERhdGFiYXNlT2JqZWN0IHBhcmVudCwgT2JqZWN0IGR0cFNjaGVtYUNvbnRhaW5lcikgewotCQlzdXBlcihwYXJlbnQsIGR0cFNjaGVtYUNvbnRhaW5lcik7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIERUUFdyYXBwZXIgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgY2F0YWxvZ09iamVjdENoYW5nZWQoKSB7Ci0JCXN1cGVyLmNhdGFsb2dPYmplY3RDaGFuZ2VkKCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGFic3RyYWN0IG1ldGhvZHMgKioqKioqKioqKgotCi0JLyoqCi0JICogcmV0dXJuIHRoZSBzY2hlbWEgY29udGFpbmVyJ3MgRFRQIHNjaGVtYXRhCi0JICovCi0JYWJzdHJhY3QgTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hPiBnZXREVFBTY2hlbWF0YSgpOwotCi0JLyoqCi0JICogcmV0dXJuIHRoZSBzY2hlbWEgZm9yIHRoZSBzcGVjaWZpZWQgRFRQIHNjaGVtYQotCSAqLwotCWFic3RyYWN0IERUUFNjaGVtYVdyYXBwZXIgZ2V0U2NoZW1hKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEgZHRwU2NoZW1hKTsKLQotCS8qKgotCSAqIGFzc3VtZSB0aGUgc2NoZW1hIGNvbnRhaW5lciAoZGF0YWJhc2Ugb3IgY2F0YWxvZykgY29udGFpbnMKLQkgKiB0aGUgc3BlY2lmaWVkIHNjaGVtYQotCSAqLwotCURUUFNjaGVtYVdyYXBwZXIgZ2V0U2NoZW1hXyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hIGR0cFNjaGVtYSkgewotCQlmb3IgKERUUFNjaGVtYVdyYXBwZXIgc2NoZW1hIDogdGhpcy5nZXRTY2hlbWF0YSgpKSB7Ci0JCQlpZiAoc2NoZW1hLndyYXBzKGR0cFNjaGVtYSkpIHsKLQkJCQlyZXR1cm4gc2NoZW1hOwotCQkJfQotCQl9Ci0JCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludmFsaWQgRFRQIHNjaGVtYTogIiArIGR0cFNjaGVtYSk7ICAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogcmV0dXJuIHRoZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBEVFAgdGFibGU7Ci0JICogdGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgc2NoZW1hICh0byBpdHMgY29udGFpbmVyKQotCSAqLwotCWFic3RyYWN0IERUUFRhYmxlV3JhcHBlciBnZXRUYWJsZShvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgZHRwVGFibGUpOwotCi0JLyoqCi0JICogYXNzdW1lIHRoZSBzY2hlbWEgY29udGFpbmVyIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdGFibGUKLQkgKi8KLQlEVFBUYWJsZVdyYXBwZXIgZ2V0VGFibGVfKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5UYWJsZSBkdHBUYWJsZSkgewotCQlyZXR1cm4gdGhpcy5nZXRTY2hlbWFfKGR0cFRhYmxlLmdldFNjaGVtYSgpKS5nZXRUYWJsZV8oZHRwVGFibGUpOwotCX0KLQotCS8qKgotCSAqIHJldHVybiB0aGUgY29sdW1uIGZvciB0aGUgc3BlY2lmaWVkIERUUCBjb2x1bW47Ci0JICogdGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgc2NoZW1hICh0byBpdHMgY29udGFpbmVyKQotCSAqLwotCWFic3RyYWN0IERUUENvbHVtbldyYXBwZXIgZ2V0Q29sdW1uKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5Db2x1bW4gZHRwQ29sdW1uKTsKLQotCS8qKgotCSAqIGFzc3VtZSB0aGUgc2NoZW1hIGNvbnRhaW5lciBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNvbHVtbgotCSAqLwotCURUUENvbHVtbldyYXBwZXIgZ2V0Q29sdW1uXyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGR0cENvbHVtbikgewotCQlyZXR1cm4gdGhpcy5nZXRUYWJsZV8oZHRwQ29sdW1uLmdldFRhYmxlKCkpLmdldENvbHVtbl8oZHRwQ29sdW1uKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogc2NoZW1hdGEgKioqKioqKioqKgotCi0JcHVibGljIEl0ZXJhdG9yPFNjaGVtYT4gc2NoZW1hdGEoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxTY2hlbWE+KHRoaXMuZ2V0U2NoZW1hdGEoKSk7Ci0JfQotCi0JSXRlcmF0b3I8RFRQU2NoZW1hV3JhcHBlcj4gc2NoZW1hV3JhcHBlcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxEVFBTY2hlbWFXcmFwcGVyPih0aGlzLmdldFNjaGVtYXRhKCkpOwotCX0KLQotCXN5bmNocm9uaXplZCBEVFBTY2hlbWFXcmFwcGVyW10gZ2V0U2NoZW1hdGEoKSB7Ci0JCWlmICh0aGlzLnNjaGVtYXRhID09IG51bGwpIHsKLQkJCXRoaXMuc2NoZW1hdGEgPSB0aGlzLmJ1aWxkU2NoZW1hdGEoKTsKLQkJfQotCQlyZXR1cm4gdGhpcy5zY2hlbWF0YTsKLQl9Ci0KLQlwcml2YXRlIERUUFNjaGVtYVdyYXBwZXJbXSBidWlsZFNjaGVtYXRhKCkgewotCQlMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWE+IGR0cFNjaGVtYXRhID0gdGhpcy5nZXREVFBTY2hlbWF0YSgpOwotCQlEVFBTY2hlbWFXcmFwcGVyW10gcmVzdWx0ID0gbmV3IERUUFNjaGVtYVdyYXBwZXJbZHRwU2NoZW1hdGEuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaSA9IHJlc3VsdC5sZW5ndGg7IGktLSA+IDA7ICkgewotCQkJcmVzdWx0W2ldID0gbmV3IERUUFNjaGVtYVdyYXBwZXIodGhpcywgZHRwU2NoZW1hdGEuZ2V0KGkpKTsKLQkJfQotCQlyZXR1cm4gQXJyYXlUb29scy5zb3J0KHJlc3VsdCwgdGhpcy5idWlsZFNjaGVtYUNvbXBhcmF0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSBDb21wYXJhdG9yPFNjaGVtYT4gYnVpbGRTY2hlbWFDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8U2NoZW1hPigpIHsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShTY2hlbWEgc2NoZW1hMSwgU2NoZW1hIHNjaGVtYTIpIHsKLQkJCQlyZXR1cm4gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKS5jb21wYXJlKHNjaGVtYTEuZ2V0TmFtZSgpLCBzY2hlbWEyLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIGludCBzY2hlbWF0YVNpemUoKSB7Ci0JCXJldHVybiB0aGlzLmdldFNjaGVtYXRhKCkubGVuZ3RoOwotCX0KLQotCXB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IHNvcnRlZFNjaGVtYU5hbWVzKCkgewotCQkvLyB0aGUgc2NoZW1hdGEgYXJlIGFscmVhZHkgc29ydGVkCi0JCXJldHVybiBuZXcgVHJhbnNmb3JtYXRpb25JdGVyYXRvcjxEVFBTY2hlbWFXcmFwcGVyLCBTdHJpbmc+KHRoaXMuc2NoZW1hV3JhcHBlcnMoKSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgU3RyaW5nIHRyYW5zZm9ybShEVFBTY2hlbWFXcmFwcGVyIG5leHQpIHsKLQkJCQkgcmV0dXJuIG5leHQuZ2V0TmFtZSgpOwotCQkJfQotCQl9OwotCX0KLQotCXB1YmxpYyBEVFBTY2hlbWFXcmFwcGVyIGdldFNjaGVtYU5hbWVkKFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiB0aGlzLnNlbGVjdERhdGFiYXNlT2JqZWN0TmFtZWQodGhpcy5nZXRTY2hlbWF0YSgpLCBuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBzb3J0ZWRTY2hlbWFJZGVudGlmaWVycygpIHsKLQkJLy8gdGhlIHNjaGVtYXRhIGFyZSBhbHJlYWR5IHNvcnRlZAotCQlyZXR1cm4gbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8RFRQU2NoZW1hV3JhcHBlciwgU3RyaW5nPih0aGlzLnNjaGVtYVdyYXBwZXJzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyB0cmFuc2Zvcm0oRFRQU2NoZW1hV3JhcHBlciBuZXh0KSB7Ci0JCQkJIHJldHVybiBuZXh0LmdldElkZW50aWZpZXIoKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwdWJsaWMgRFRQU2NoZW1hV3JhcHBlciBnZXRTY2hlbWFGb3JJZGVudGlmaWVyKFN0cmluZyBpZGVudGlmaWVyKSB7Ci0JCXJldHVybiB0aGlzLnNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcih0aGlzLmdldFNjaGVtYXRhKCksIGlkZW50aWZpZXIpOwotCX0KLQotCXB1YmxpYyBEVFBTY2hlbWFXcmFwcGVyIGdldERlZmF1bHRTY2hlbWEoKSB7Ci0JCXJldHVybiB0aGlzLmdldFNjaGVtYUZvcklkZW50aWZpZXJzKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnMoKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBmaXJzdCBzY2hlbWEgZm91bmQuCi0JICovCi0JRFRQU2NoZW1hV3JhcHBlciBnZXRTY2hlbWFGb3JJZGVudGlmaWVycyhMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJZm9yIChTdHJpbmcgaWRlbnRpZmllciA6IGlkZW50aWZpZXJzKSB7Ci0JCQlEVFBTY2hlbWFXcmFwcGVyIHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKLQkJCWlmIChzY2hlbWEgIT0gbnVsbCkgewotCQkJCXJldHVybiBzY2hlbWE7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogSWYgd2UgZmluZCBhIGRlZmF1bHQgc2NoZW1hLCByZXR1cm4gaXRzIGlkZW50aWZpZXI7Ci0JICogb3RoZXJ3aXNlLCByZXR1cm4gdGhlIGxhc3QgaWRlbnRpZmllciBvbiB0aGUgbGlzdCBvZiBkZWZhdWx0IGlkZW50aWZpZXJzLgotCSAqIChTb21lIGNvbnRhaW5lcnMgaGF2ZSBtdWx0aXBsZSBwb3NzaWJsZSBkZWZhdWx0IG5hbWVzLikKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIFN0cmluZyBnZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcigpIHsKLQkJRFRQU2NoZW1hV3JhcHBlciBzY2hlbWEgPSB0aGlzLmdldERlZmF1bHRTY2hlbWEoKTsKLQkJcmV0dXJuIChzY2hlbWEgIT0gbnVsbCkgPyBzY2hlbWEuZ2V0SWRlbnRpZmllcigpIDogdGhpcy5nZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcl8oKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcl8oKSB7Ci0JCUxpc3Q8U3RyaW5nPiBpZGVudGlmaWVycyA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnMoKTsKLQkJLy8gYXNzdW1lICdpZGVudGlmaWVycycgaXMgbm9uLWVtcHR5ICghKQotCQlyZXR1cm4gaWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXJzLnNpemUoKSAtIDEpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBsaXN0ZW5pbmcgKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgc3RhcnRMaXN0ZW5pbmcoKSB7Ci0JCWlmICh0aGlzLnNjaGVtYXRhICE9IG51bGwpIHsKLQkJCXRoaXMuc3RhcnRTY2hlbWF0YSgpOwotCQl9Ci0JCXN1cGVyLnN0YXJ0TGlzdGVuaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0U2NoZW1hdGEoKSB7Ci0JCWZvciAoRFRQU2NoZW1hV3JhcHBlciBzY2hlbWEgOiB0aGlzLnNjaGVtYXRhKSB7Ci0JCQlzY2hlbWEuc3RhcnRMaXN0ZW5pbmcoKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIHN0b3BMaXN0ZW5pbmcoKSB7Ci0JCWlmICh0aGlzLnNjaGVtYXRhICE9IG51bGwpIHsKLQkJCXRoaXMuc3RvcFNjaGVtYXRhKCk7Ci0JCX0KLQkJc3VwZXIuc3RvcExpc3RlbmluZygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdG9wU2NoZW1hdGEoKSB7Ci0JCWZvciAoRFRQU2NoZW1hV3JhcHBlciBzY2hlbWEgOiB0aGlzLnNjaGVtYXRhKSB7Ci0JCQlzY2hlbWEuc3RvcExpc3RlbmluZygpOwotCQl9Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGNsZWFyICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIGNsZWFyKCkgewotCQlpZiAodGhpcy5zY2hlbWF0YSAhPSBudWxsKSB7Ci0JCQl0aGlzLmNsZWFyU2NoZW1hdGEoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjbGVhclNjaGVtYXRhKCkgewotCQl0aGlzLnN0b3BTY2hlbWF0YSgpOwotCQlmb3IgKERUUFNjaGVtYVdyYXBwZXIgc2NoZW1hIDogdGhpcy5zY2hlbWF0YSkgewotCQkJc2NoZW1hLmNsZWFyKCk7Ci0JCX0KLQkJdGhpcy5zY2hlbWF0YSA9IG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBTY2hlbWFXcmFwcGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBTY2hlbWFXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZGI3ZWEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQU2NoZW1hV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2VxdWVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkFycmF5VG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkFycmF5SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLlRyYW5zZm9ybWF0aW9uSXRlcmF0b3I7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkNvbGxhdG9yOwotCi0vKioKLSAqICBXcmFwIGEgRFRQIFNjaGVtYQotICovCi1maW5hbCBjbGFzcyBEVFBTY2hlbWFXcmFwcGVyCi0JZXh0ZW5kcyBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIKLQlpbXBsZW1lbnRzIFNjaGVtYQotewotCS8vIHRoZSB3cmFwcGVkIERUUCBzY2hlbWEKLQlwcml2YXRlIGZpbmFsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEgZHRwU2NoZW1hOwotCi0JLy8gbGF6eS1pbml0aWFsaXplZAotCXByaXZhdGUgRFRQVGFibGVXcmFwcGVyW10gdGFibGVzOwotCi0JLy8gbGF6eS1pbml0aWFsaXplZAotCXByaXZhdGUgRFRQU2VxdWVuY2VXcmFwcGVyW10gc2VxdWVuY2VzOwotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cnVjdG9yICoqKioqKioqKioKLQotCURUUFNjaGVtYVdyYXBwZXIoRFRQU2NoZW1hQ29udGFpbmVyV3JhcHBlciBjb250YWluZXIsIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEgZHRwU2NoZW1hKSB7Ci0JCXN1cGVyKGNvbnRhaW5lciwgZHRwU2NoZW1hKTsKLQkJdGhpcy5kdHBTY2hlbWEgPSBkdHBTY2hlbWE7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIERUUFdyYXBwZXIgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgY2F0YWxvZ09iamVjdENoYW5nZWQoKSB7Ci0JCXN1cGVyLmNhdGFsb2dPYmplY3RDaGFuZ2VkKCk7Ci0JCXRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGUoKS5zY2hlbWFDaGFuZ2VkKHRoaXMpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBTY2hlbWEgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBTY2hlbWEuZ2V0TmFtZSgpOwotCX0KLQotCXB1YmxpYyBEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyIGdldENvbnRhaW5lcigpIHsKLQkJcmV0dXJuIChEVFBTY2hlbWFDb250YWluZXJXcmFwcGVyKSB0aGlzLmdldFBhcmVudCgpOwotCX0KLQotCS8vICoqKioqIHRhYmxlcwotCi0JcHVibGljIEl0ZXJhdG9yPFRhYmxlPiB0YWJsZXMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxUYWJsZT4odGhpcy5nZXRUYWJsZXMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBJdGVyYXRvcjxEVFBUYWJsZVdyYXBwZXI+IHRhYmxlV3JhcHBlcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxEVFBUYWJsZVdyYXBwZXI+KHRoaXMuZ2V0VGFibGVzKCkpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIERUUFRhYmxlV3JhcHBlcltdIGdldFRhYmxlcygpIHsKLQkJaWYgKHRoaXMudGFibGVzID09IG51bGwpIHsKLQkJCXRoaXMudGFibGVzID0gdGhpcy5idWlsZFRhYmxlcygpOwotCQl9Ci0JCXJldHVybiB0aGlzLnRhYmxlczsKLQl9Ci0KLQlwcml2YXRlIERUUFRhYmxlV3JhcHBlcltdIGJ1aWxkVGFibGVzKCkgewotCQlMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5UYWJsZT4gZHRwVGFibGVzID0gdGhpcy5nZXREVFBUYWJsZXMoKTsKLQkJRFRQVGFibGVXcmFwcGVyW10gcmVzdWx0ID0gbmV3IERUUFRhYmxlV3JhcHBlcltkdHBUYWJsZXMuc2l6ZSgpXTsKLQkJZm9yIChpbnQgaSA9IHJlc3VsdC5sZW5ndGg7IGktLSA+IDA7KSB7Ci0JCQlyZXN1bHRbaV0gPSBuZXcgRFRQVGFibGVXcmFwcGVyKHRoaXMsIGR0cFRhYmxlcy5nZXQoaSkpOwotCQl9Ci0JCXJldHVybiBBcnJheVRvb2xzLnNvcnQocmVzdWx0LCB0aGlzLmJ1aWxkVGFibGVDb21wYXJhdG9yKCkpOwotCX0KLQotCXByaXZhdGUgQ29tcGFyYXRvcjxUYWJsZT4gYnVpbGRUYWJsZUNvbXBhcmF0b3IoKSB7Ci0JCXJldHVybiBuZXcgQ29tcGFyYXRvcjxUYWJsZT4oKSB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVGFibGUgdGFibGUxLCBUYWJsZSB0YWJsZTIpIHsKLQkJCQlyZXR1cm4gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKS5jb21wYXJlKHRhYmxlMS5nZXROYW1lKCksIHRhYmxlMi5nZXROYW1lKCkpOwotCQkJfQotCQl9OwotCX0KLQotCS8vIG1pbmltaXplIHNjb3BlIG9mIHN1cHByZXNzZWQgd2FybmluZ3MKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIExpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLlRhYmxlPiBnZXREVFBUYWJsZXMoKSB7Ci0JCXJldHVybiB0aGlzLmR0cFNjaGVtYS5nZXRUYWJsZXMoKTsKLQl9Ci0KLQlwdWJsaWMgaW50IHRhYmxlc1NpemUoKSB7Ci0JCXJldHVybiB0aGlzLmdldFRhYmxlcygpLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIHRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIERUUCB0YWJsZQotCSAqLwotCURUUFRhYmxlV3JhcHBlciBnZXRUYWJsZShvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgZHRwVGFibGUpIHsKLQkJLy8gdHJ5IHRvIHNob3J0LWNpcmN1aXQgdGhlIHNlYXJjaAotCQlyZXR1cm4gdGhpcy53cmFwcyhkdHBUYWJsZS5nZXRTY2hlbWEoKSkgPwotCQkJCQkJdGhpcy5nZXRUYWJsZV8oZHRwVGFibGUpCi0JCQkJCToKLQkJCQkJCXRoaXMuZ2V0Q29udGFpbmVyKCkuZ2V0VGFibGUoZHRwVGFibGUpOwotCX0KLQotCS8qKgotCSAqIGFzc3VtZSB0aGUgc2NoZW1hIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdGFibGUKLQkgKi8KLQlEVFBUYWJsZVdyYXBwZXIgZ2V0VGFibGVfKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5UYWJsZSBkdHBUYWJsZSkgewotCQlmb3IgKERUUFRhYmxlV3JhcHBlciB0YWJsZSA6IHRoaXMuZ2V0VGFibGVzKCkpIHsKLQkJCWlmICh0YWJsZS53cmFwcyhkdHBUYWJsZSkpIHsKLQkJCQlyZXR1cm4gdGFibGU7Ci0JCQl9Ci0JCX0KLQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW52YWxpZCBEVFAgdGFibGU6ICIgKyBkdHBUYWJsZSk7ICAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIERUUFRhYmxlV3JhcHBlciBnZXRUYWJsZU5hbWVkKFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiB0aGlzLnNlbGVjdERhdGFiYXNlT2JqZWN0TmFtZWQodGhpcy5nZXRUYWJsZXMoKSwgbmFtZSk7Ci0JfQotCi0JcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gc29ydGVkVGFibGVJZGVudGlmaWVycygpIHsKLQkJLy8gdGhlIHRhYmxlcyBhcmUgYWxyZWFkeSBzb3J0ZWQKLQkJcmV0dXJuIG5ldyBUcmFuc2Zvcm1hdGlvbkl0ZXJhdG9yPERUUFRhYmxlV3JhcHBlciwgU3RyaW5nPih0aGlzLnRhYmxlV3JhcHBlcnMoKSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgU3RyaW5nIHRyYW5zZm9ybShEVFBUYWJsZVdyYXBwZXIgdGFibGUpIHsKLQkJCQkgcmV0dXJuIHRhYmxlLmdldElkZW50aWZpZXIoKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwdWJsaWMgRFRQVGFibGVXcmFwcGVyIGdldFRhYmxlRm9ySWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gdGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdEZvcklkZW50aWZpZXIodGhpcy5nZXRUYWJsZXMoKSwgaWRlbnRpZmllcik7Ci0JfQotCi0JLy8gKioqKiogc2VxdWVuY2VzCi0KLQlwdWJsaWMgSXRlcmF0b3I8U2VxdWVuY2U+IHNlcXVlbmNlcygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yPFNlcXVlbmNlPih0aGlzLmdldFNlcXVlbmNlcygpKTsKLQl9Ci0KLQlwcml2YXRlIEl0ZXJhdG9yPERUUFNlcXVlbmNlV3JhcHBlcj4gc2VxdWVuY2VXcmFwcGVycygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yPERUUFNlcXVlbmNlV3JhcHBlcj4odGhpcy5nZXRTZXF1ZW5jZXMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgRFRQU2VxdWVuY2VXcmFwcGVyW10gZ2V0U2VxdWVuY2VzKCkgewotCQlpZiAodGhpcy5zZXF1ZW5jZXMgPT0gbnVsbCkgewotCQkJdGhpcy5zZXF1ZW5jZXMgPSB0aGlzLmJ1aWxkU2VxdWVuY2VzKCk7Ci0JCX0KLQkJcmV0dXJuIHRoaXMuc2VxdWVuY2VzOwotCX0KLQotCXByaXZhdGUgRFRQU2VxdWVuY2VXcmFwcGVyW10gYnVpbGRTZXF1ZW5jZXMoKSB7Ci0JCUxpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNlcXVlbmNlPiBkdHBTZXF1ZW5jZXMgPSB0aGlzLmdldERUUFNlcXVlbmNlcygpOwotCQlEVFBTZXF1ZW5jZVdyYXBwZXJbXSByZXN1bHQgPSBuZXcgRFRQU2VxdWVuY2VXcmFwcGVyW2R0cFNlcXVlbmNlcy5zaXplKCldOwotCQlmb3IgKGludCBpID0gcmVzdWx0Lmxlbmd0aDsgaS0tID4gMDspIHsKLQkJCXJlc3VsdFtpXSA9IG5ldyBEVFBTZXF1ZW5jZVdyYXBwZXIodGhpcywgZHRwU2VxdWVuY2VzLmdldChpKSk7Ci0JCX0KLQkJcmV0dXJuIEFycmF5VG9vbHMuc29ydChyZXN1bHQsIHRoaXMuYnVpbGRTZXF1ZW5jZUNvbXBhcmF0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSBDb21wYXJhdG9yPFNlcXVlbmNlPiBidWlsZFNlcXVlbmNlQ29tcGFyYXRvcigpIHsKLQkJcmV0dXJuIG5ldyBDb21wYXJhdG9yPFNlcXVlbmNlPigpIHsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShTZXF1ZW5jZSBzZXF1ZW5jZTEsIFNlcXVlbmNlIHNlcXVlbmNlMikgewotCQkJCXJldHVybiBDb2xsYXRvci5nZXRJbnN0YW5jZSgpLmNvbXBhcmUoc2VxdWVuY2UxLmdldE5hbWUoKSwgc2VxdWVuY2UyLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JLy8gbWluaW1pemUgc2NvcGUgb2Ygc3VwcHJlc3NlZCB3YXJuaW5ncwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2VxdWVuY2U+IGdldERUUFNlcXVlbmNlcygpIHsKLQkJcmV0dXJuIHRoaXMuZHRwU2NoZW1hLmdldFNlcXVlbmNlcygpOwotCX0KLQotCXB1YmxpYyBpbnQgc2VxdWVuY2VzU2l6ZSgpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0U2VxdWVuY2VzKCkubGVuZ3RoOwotCX0KLQotCXB1YmxpYyBEVFBTZXF1ZW5jZVdyYXBwZXIgZ2V0U2VxdWVuY2VOYW1lZChTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gdGhpcy5zZWxlY3REYXRhYmFzZU9iamVjdE5hbWVkKHRoaXMuZ2V0U2VxdWVuY2VzKCksIG5hbWUpOwotCX0KLQotCXB1YmxpYyBJdGVyYXRvcjxTdHJpbmc+IHNvcnRlZFNlcXVlbmNlSWRlbnRpZmllcnMoKSB7Ci0JCS8vIHRoZSBzZXF1ZW5jZXMgYXJlIGFscmVhZHkgc29ydGVkCi0JCXJldHVybiBuZXcgVHJhbnNmb3JtYXRpb25JdGVyYXRvcjxEVFBTZXF1ZW5jZVdyYXBwZXIsIFN0cmluZz4odGhpcy5zZXF1ZW5jZVdyYXBwZXJzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyB0cmFuc2Zvcm0oRFRQU2VxdWVuY2VXcmFwcGVyIHNlcXVlbmNlKSB7Ci0JCQkJIHJldHVybiBzZXF1ZW5jZS5nZXRJZGVudGlmaWVyKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHVibGljIERUUFNlcXVlbmNlV3JhcHBlciBnZXRTZXF1ZW5jZUZvcklkZW50aWZpZXIoU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJcmV0dXJuIHRoaXMuc2VsZWN0RGF0YWJhc2VPYmplY3RGb3JJZGVudGlmaWVyKHRoaXMuZ2V0U2VxdWVuY2VzKCksIGlkZW50aWZpZXIpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBpbnRlcm5hbCBtZXRob2RzICoqKioqKioqKioKLQotCWJvb2xlYW4gd3JhcHMob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYSBzY2hlbWEpIHsKLQkJcmV0dXJuIHRoaXMuZHRwU2NoZW1hID09IHNjaGVtYTsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIGNvbHVtbiBmb3IgdGhlIHNwZWNpZmllZCBEVFAgY29sdW1uCi0JICovCi0JRFRQQ29sdW1uV3JhcHBlciBnZXRDb2x1bW4ob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLkNvbHVtbiBkdHBDb2x1bW4pIHsKLQkJLy8gdHJ5IHRvIHNob3J0LWNpcmN1aXQgdGhlIHNlYXJjaAotCQlyZXR1cm4gdGhpcy53cmFwcyhkdHBDb2x1bW4uZ2V0VGFibGUoKS5nZXRTY2hlbWEoKSkgPwotCQkJCQkJdGhpcy5nZXRDb2x1bW5fKGR0cENvbHVtbikKLQkJCQkJOgotCQkJCQkJdGhpcy5nZXRDb250YWluZXIoKS5nZXRDb2x1bW4oZHRwQ29sdW1uKTsKLQl9Ci0KLQkvKioKLQkgKiBhc3N1bWUgdGhlIHNjaGVtYSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNvbHVtbgotCSAqLwotCURUUENvbHVtbldyYXBwZXIgZ2V0Q29sdW1uXyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGR0cENvbHVtbikgewotCQlyZXR1cm4gdGhpcy5nZXRUYWJsZV8oZHRwQ29sdW1uLmdldFRhYmxlKCkpLmdldENvbHVtbl8oZHRwQ29sdW1uKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbGlzdGVuaW5nICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCXN5bmNocm9uaXplZCB2b2lkIHN0YXJ0TGlzdGVuaW5nKCkgewotCQlpZiAodGhpcy5zZXF1ZW5jZXMgIT0gbnVsbCkgewotCQkJdGhpcy5zdGFydFNlcXVlbmNlcygpOwotCQl9Ci0JCWlmICh0aGlzLnRhYmxlcyAhPSBudWxsKSB7Ci0JCQl0aGlzLnN0YXJ0VGFibGVzKCk7Ci0JCX0KLQkJc3VwZXIuc3RhcnRMaXN0ZW5pbmcoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RhcnRTZXF1ZW5jZXMoKSB7Ci0JCWZvciAoRFRQU2VxdWVuY2VXcmFwcGVyIHNlcXVlbmNlIDogdGhpcy5zZXF1ZW5jZXMpIHsKLQkJCXNlcXVlbmNlLnN0YXJ0TGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RhcnRUYWJsZXMoKSB7Ci0JCWZvciAoRFRQVGFibGVXcmFwcGVyIHRhYmxlIDogdGhpcy50YWJsZXMpIHsKLQkJCXRhYmxlLnN0YXJ0TGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBzdG9wTGlzdGVuaW5nKCkgewotCQlpZiAodGhpcy5zZXF1ZW5jZXMgIT0gbnVsbCkgewotCQkJdGhpcy5zdG9wU2VxdWVuY2VzKCk7Ci0JCX0KLQkJaWYgKHRoaXMudGFibGVzICE9IG51bGwpIHsKLQkJCXRoaXMuc3RvcFRhYmxlcygpOwotCQl9Ci0JCXN1cGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcFNlcXVlbmNlcygpIHsKLQkJZm9yIChEVFBTZXF1ZW5jZVdyYXBwZXIgc2VxdWVuY2UgOiB0aGlzLnNlcXVlbmNlcykgewotCQkJc2VxdWVuY2Uuc3RvcExpc3RlbmluZygpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0b3BUYWJsZXMoKSB7Ci0JCWZvciAoRFRQVGFibGVXcmFwcGVyIHRhYmxlIDogdGhpcy50YWJsZXMpIHsKLQkJCXRhYmxlLnN0b3BMaXN0ZW5pbmcoKTsKLQkJfQotCX0KLQotCi0JLy8gKioqKioqKioqKiBjbGVhciAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBjbGVhcigpIHsKLQkJaWYgKHRoaXMuc2VxdWVuY2VzICE9IG51bGwpIHsKLQkJCXRoaXMuY2xlYXJTZXF1ZW5jZXMoKTsKLQkJfQotCQlpZiAodGhpcy50YWJsZXMgIT0gbnVsbCkgewotCQkJdGhpcy5jbGVhclRhYmxlcygpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFyU2VxdWVuY2VzKCkgewotCQl0aGlzLnN0b3BTZXF1ZW5jZXMoKTsKLQkJZm9yIChEVFBTZXF1ZW5jZVdyYXBwZXIgc2VxdWVuY2UgOiB0aGlzLnNlcXVlbmNlcykgewotCQkJc2VxdWVuY2UuY2xlYXIoKTsKLQkJfQotCQl0aGlzLnNlcXVlbmNlcyA9IG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFyVGFibGVzKCkgewotCQl0aGlzLnN0b3BUYWJsZXMoKTsKLQkJZm9yIChEVFBUYWJsZVdyYXBwZXIgdGFibGUgOiB0aGlzLnRhYmxlcykgewotCQkJdGFibGUuY2xlYXIoKTsKLQkJfQotCQl0aGlzLnRhYmxlcyA9IG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC9EVFBTZXF1ZW5jZVdyYXBwZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUFNlcXVlbmNlV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzg4NDhmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUFNlcXVlbmNlV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2VxdWVuY2U7Ci0KLS8qKgotICogIFdyYXAgYSBEVFAgU2VxdWVuY2UKLSAqLwotZmluYWwgY2xhc3MgRFRQU2VxdWVuY2VXcmFwcGVyCi0JZXh0ZW5kcyBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIKLQlpbXBsZW1lbnRzIFNlcXVlbmNlCi17Ci0JLy8gdGhlIHdyYXBwZWQgRFRQIHNlcXVlbmNlCi0JcHJpdmF0ZSBmaW5hbCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2VxdWVuY2UgZHRwU2VxdWVuY2U7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0b3IgKioqKioqKioqKgotCi0JRFRQU2VxdWVuY2VXcmFwcGVyKERUUFNjaGVtYVdyYXBwZXIgc2NoZW1hLCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2VxdWVuY2UgZHRwU2VxdWVuY2UpIHsKLQkJc3VwZXIoc2NoZW1hLCBkdHBTZXF1ZW5jZSk7Ci0JCXRoaXMuZHRwU2VxdWVuY2UgPSBkdHBTZXF1ZW5jZTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRFRQV3JhcHBlciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBjYXRhbG9nT2JqZWN0Q2hhbmdlZCgpIHsKLQkJc3VwZXIuY2F0YWxvZ09iamVjdENoYW5nZWQoKTsKLQkJdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLnNlcXVlbmNlQ2hhbmdlZCh0aGlzKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogU2VxdWVuY2UgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBTZXF1ZW5jZS5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIERUUFNjaGVtYVdyYXBwZXIgZ2V0U2NoZW1hKCkgewotCQlyZXR1cm4gKERUUFNjaGVtYVdyYXBwZXIpIHRoaXMuZ2V0UGFyZW50KCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKgotCi0JYm9vbGVhbiB3cmFwcyhvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2VxdWVuY2Ugc2VxdWVuY2UpIHsKLQkJcmV0dXJuIHRoaXMuZHRwU2VxdWVuY2UgPT0gc2VxdWVuY2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0Jdm9pZCBjbGVhcigpIHsKLQkJLy8gbm8gc3RhdGUgdG8gY2xlYXIKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL0RUUFRhYmxlV3JhcHBlci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQVGFibGVXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNGUwZjAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvRFRQVGFibGVXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5jb25zdHJhaW50cy5QcmltYXJ5S2V5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5CYXNlVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQXJyYXlUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuQXJyYXlJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuVHJhbnNmb3JtYXRpb25JdGVyYXRvcjsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuQ29sbGF0b3I7Ci0KLS8qKgotICogIFdyYXAgYSBEVFAgVGFibGUKLSAqLwotZmluYWwgY2xhc3MgRFRQVGFibGVXcmFwcGVyCi0JZXh0ZW5kcyBEVFBEYXRhYmFzZU9iamVjdFdyYXBwZXIKLQlpbXBsZW1lbnRzIFRhYmxlCi17Ci0JLy8gdGhlIHdyYXBwZWQgRFRQIHRhYmxlCi0JcHJpdmF0ZSBmaW5hbCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgZHRwVGFibGU7Ci0KLQkvLyBsYXp5LWluaXRpYWxpemVkCi0JcHJpdmF0ZSBEVFBDb2x1bW5XcmFwcGVyW10gY29sdW1uczsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQKLQlwcml2YXRlIERUUENvbHVtbldyYXBwZXJbXSBwcmltYXJ5S2V5Q29sdW1uczsKLQotCS8vIGxhenktaW5pdGlhbGl6ZWQKLQlwcml2YXRlIERUUEZvcmVpZ25LZXlXcmFwcGVyW10gZm9yZWlnbktleXM7Ci0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIERUUENvbHVtbldyYXBwZXJbXSBFTVBUWV9DT0xVTU5TID0gbmV3IERUUENvbHVtbldyYXBwZXJbMF07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgRFRQRm9yZWlnbktleVdyYXBwZXJbXSBFTVBUWV9GT1JFSUdOX0tFWVMgPSBuZXcgRFRQRm9yZWlnbktleVdyYXBwZXJbMF07Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0b3IgKioqKioqKioqKgotCi0JRFRQVGFibGVXcmFwcGVyKERUUFNjaGVtYVdyYXBwZXIgc2NoZW1hLCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgZHRwVGFibGUpIHsKLQkJc3VwZXIoc2NoZW1hLCBkdHBUYWJsZSk7Ci0JCXRoaXMuZHRwVGFibGUgPSBkdHBUYWJsZTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRFRQV3JhcHBlciBpbXBsZW1lbnRhdGlvbiAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBjYXRhbG9nT2JqZWN0Q2hhbmdlZCgpIHsKLQkJc3VwZXIuY2F0YWxvZ09iamVjdENoYW5nZWQoKTsKLQkJdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZSgpLnRhYmxlQ2hhbmdlZCh0aGlzKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogVGFibGUgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBUYWJsZS5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIERUUFNjaGVtYVdyYXBwZXIgZ2V0U2NoZW1hKCkgewotCQlyZXR1cm4gKERUUFNjaGVtYVdyYXBwZXIpIHRoaXMuZ2V0UGFyZW50KCk7Ci0JfQotCi0JLy8gKioqKiogY29sdW1ucwotCi0JcHVibGljIEl0ZXJhdG9yPENvbHVtbj4gY29sdW1ucygpIHsKLQkJcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yPENvbHVtbj4odGhpcy5nZXRDb2x1bW5zKCkpOwotCX0KLQotCXByaXZhdGUgSXRlcmF0b3I8RFRQQ29sdW1uV3JhcHBlcj4gY29sdW1uV3JhcHBlcnMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxEVFBDb2x1bW5XcmFwcGVyPih0aGlzLmdldENvbHVtbnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgRFRQQ29sdW1uV3JhcHBlcltdIGdldENvbHVtbnMoKSB7Ci0JCWlmICh0aGlzLmNvbHVtbnMgPT0gbnVsbCkgewotCQkJdGhpcy5jb2x1bW5zID0gdGhpcy5idWlsZENvbHVtbnMoKTsKLQkJfQotCQlyZXR1cm4gdGhpcy5jb2x1bW5zOwotCX0KLQotCXByaXZhdGUgRFRQQ29sdW1uV3JhcHBlcltdIGJ1aWxkQ29sdW1ucygpIHsKLQkJTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uPiBkdHBDb2x1bW5zID0gdGhpcy5nZXREVFBDb2x1bW5zKCk7Ci0JCURUUENvbHVtbldyYXBwZXJbXSByZXN1bHQgPSBuZXcgRFRQQ29sdW1uV3JhcHBlcltkdHBDb2x1bW5zLnNpemUoKV07Ci0JCWZvciAoaW50IGkgPSByZXN1bHQubGVuZ3RoOyBpLS0gPiAwOykgewotCQkJcmVzdWx0W2ldID0gbmV3IERUUENvbHVtbldyYXBwZXIodGhpcywgZHRwQ29sdW1ucy5nZXQoaSkpOwotCQl9Ci0JCXJldHVybiBBcnJheVRvb2xzLnNvcnQocmVzdWx0LCB0aGlzLmJ1aWxkQ29sdW1uQ29tcGFyYXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIENvbXBhcmF0b3I8Q29sdW1uPiBidWlsZENvbHVtbkNvbXBhcmF0b3IoKSB7Ci0JCXJldHVybiBuZXcgQ29tcGFyYXRvcjxDb2x1bW4+KCkgewotCQkJcHVibGljIGludCBjb21wYXJlKENvbHVtbiBjb2x1bW4xLCBDb2x1bW4gY29sdW1uMikgewotCQkJCXJldHVybiBDb2xsYXRvci5nZXRJbnN0YW5jZSgpLmNvbXBhcmUoY29sdW1uMS5nZXROYW1lKCksIGNvbHVtbjIuZ2V0TmFtZSgpKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQkvLyBtaW5pbWl6ZSBzY29wZSBvZiBzdXBwcmVzc2VkIHdhcm5pbmdzCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5Db2x1bW4+IGdldERUUENvbHVtbnMoKSB7Ci0JCXJldHVybiB0aGlzLmR0cFRhYmxlLmdldENvbHVtbnMoKTsKLQl9Ci0KLQlwdWJsaWMgaW50IGNvbHVtbnNTaXplKCkgewotCQlyZXR1cm4gdGhpcy5nZXRDb2x1bW5zKCkubGVuZ3RoOwotCX0KLQotCXB1YmxpYyBEVFBDb2x1bW5XcmFwcGVyIGdldENvbHVtbk5hbWVkKFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiB0aGlzLnNlbGVjdERhdGFiYXNlT2JqZWN0TmFtZWQodGhpcy5nZXRDb2x1bW5zKCksIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIHJldHVybiB0aGUgY29sdW1uIGZvciB0aGUgc3BlY2lmaWVkIERUUCBjb2x1bW4KLQkgKi8KLQlEVFBDb2x1bW5XcmFwcGVyIGdldENvbHVtbihvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uIGR0cENvbHVtbikgewotCQkvLyB0cnkgdG8gc2hvcnQtY2lyY3VpdCB0aGUgc2VhcmNoCi0JCXJldHVybiB0aGlzLndyYXBzKGR0cENvbHVtbi5nZXRUYWJsZSgpKSA/Ci0JCQkJCQl0aGlzLmdldENvbHVtbl8oZHRwQ29sdW1uKQotCQkJCQk6Ci0JCQkJCQl0aGlzLmdldFNjaGVtYSgpLmdldENvbHVtbihkdHBDb2x1bW4pOwotCX0KLQotCS8qKgotCSAqIGFzc3VtZSB0aGUgdGFibGUgY29udGFpbnMgdGhlIHNwZWNpZmllZCBjb2x1bW4KLQkgKi8KLQlEVFBDb2x1bW5XcmFwcGVyIGdldENvbHVtbl8ob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLkNvbHVtbiBkdHBDb2x1bW4pIHsKLQkJZm9yIChEVFBDb2x1bW5XcmFwcGVyIGNvbHVtbiA6IHRoaXMuZ2V0Q29sdW1ucygpKSB7Ci0JCQlpZiAoY29sdW1uLndyYXBzKGR0cENvbHVtbikpIHsKLQkJCQlyZXR1cm4gY29sdW1uOwotCQkJfQotCQl9Ci0JCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludmFsaWQgRFRQIGNvbHVtbjogIiArIGR0cENvbHVtbik7ICAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIEl0ZXJhdG9yPFN0cmluZz4gc29ydGVkQ29sdW1uSWRlbnRpZmllcnMoKSB7Ci0JCS8vIHRoZSBjb2x1bW5zIGFyZSBhbHJlYWR5IHNvcnRlZAotCQlyZXR1cm4gbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8RFRQQ29sdW1uV3JhcHBlciwgU3RyaW5nPih0aGlzLmNvbHVtbldyYXBwZXJzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyB0cmFuc2Zvcm0oRFRQQ29sdW1uV3JhcHBlciBuZXh0KSB7Ci0JCQkJIHJldHVybiBuZXh0LmdldElkZW50aWZpZXIoKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwdWJsaWMgRFRQQ29sdW1uV3JhcHBlciBnZXRDb2x1bW5Gb3JJZGVudGlmaWVyKFN0cmluZyBpZGVudGlmaWVyKSB7Ci0JCXJldHVybiB0aGlzLnNlbGVjdERhdGFiYXNlT2JqZWN0Rm9ySWRlbnRpZmllcih0aGlzLmdldENvbHVtbnMoKSwgaWRlbnRpZmllcik7Ci0JfQotCi0JLy8gKioqKiogcHJpbWFyeUtleUNvbHVtbnMKLQotCXB1YmxpYyBJdGVyYXRvcjxDb2x1bW4+IHByaW1hcnlLZXlDb2x1bW5zKCkgewotCQlyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3I8Q29sdW1uPih0aGlzLmdldFByaW1hcnlLZXlDb2x1bW5zKCkpOwotCX0KLQotCXB1YmxpYyBEVFBDb2x1bW5XcmFwcGVyIGdldFByaW1hcnlLZXlDb2x1bW4oKSB7Ci0JCURUUENvbHVtbldyYXBwZXJbXSBwa0NvbHVtbnMgPSB0aGlzLmdldFByaW1hcnlLZXlDb2x1bW5zKCk7Ci0JCWlmIChwa0NvbHVtbnMubGVuZ3RoICE9IDEpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm11bHRpcGxlIHByaW1hcnkga2V5IGNvbHVtbnM6ICIgKyBwa0NvbHVtbnMubGVuZ3RoKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gcGtDb2x1bW5zWzBdOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIERUUENvbHVtbldyYXBwZXJbXSBnZXRQcmltYXJ5S2V5Q29sdW1ucygpIHsKLQkJaWYgKHRoaXMucHJpbWFyeUtleUNvbHVtbnMgPT0gbnVsbCkgewotCQkJdGhpcy5wcmltYXJ5S2V5Q29sdW1ucyA9IHRoaXMuYnVpbGRQcmltYXJ5S2V5Q29sdW1ucygpOwotCQl9Ci0JCXJldHVybiB0aGlzLnByaW1hcnlLZXlDb2x1bW5zOwotCX0KLQotCXByaXZhdGUgRFRQQ29sdW1uV3JhcHBlcltdIGJ1aWxkUHJpbWFyeUtleUNvbHVtbnMoKSB7Ci0JCWlmICggISAodGhpcy5kdHBUYWJsZSBpbnN0YW5jZW9mIEJhc2VUYWJsZSkpIHsKLQkJCXJldHVybiBFTVBUWV9DT0xVTU5TOwotCQl9Ci0JCVByaW1hcnlLZXkgcGsgPSAoKEJhc2VUYWJsZSkgdGhpcy5kdHBUYWJsZSkuZ2V0UHJpbWFyeUtleSgpOwotCQlpZiAocGsgPT0gbnVsbCkgewotCQkJLy8gbm8gUEsgd2FzIGRlZmluZWQKLQkJCXJldHVybiBFTVBUWV9DT0xVTU5TOwotCQl9Ci0JCUxpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwudGFibGVzLkNvbHVtbj4gcGtDb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zKHBrKTsKLQkJRFRQQ29sdW1uV3JhcHBlcltdIHJlc3VsdCA9IG5ldyBEVFBDb2x1bW5XcmFwcGVyW3BrQ29sdW1ucy5zaXplKCldOwotCQlmb3IgKGludCBpID0gcmVzdWx0Lmxlbmd0aDsgaS0tID4gMDspIHsKLQkJCXJlc3VsdFtpXSA9IHRoaXMuZ2V0Q29sdW1uKHBrQ29sdW1ucy5nZXQoaSkpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLy8gbWluaW1pemUgc2NvcGUgb2Ygc3VwcHJlc3NlZCB3YXJuaW5ncwotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuQ29sdW1uPiBnZXRDb2x1bW5zKFByaW1hcnlLZXkgcGspIHsKLQkJcmV0dXJuIHBrLmdldE1lbWJlcnMoKTsKLQl9Ci0KLQlwdWJsaWMgaW50IHByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0UHJpbWFyeUtleUNvbHVtbnMoKS5sZW5ndGg7Ci0JfQotCi0JYm9vbGVhbiBwcmltYXJ5S2V5Q29sdW1uc0NvbnRhaW5zKENvbHVtbiBjb2x1bW4pIHsKLQkJcmV0dXJuIEFycmF5VG9vbHMuY29udGFpbnModGhpcy5nZXRQcmltYXJ5S2V5Q29sdW1ucygpLCBjb2x1bW4pOwotCX0KLQotCS8vICoqKioqIGZvcmVpZ25LZXlzCi0KLQlwdWJsaWMgSXRlcmF0b3I8Rm9yZWlnbktleT4gZm9yZWlnbktleXMoKSB7Ci0JCXJldHVybiBuZXcgQXJyYXlJdGVyYXRvcjxGb3JlaWduS2V5Pih0aGlzLmdldEZvcmVpZ25LZXlzKCkpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIERUUEZvcmVpZ25LZXlXcmFwcGVyW10gZ2V0Rm9yZWlnbktleXMoKSB7Ci0JCWlmICh0aGlzLmZvcmVpZ25LZXlzID09IG51bGwpIHsKLQkJCXRoaXMuZm9yZWlnbktleXMgPSB0aGlzLmJ1aWxkRm9yZWlnbktleXMoKTsKLQkJfQotCQlyZXR1cm4gdGhpcy5mb3JlaWduS2V5czsKLQl9Ci0KLQlwcml2YXRlIERUUEZvcmVpZ25LZXlXcmFwcGVyW10gYnVpbGRGb3JlaWduS2V5cygpIHsKLQkJaWYgKCAhICh0aGlzLmR0cFRhYmxlIGluc3RhbmNlb2YgQmFzZVRhYmxlKSkgewotCQkJcmV0dXJuIEVNUFRZX0ZPUkVJR05fS0VZUzsKLQkJfQotCQlMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmNvbnN0cmFpbnRzLkZvcmVpZ25LZXk+IGR0cEZvcmVpZ25LZXlzID0gdGhpcy5nZXREVFBGb3JlaWduS2V5cygpOwotCQlEVFBGb3JlaWduS2V5V3JhcHBlcltdIHJlc3VsdCA9IG5ldyBEVFBGb3JlaWduS2V5V3JhcHBlcltkdHBGb3JlaWduS2V5cy5zaXplKCldOwotCQlmb3IgKGludCBpID0gcmVzdWx0Lmxlbmd0aDsgaS0tID4gMDspIHsKLQkJCXJlc3VsdFtpXSA9IG5ldyBEVFBGb3JlaWduS2V5V3JhcHBlcih0aGlzLCBkdHBGb3JlaWduS2V5cy5nZXQoaSkpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBMaXN0PG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLmNvbnN0cmFpbnRzLkZvcmVpZ25LZXk+IGdldERUUEZvcmVpZ25LZXlzKCkgewotCQlyZXR1cm4gKChCYXNlVGFibGUpIHRoaXMuZHRwVGFibGUpLmdldEZvcmVpZ25LZXlzKCk7Ci0JfQotCi0JcHVibGljIGludCBmb3JlaWduS2V5c1NpemUoKSB7Ci0JCXJldHVybiB0aGlzLmdldEZvcmVpZ25LZXlzKCkubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIHJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29sdW1uIGlzIGEgYmFzZSBjb2x1bW4gZm9yIGF0IGxlYXN0IG9uZQotCSAqIG9mIHRoZSB0aGUgdGFibGUncyBmb3JlaWduIGtleXMKLQkgKi8KLQlib29sZWFuIGZvcmVpZ25LZXlCYXNlQ29sdW1uc0NvbnRhaW5zKENvbHVtbiBjb2x1bW4pIHsKLQkJZm9yIChEVFBGb3JlaWduS2V5V3JhcHBlciBma1dyYXBwZXIgOiB0aGlzLmdldEZvcmVpZ25LZXlzKCkpIHsKLQkJCWlmIChma1dyYXBwZXIuYmFzZUNvbHVtbnNDb250YWlucyhjb2x1bW4pKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8vICoqKioqIGpvaW4gdGFibGUKLQotCXB1YmxpYyBib29sZWFuIGlzUG9zc2libGVKb2luVGFibGUoKSB7Ci0JCWlmICh0aGlzLmdldEZvcmVpZ25LZXlzKCkubGVuZ3RoICE9IDIpIHsKLQkJCXJldHVybiBmYWxzZTsgIC8vIHRoZSB0YWJsZSBtdXN0IGhhdmUgZXhhY3RseSAyIGZvcmVpZ24ga2V5cwotCQl9Ci0JCWZvciAoQ29sdW1uIGNvbHVtbiA6IHRoaXMuZ2V0Q29sdW1ucygpKSB7Ci0JCQlpZiAoICEgdGhpcy5mb3JlaWduS2V5QmFzZUNvbHVtbnNDb250YWlucyhjb2x1bW4pKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOyAgLy8gYWxsIHRoZSB0YWJsZSdzIGNvbHVtbnMgbXVzdCBiZWxvbmcgdG8gb25lIChvciBib3RoKSBvZiB0aGUgMiBmb3JlaWduIGtleXMKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBJZiB0aGUgdGFibGUgbmFtZSBpcyBGT09fQkFSIGFuZCBpdCBqb2lucyB0YWJsZXMgRk9PIGFuZCBCQVIsCi0JICogcmV0dXJuIHRoZSBmb3JlaWduIGtleSB0byBGT087Ci0JICogaWYgdGhlIHRhYmxlIG5hbWUgaXMgQkFSX0ZPTyBhbmQgaXQgam9pbnMgdGFibGVzIEZPTyBhbmQgQkFSLAotCSAqIHJldHVybiB0aGUgZm9yZWlnbiBrZXkgdG8gQkFSOwotCSAqIG90aGVyd2lzZSBzaW1wbHkgcmV0dXJuIHRoZSBmaXJzdCBmb3JlaWduIGtleSBpbiB0aGUgYXJyYXkuCi0JICovCi0JcHVibGljIEZvcmVpZ25LZXkgZ2V0Sm9pblRhYmxlT3duaW5nRm9yZWlnbktleSgpIHsKLQkJRm9yZWlnbktleSBmazAgPSB0aGlzLmdldEZvcmVpZ25LZXlzKClbMF07Ci0JCVN0cmluZyBuYW1lMCA9IGZrMC5nZXRSZWZlcmVuY2VkVGFibGUoKS5nZXROYW1lKCk7Ci0KLQkJRm9yZWlnbktleSBmazEgPSB0aGlzLmdldEZvcmVpZ25LZXlzKClbMV07Ci0JCVN0cmluZyBuYW1lMSA9IGZrMS5nZXRSZWZlcmVuY2VkVGFibGUoKS5nZXROYW1lKCk7Ci0KLQkJcmV0dXJuIHRoaXMuZ2V0TmFtZSgpLmVxdWFscyhuYW1lMSArICdfJyArIG5hbWUwKSA/IGZrMSA6IGZrMDsKLQl9Ci0KLQlwdWJsaWMgRm9yZWlnbktleSBnZXRKb2luVGFibGVOb25Pd25pbmdGb3JlaWduS2V5KCkgewotCQlGb3JlaWduS2V5IGZrMCA9IHRoaXMuZ2V0Rm9yZWlnbktleXMoKVswXTsKLQkJRm9yZWlnbktleSBmazEgPSB0aGlzLmdldEZvcmVpZ25LZXlzKClbMV07Ci0JCUZvcmVpZ25LZXkgb2ZrID0gdGhpcy5nZXRKb2luVGFibGVPd25pbmdGb3JlaWduS2V5KCk7Ci0JCXJldHVybiAob2ZrID09IGZrMCkgPyBmazEgOiBmazA7Ci0JfQotCi0JLyoqCi0JICogSG1tbS4uLi4KLQkgKiBXZSBtaWdodCB3YW50IHRvIGdvIHRvIHRoZSBwbGF0Zm9ybSB0byBhbGxvdyBhIHZlbmRvci1zcGVjaWZpYwotCSAqIGNvbXBhcmlzb24gaGVyZTsKLQkgKiBidXQsIHNpbmNlIGFsbCB0aGUgbmFtZXMgYXJlIGNvbWluZyBkaXJlY3RseSBmcm9tIHRoZSBkYXRhYmFzZQotCSAqIChpLmUuIHRoZXJlIGFyZSBubyBjb252ZXJzaW9ucyB0byBKYXZhIGlkZW50aWZpZXJzIGV0Yy4pLCBpdCBzZWVtcwotCSAqIGxpa2Ugd2UgY2FuIGp1c3QgY29tcGFyZSB0aGVtIGRpcmVjdGx5IGFuZCBpZ25vcmUgY2FzZS1zZW5zaXRpdml0eQotCSAqIGlzc3Vlcy4uLi4gIH5ianYKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBqb2luVGFibGVOYW1lSXNEZWZhdWx0KCkgewotCQlyZXR1cm4gdGhpcy5nZXROYW1lKCkuZXF1YWxzKHRoaXMuYnVpbGREZWZhdWx0Sm9pblRhYmxlTmFtZSgpKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZERlZmF1bHRKb2luVGFibGVOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5nZXRKb2luVGFibGVPd25pbmdUYWJsZSgpLmdldE5hbWUoKQotCQkJCQkrICdfJwotCQkJCQkrIHRoaXMuZ2V0Sm9pblRhYmxlTm9uT3duaW5nVGFibGUoKS5nZXROYW1lKCk7Ci0JfQotCi0JcHJpdmF0ZSBUYWJsZSBnZXRKb2luVGFibGVPd25pbmdUYWJsZSgpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0Sm9pblRhYmxlT3duaW5nRm9yZWlnbktleSgpLmdldFJlZmVyZW5jZWRUYWJsZSgpOwotCX0KLQotCXByaXZhdGUgVGFibGUgZ2V0Sm9pblRhYmxlTm9uT3duaW5nVGFibGUoKSB7Ci0JCXJldHVybiB0aGlzLmdldEpvaW5UYWJsZU5vbk93bmluZ0ZvcmVpZ25LZXkoKS5nZXRSZWZlcmVuY2VkVGFibGUoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogaW50ZXJuYWwgbWV0aG9kcyAqKioqKioqKioqCi0KLQlib29sZWFuIHdyYXBzKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnRhYmxlcy5UYWJsZSB0YWJsZSkgewotCQlyZXR1cm4gdGhpcy5kdHBUYWJsZSA9PSB0YWJsZTsKLQl9Ci0KLQkvKioKLQkgKiByZXR1cm4gdGhlIHRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIERUUCB0YWJsZQotCSAqLwotCURUUFRhYmxlV3JhcHBlciBnZXRUYWJsZShvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC50YWJsZXMuVGFibGUgdGFibGUpIHsKLQkJLy8gdHJ5IHRvIHNob3J0LWNpcmN1aXQgdGhlIHNlYXJjaAotCQlyZXR1cm4gdGhpcy53cmFwcyh0YWJsZSkgPyB0aGlzIDogdGhpcy5nZXRTY2hlbWEoKS5nZXRUYWJsZSh0YWJsZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGxpc3RlbmluZyAqKioqKioqKioqCi0KLQlAT3ZlcnJpZGUKLQlzeW5jaHJvbml6ZWQgdm9pZCBzdGFydExpc3RlbmluZygpIHsKLQkJaWYgKHRoaXMuZm9yZWlnbktleXMgIT0gbnVsbCkgewotCQkJdGhpcy5zdGFydEZvcmVpZ25LZXlzKCk7Ci0JCX0KLQkJaWYgKHRoaXMuY29sdW1ucyAhPSBudWxsKSB7Ci0JCQl0aGlzLnN0YXJ0Q29sdW1ucygpOwotCQl9Ci0JCXN1cGVyLnN0YXJ0TGlzdGVuaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0Rm9yZWlnbktleXMoKSB7Ci0JCWZvciAoRFRQRm9yZWlnbktleVdyYXBwZXIgZm9yZWlnbktleSA6IHRoaXMuZm9yZWlnbktleXMpIHsKLQkJCWZvcmVpZ25LZXkuc3RhcnRMaXN0ZW5pbmcoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzdGFydENvbHVtbnMoKSB7Ci0JCWZvciAoRFRQQ29sdW1uV3JhcHBlciBjb2x1bW4gOiB0aGlzLmNvbHVtbnMpIHsKLQkJCWNvbHVtbi5zdGFydExpc3RlbmluZygpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLQkJaWYgKHRoaXMuZm9yZWlnbktleXMgIT0gbnVsbCkgewotCQkJdGhpcy5zdG9wRm9yZWlnbktleXMoKTsKLQkJfQotCQlpZiAodGhpcy5jb2x1bW5zICE9IG51bGwpIHsKLQkJCXRoaXMuc3RvcENvbHVtbnMoKTsKLQkJfQotCQlzdXBlci5zdG9wTGlzdGVuaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb3JlaWduS2V5cygpIHsKLQkJZm9yIChEVFBGb3JlaWduS2V5V3JhcHBlciBmb3JlaWduS2V5IDogdGhpcy5mb3JlaWduS2V5cykgewotCQkJZm9yZWlnbktleS5zdG9wTGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RvcENvbHVtbnMoKSB7Ci0JCWZvciAoRFRQQ29sdW1uV3JhcHBlciBjb2x1bW4gOiB0aGlzLmNvbHVtbnMpIHsKLQkJCWNvbHVtbi5zdG9wTGlzdGVuaW5nKCk7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogY2xlYXIgKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0Jc3luY2hyb25pemVkIHZvaWQgY2xlYXIoKSB7Ci0JCWlmICh0aGlzLmZvcmVpZ25LZXlzICE9IG51bGwpIHsKLQkJCXRoaXMuY2xlYXJGb3JlaWduS2V5cygpOwotCQl9Ci0KLQkJLy8gdGhlIHRhYmxlIGRvZXMgbm90ICJjb250YWluIiB0aGUgcGsgY29sdW1ucywgc28gbm8gbmVlZCB0byBmb3J3YXJkICNjbGVhcigpCi0JCXRoaXMucHJpbWFyeUtleUNvbHVtbnMgPSBudWxsOwotCi0JCWlmICh0aGlzLmNvbHVtbnMgIT0gbnVsbCkgewotCQkJdGhpcy5jbGVhckNvbHVtbnMoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjbGVhckZvcmVpZ25LZXlzKCkgewotCQl0aGlzLnN0b3BGb3JlaWduS2V5cygpOwotCQlmb3IgKERUUEZvcmVpZ25LZXlXcmFwcGVyIGZvcmVpZ25LZXkgOiB0aGlzLmZvcmVpZ25LZXlzKSB7Ci0JCQlmb3JlaWduS2V5LmNsZWFyKCk7Ci0JCX0KLSAgICAJdGhpcy5mb3JlaWduS2V5cyA9IG51bGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFyQ29sdW1ucygpIHsKLQkJdGhpcy5zdG9wQ29sdW1ucygpOwotCQlmb3IgKERUUENvbHVtbldyYXBwZXIgY29sdW1uIDogdGhpcy5jb2x1bW5zKSB7Ci0JCQljb2x1bW4uY2xlYXIoKTsKLQkJfQotICAgIAl0aGlzLmNvbHVtbnMgPSBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0Fic3RyYWN0VmVuZG9yLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvQWJzdHJhY3RWZW5kb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0YTlhYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvQWJzdHJhY3RWZW5kb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkFycmF5VG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci0KLS8qKgotICogQ29uc29saWRhdGUgdGhlIGJlaGF2aW9yIGNvbW1vbiB0byB0aGUgdHlwaWNhbCB2ZW5kb3JzLgotICovCi1hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZlbmRvcgotCWltcGxlbWVudHMgVmVuZG9yCi17Ci0KLQlBYnN0cmFjdFZlbmRvcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERUUFZlbmRvck5hbWUoKTsKLQotCi0JLy8gKioqKioqKioqKiBjYXRhbG9nIGFuZCBzY2hlbWEgc3VwcG9ydCAqKioqKioqKioqCi0KLQlhYnN0cmFjdCBDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCk7Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0NhdGFsb2dzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiB0aGlzLmdldENhdGFsb2dTdHJhdGVneSgpLnN1cHBvcnRzQ2F0YWxvZ3MoZGF0YWJhc2UpOwotCX0KLQotCXB1YmxpYyBMaXN0PENhdGFsb2c+IGdldENhdGFsb2dzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiB0aGlzLmdldENhdGFsb2dTdHJhdGVneSgpLmdldENhdGFsb2dzKGRhdGFiYXNlKTsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxTY2hlbWE+IGdldFNjaGVtYXMoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiB0aGlzLmdldENhdGFsb2dTdHJhdGVneSgpLmdldFNjaGVtYXMoZGF0YWJhc2UpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ2ZW5kb3I6ICIgKyB0aGlzLCBleCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0KLQotCS8qKgotCSAqIFR5cGljYWxseSwgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgY2F0YWxvZyBpcyB0aGUgdXNlciBuYW1lLgotCSAqLwotCXB1YmxpYyBmaW5hbCBMaXN0PFN0cmluZz4gZ2V0RGVmYXVsdENhdGFsb2dJZGVudGlmaWVycyhEYXRhYmFzZSBkYXRhYmFzZSwgU3RyaW5nIHVzZXJOYW1lKSB7Ci0JCWlmICggISB0aGlzLnN1cHBvcnRzQ2F0YWxvZ3MoZGF0YWJhc2UpKSB7Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0JCX0KLQkJQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJdGhpcy5hZGREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzVG8oZGF0YWJhc2UsIHVzZXJOYW1lLCBpZGVudGlmaWVycyk7Ci0JCXJldHVybiBpZGVudGlmaWVyczsKLQl9Ci0KLQl2b2lkIGFkZERlZmF1bHRDYXRhbG9nSWRlbnRpZmllcnNUbyhAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKHRoaXMuY29udmVydE5hbWVUb0lkZW50aWZpZXIodXNlck5hbWUpKTsKLQl9Ci0KLQkvKioKLQkgKiBUeXBpY2FsbHksIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHNjaGVtYSBpcyB0aGUgdXNlciBuYW1lLgotCSAqLwotCXB1YmxpYyBmaW5hbCBMaXN0PFN0cmluZz4gZ2V0RGVmYXVsdFNjaGVtYUlkZW50aWZpZXJzKERhdGFiYXNlIGRhdGFiYXNlLCBTdHJpbmcgdXNlck5hbWUpIHsKLQkJQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJdGhpcy5hZGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnNUbyhkYXRhYmFzZSwgdXNlck5hbWUsIGlkZW50aWZpZXJzKTsKLQkJcmV0dXJuIGlkZW50aWZpZXJzOwotCX0KLQotCS8qKgotCSAqIFRoZSB1c2VyIG5hbWUgcGFzc2VkIGluIGhlcmUgd2FzIHJldHJpZXZlZCBmcm9tIERUUC4KLQkgKiBEVFAgc3RvcmVzIHRoZSB1c2VyIG5hbWUgdGhhdCB3YXMgcGFzc2VkIHRvIGl0IGR1cmluZyB0aGUgY29ubmVjdGlvbgotCSAqIHRvIHRoZSBkYXRhYmFzZS4gQXMgYSByZXN1bHQsIHRoaXMgdXNlciBuYW1lIGlzIGFuICJpZGVudGlmaWVyIiBub3QgYSAibmFtZSIuCi0JICogSWYgdGhlIHVzZXIgbmFtZSB3ZXJlIHJldHJpZXZlZCBmcm9tIHRoZSBKREJDIGNvbm5lY3Rpb24gaXQgd291bGQgcHJvYmFibHkKLQkgKiBiZSBhICJuYW1lIi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29ubmVjdCB0byBhbiBPcmFjbGUgZGF0YWJhc2Ugd2l0aCB0aGUKLQkgKiB1c2VyIG5hbWUgInNjb3R0IiwgYnV0IHRoYXQgaWRlbnRpZmVyIGlzIGZvbGRlZCB0byB0aGUgYWN0dWFsIHVzZXIgbmFtZQotCSAqICJTQ09UVCIuIERUUCBzdG9yZXMgdGhlIG9yaWdpbmFsIHN0cmluZyAic2NvdHQiLCB3aGlsZSB0aGUgT3JhY2xlIEpEQkMKLQkgKiBkcml2ZXIgc3RvcmVzIHRoZSBmb2xkZWQgc3RyaW5nICJTQ09UVCIuCi0JICovCi0Jdm9pZCBhZGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnNUbyhAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKHVzZXJOYW1lKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogZm9sZGluZyBzdHJhdGVneSB1c2VkIHRvIGNvbnZlcnQgbmFtZXMgYW5kIGlkZW50aWZpZXJzICoqKioqKioqKioKLQotCS8qKgotCSAqIFRoZSBTUUwgc3BlYyBzYXlzIGEgIm5vcm1hbCIgKG5vbi1kZWxpbWl0ZWQpIGlkZW50aWZpZXIgc2hvdWxkIGJlCi0JICogZm9sZGVkIHRvIHVwcGVyY2FzZTsgYnV0IHNvbWUgZGF0YWJhc2VzIGRvIG90aGVyd2lzZSAoZS5nLiBTeWJhc2UpLgotCSAqLwotCWFic3RyYWN0IEZvbGRpbmdTdHJhdGVneSBnZXRGb2xkaW5nU3RyYXRlZ3koKTsKLQotCi0JLy8gKioqKioqKioqKiBuYW1lIC0+IGlkZW50aWZpZXIgKioqKioqKioqKgotCi0JcHVibGljIFN0cmluZyBjb252ZXJ0TmFtZVRvSWRlbnRpZmllcihTdHJpbmcgbmFtZSwgU3RyaW5nIGRlZmF1bHROYW1lKSB7Ci0JCXJldHVybiB0aGlzLm5hbWVSZXF1aXJlc0RlbGltaXRlcnMobmFtZSkgPyB0aGlzLmRlbGltaXROYW1lKG5hbWUpCi0JCQkJCQk6IHRoaXMubm9ybWFsTmFtZXNNYXRjaChuYW1lLCBkZWZhdWx0TmFtZSkgPyBudWxsIDogbmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGNvbnZlcnROYW1lVG9JZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiB0aGlzLm5hbWVSZXF1aXJlc0RlbGltaXRlcnMobmFtZSkgPyB0aGlzLmRlbGltaXROYW1lKG5hbWUpIDogbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlIG9iamVjdCBuYW1lIG11c3QgYmUgZGVsaW1pdGVkCi0JICogd2hlbiB1c2VkIGluIGFuIFNRTCBzdGF0ZW1lbnQuCi0JICogSWYgdGhlIG5hbWUgaGFzIGFueSAic3BlY2lhbCIgY2hhcmFjdGVycyAoYXMgb3Bwb3NlZCB0byBsZXR0ZXJzLAotCSAqIGRpZ2l0cywgYW5kIG90aGVyIGFsbG93ZWQgY2hhcmFjdGVycyBbZS5nLiB1bmRlcnNjb3Jlc10pLCBpdCByZXF1aXJlcwotCSAqIGRlbGltaXRlcnMuCi0JICogSWYgdGhlIG5hbWUgaXMgbWl4ZWQgY2FzZSBhbmQgdGhlIGRhdGFiYXNlIGZvbGRzIHVuZGVsaW1pdGVkIG5hbWVzCi0JICogKHRvIGVpdGhlciB1cHBlcmNhc2Ugb3IgbG93ZXJjYXNlKSwgaXQgcmVxdWlyZXMgZGVsaW1pdGVycy4KLQkgKi8KLQlib29sZWFuIG5hbWVSZXF1aXJlc0RlbGltaXRlcnMoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIChuYW1lLmxlbmd0aCgpID09IDApICAvLyAgYW4gZW1wdHkgc3RyaW5nIG11c3QgYmUgZGVsaW1pdGVkKD8pCi0JCQkJCXx8IHRoaXMubmFtZUNvbnRhaW5zQW55Tm9uTm9ybWFsQ2hhcmFjdGVycyhuYW1lKQotCQkJCQl8fCB0aGlzLm5hbWVJc05vdEZvbGRlZChuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIG5hbWUgY29udGFpbnMgYW55ICJub24tbm9ybWFsIiBjaGFyYWN0ZXJzCi0JICogdGhhdCByZXF1aXJlIHRoZSBuYW1lIHRvIGJlIGRlbGltaXRlZC4KLQkgKiBQcmUtY29uZGl0aW9uOiB0aGUgc3BlY2lmaWVkIG5hbWUgaXMgbm90IGVtcHR5Ci0JICovCi0JYm9vbGVhbiBuYW1lQ29udGFpbnNBbnlOb25Ob3JtYWxDaGFyYWN0ZXJzKFN0cmluZyBuYW1lKSB7Ci0JCWNoYXJbXSBzdHJpbmcgPSBuYW1lLnRvQ2hhckFycmF5KCk7Ci0JCWlmICh0aGlzLmNoYXJhY3RlcklzTm9uTm9ybWFsTmFtZVN0YXJ0KHN0cmluZ1swXSkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWZvciAoaW50IGkgPSBzdHJpbmcubGVuZ3RoOyBpLS0gPiAxOyApIHsgIC8vIG5vdGU6IHN0b3AgYXQgMQotCQkJaWYgKHRoaXMuY2hhcmFjdGVySXNOb25Ob3JtYWxOYW1lUGFydChzdHJpbmdbaV0pKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzICJub24tbm9ybWFsIiBmb3IgdGhlIGZpcnN0Ci0JICogY2hhcmFjdGVyIG9mIGEgbmFtZS4KLQkgKiBUeXBpY2FsbHksIGRhdGFiYXNlcyBhcmUgbW9yZSByZXN0cmljdGl2ZSBhYm91dCB3aGF0IGNoYXJhY3RlcnMgY2FuCi0JICogYmUgdXNlZCB0byAqc3RhcnQqIGFuIGlkZW50aWZpZXIgKGFzIG9wcG9zZWQgdG8gdGhlIGNoYXJhY3RlcnMKLQkgKiBhbGxvd2VkIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBpZGVudGlmaWVyKS4KLQkgKi8KLQlib29sZWFuIGNoYXJhY3RlcklzTm9uTm9ybWFsTmFtZVN0YXJ0KGNoYXIgYykgewotCQlyZXR1cm4gISB0aGlzLmNoYXJhY3RlcklzTm9ybWFsTmFtZVN0YXJ0KGMpOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzICJub3JtYWwiIGZvciB0aGUgZmlyc3QKLQkgKiBjaGFyYWN0ZXIgb2YgYSBuYW1lLgotCSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYW4gaWRlbnRpZmllciBjYW4gYmU6Ci0JICogICAtIGEgbGV0dGVyCi0JICogICAtIGFueSBvZiB0aGUgZXh0ZW5kZWQsIHZlbmRvci1zcGVjaWZpYywgIm5vcm1hbCIgc3RhcnQgY2hhcmFjdGVycwotCSAqLwotCWJvb2xlYW4gY2hhcmFjdGVySXNOb3JtYWxOYW1lU3RhcnQoY2hhciBjKSB7Ci0JCS8vIGFsbCB2ZW5kb3JzIGFsbG93IGEgbGV0dGVyCi0JCXJldHVybiBDaGFyYWN0ZXIuaXNMZXR0ZXIoYykKLQkJCQl8fCB0aGlzLmNoYXJhY3RlcklzRXh0ZW5kZWROb3JtYWxOYW1lU3RhcnQoYyk7Ci0JfQotCi0JYm9vbGVhbiBjaGFyYWN0ZXJJc0V4dGVuZGVkTm9ybWFsTmFtZVN0YXJ0KGNoYXIgYykgewotCQlyZXR1cm4gYXJyYXlDb250YWlucyh0aGlzLmdldEV4dGVuZGVkTm9ybWFsTmFtZVN0YXJ0Q2hhcmFjdGVycygpLCBjKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlICJub3JtYWwiIGNoYXJhY3RlcnMsIGJleW9uZCBsZXR0ZXJzLCBmb3IgdGhlCi0JICogZmlyc3QgY2hhcmFjdGVyIG9mIGEgbmFtZS4KLQkgKiBSZXR1cm4gbnVsbCBpZiB0aGVyZSBhcmUgbm8gImV4dGVuZGVkIiBjaGFyYWN0ZXJzLgotCSAqLwotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVTdGFydENoYXJhY3RlcnMoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzICJub24tbm9ybWFsIiBmb3IgdGhlIHNlY29uZAotCSAqIGFuZCBzdWJzZXF1ZW50IGNoYXJhY3RlcnMgb2YgYSBuYW1lLgotCSAqLwotCWJvb2xlYW4gY2hhcmFjdGVySXNOb25Ob3JtYWxOYW1lUGFydChjaGFyIGMpIHsKLQkJcmV0dXJuICEgdGhpcy5jaGFyYWN0ZXJJc05vcm1hbE5hbWVQYXJ0KGMpOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzICJub3JtYWwiIGZvciB0aGUgc2Vjb25kIGFuZAotCSAqIHN1YnNlcXVlbnQgY2hhcmFjdGVycyBvZiBhIG5hbWUuCi0JICogVGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjaGFyYWN0ZXJzIG9mIGEgIm5vcm1hbCIgbmFtZSBjYW4gYmU6Ci0JICogICAtIGEgbGV0dGVyCi0JICogICAtIGEgZGlnaXQKLQkgKiAgIC0gYW55IG9mIHRoZSBleHRlbmRlZCwgdmVuZG9yLXNwZWNpZmljLCAibm9ybWFsIiBzdGFydCBjaGFyYWN0ZXJzCi0JICogICAtIGFueSBvZiB0aGUgZXh0ZW5kZWQsIHZlbmRvci1zcGVjaWZpYywgIm5vcm1hbCIgcGFydCBjaGFyYWN0ZXJzCi0JICovCi0JYm9vbGVhbiBjaGFyYWN0ZXJJc05vcm1hbE5hbWVQYXJ0KGNoYXIgYykgewotCQkvLyBhbGwgdmVuZG9ycyBhbGxvdyBhIGxldHRlciBvciBkaWdpdAotCQlyZXR1cm4gQ2hhcmFjdGVyLmlzTGV0dGVyT3JEaWdpdChjKQotCQkJCXx8IHRoaXMuY2hhcmFjdGVySXNFeHRlbmRlZE5vcm1hbE5hbWVTdGFydChjKQotCQkJCXx8IHRoaXMuY2hhcmFjdGVySXNFeHRlbmRlZE5vcm1hbE5hbWVQYXJ0KGMpOwotCX0KLQotCWJvb2xlYW4gY2hhcmFjdGVySXNFeHRlbmRlZE5vcm1hbE5hbWVQYXJ0KGNoYXIgYykgewotCQlyZXR1cm4gYXJyYXlDb250YWlucyh0aGlzLmdldEV4dGVuZGVkTm9ybWFsTmFtZVBhcnRDaGFyYWN0ZXJzKCksIGMpOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0aGUgIm5vcm1hbCIgY2hhcmFjdGVycywgYmV5b25kIGxldHRlcnMgYW5kIGRpZ2l0cyBhbmQgdGhlCi0JICogIm5vcm1hbCIgZmlyc3QgY2hhcmFjdGVycywgZm9yIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY2hhcmFjdGVycwotCSAqIG9mIGFuIGlkZW50aWZpZXIuIFJldHVybiBudWxsIGlmIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMuCi0JICovCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVBhcnRDaGFyYWN0ZXJzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIG5hbWUgaXMgbm90IGZvbGRlZCB0byB0aGUgZGF0YWJhc2UncwotCSAqIGNhc2UsIHJlcXVpcmluZyBpdCB0byBiZSBkZWxpbWl0ZWQuCi0JICovCi0JYm9vbGVhbiBuYW1lSXNOb3RGb2xkZWQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuICEgdGhpcy5nZXRGb2xkaW5nU3RyYXRlZ3koKS5uYW1lSXNGb2xkZWQobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCAibm9ybWFsIiBuYW1lcyBtYXRjaC4KLQkgKi8KLQlib29sZWFuIG5vcm1hbE5hbWVzTWF0Y2goU3RyaW5nIG5hbWUxLCBTdHJpbmcgbmFtZTIpIHsKLQkJcmV0dXJuIHRoaXMubm9ybWFsSWRlbnRpZmllcnNBcmVDYXNlU2Vuc2l0aXZlKCkgPwotCQkJCQkJbmFtZTEuZXF1YWxzKG5hbWUyKQotCQkJCQk6Ci0JCQkJCQluYW1lMS5lcXVhbHNJZ25vcmVDYXNlKG5hbWUyKTsKLQl9Ci0KLQkvKioKLQkgKiBUeXBpY2FsbHksICJub3JtYWwiIGlkZW50aWZpZXJzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLgotCSAqLwotCWJvb2xlYW4gbm9ybWFsSWRlbnRpZmllcnNBcmVDYXNlU2Vuc2l0aXZlKCkgewotCQlyZXR1cm4gdGhpcy5nZXRGb2xkaW5nU3RyYXRlZ3koKS5ub3JtYWxJZGVudGlmaWVyc0FyZUNhc2VTZW5zaXRpdmUoKTsKLQl9Ci0KLQkvKioKLQkgKiBXcmFwIHRoZSBzcGVjaWZpZWQgbmFtZSBpbiBkZWxpbWl0ZXJzICh0eXBpY2FsbHkgZG91YmxlLXF1b3RlcyksCi0JICogY29udmVydGluZyBpdCB0byBhbiBpZGVudGlmaWVyLgotCSAqLwotCVN0cmluZyBkZWxpbWl0TmFtZShTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gU3RyaW5nVG9vbHMucXVvdGUobmFtZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGlkZW50aWZpZXIgLT4gbmFtZSAqKioqKioqKioqCi0KLQkvLyBub3Qgc3VyZSBob3cgdG8gaGFuZGxlIGFuIGVtcHR5IHN0cmluZzoKLQkvLyBib3RoICIiIGFuZCAiXCJcIiIgYXJlIGNvbnZlcnRlZCB0byAiIiAuLi4KLQkvLyBjb252ZXJ0ICIiIHRvICdudWxsJyBzaW5jZSBlbXB0eSBzdHJpbmdzIG11c3QgYmUgZGVsaW1pdGVkPwotCXB1YmxpYyBTdHJpbmcgY29udmVydElkZW50aWZpZXJUb05hbWUoU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJcmV0dXJuIChpZGVudGlmaWVyID09IG51bGwpID8gbnVsbCA6Ci0JCQkJCXRoaXMuaWRlbnRpZmllcklzRGVsaW1pdGVkKGlkZW50aWZpZXIpID8KLQkJCQkJCVN0cmluZ1Rvb2xzLnVuZGVsaW1pdChpZGVudGlmaWVyKQotCQkJCQk6Ci0JCQkJCQl0aGlzLmdldEZvbGRpbmdTdHJhdGVneSgpLmZvbGQoaWRlbnRpZmllcik7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIGlzICJkZWxpbWl0ZWQiLgotCSAqIFRoZSBTUUwtOTIgc3BlYyBzYXlzIGlkZW50aWZpZXJzIHNob3VsZCBiZSBkZWxpbWl0ZWQgYnkKLQkgKiBkb3VibGUtcXVvdGVzOyBidXQgc29tZSBkYXRhYmFzZXMgYWxsb3cgb3RoZXJ3aXNlIChlLmcuIFN5YmFzZSkuCi0JICovCi0JYm9vbGVhbiBpZGVudGlmaWVySXNEZWxpbWl0ZWQoU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLnN0cmluZ0lzUXVvdGVkKGlkZW50aWZpZXIpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBtaXNjICoqKioqKioqKioKLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiB0aGlzLmdldERUUFZlbmRvck5hbWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBzdGF0aWMgY29udmVuaWVuY2UgbWV0aG9kIC0gYXJyYXkgbnVsbCBjaGVjawotCSAqLwotCXN0YXRpYyBib29sZWFuIGFycmF5Q29udGFpbnMoY2hhcltdIGFycmF5LCBjaGFyIGMpIHsKLQkJcmV0dXJuIChhcnJheSAhPSBudWxsKSAmJiBBcnJheVRvb2xzLmNvbnRhaW5zKGFycmF5LCBjKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9DYXRhbG9nU3RyYXRlZ3kuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9DYXRhbG9nU3RyYXRlZ3kuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3YTRiNS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvQ2F0YWxvZ1N0cmF0ZWd5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hOwotCi0vKioKLSAqIEhhbmRsZSB0aGUgdmFyaWV0eSBvZiBjYXRhbG9nIChhbmQgc2NoZW1hKSBjb25maWd1cmF0aW9ucyBnZW5lcmF0ZWQgYnkgRFRQLgotICovCi1pbnRlcmZhY2UgQ2F0YWxvZ1N0cmF0ZWd5IHsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBEVFAgZGF0YWJhc2UgaGFzIHJlYWwgY2F0YWxvZ3MuCi0JICovCi0JYm9vbGVhbiBzdXBwb3J0c0NhdGFsb2dzKERhdGFiYXNlIGRhdGFiYXNlKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlJ3MgY2F0YWxvZ3MuCi0JICovCi0JTGlzdDxDYXRhbG9nPiBnZXRDYXRhbG9ncyhEYXRhYmFzZSBkYXRhYmFzZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBkYXRhYmFzZSdzIHNjaGVtYXMuCi0JICovCi0JTGlzdDxTY2hlbWE+IGdldFNjaGVtYXMoRGF0YWJhc2UgZGF0YWJhc2UpOwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvREIyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvREIyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1OWQwMzkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0RCMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1jbGFzcyBEQjIKLQlleHRlbmRzIEFic3RyYWN0VmVuZG9yCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZHRwVmVuZG9yTmFtZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFZlbmRvciBVREIgPSBuZXcgREIyKCJEQjIgVURCIik7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgVURCX0lfU0VSSUVTID0gbmV3IERCMigiREIyIFVEQiBpU2VyaWVzIik7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgVURCX1pfU0VSSUVTID0gbmV3IERCMigiREIyIFVEQiB6U2VyaWVzIik7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyBWZW5kb3IgdWRiKCkgewotCQlyZXR1cm4gVURCOwotCX0KLQotCXN0YXRpYyBWZW5kb3IgdWRiSVNlcmllcygpIHsKLQkJcmV0dXJuIFVEQl9JX1NFUklFUzsKLQl9Ci0KLQlzdGF0aWMgVmVuZG9yIHVkYlpTZXJpZXMoKSB7Ci0JCXJldHVybiBVREJfWl9TRVJJRVM7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIG9ubHkgc3RhdGljIGluc3RhbmNlcy4KLQkgKi8KLQlwcml2YXRlIERCMihTdHJpbmcgZHRwVmVuZG9yTmFtZSkgewotCQlzdXBlcigpOwotCQl0aGlzLmR0cFZlbmRvck5hbWUgPSBkdHBWZW5kb3JOYW1lOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RFRQVmVuZG9yTmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMuZHRwVmVuZG9yTmFtZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gVW5rbm93bkNhdGFsb2dTdHJhdGVneS5pbnN0YW5jZSgpOyAgLy8gbm90IHZlcmlmaWVkIHlldC4uLgotCX0KLQotCUBPdmVycmlkZQotCUZvbGRpbmdTdHJhdGVneSBnZXRGb2xkaW5nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBVcHBlckNhc2VGb2xkaW5nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQljaGFyW10gZ2V0RXh0ZW5kZWROb3JtYWxOYW1lUGFydENoYXJhY3RlcnMoKSB7Ci0JCXJldHVybiBFWFRFTkRFRF9OT1JNQUxfTkFNRV9QQVJUX0NIQVJBQ1RFUlM7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBFWFRFTkRFRF9OT1JNQUxfTkFNRV9QQVJUX0NIQVJBQ1RFUlMgPSBuZXcgY2hhcltdIHsgJ18nIH07Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9EZXJieS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0RlcmJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYmNlMDIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0RlcmJ5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkRhdGFiYXNlOwotCi1jbGFzcyBEZXJieQotCWV4dGVuZHMgQWJzdHJhY3RWZW5kb3IKLXsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgSU5TVEFOQ0UgPSBuZXcgRGVyYnkoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2luZ2xldG9uLgotCSAqLwotCXN0YXRpYyBWZW5kb3IgaW5zdGFuY2UoKSB7Ci0JCXJldHVybiBJTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgc2luZ2xlIGluc3RhbmNlLgotCSAqLwotCXByaXZhdGUgRGVyYnkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXREVFBWZW5kb3JOYW1lKCkgewotCQlyZXR1cm4gIkRlcmJ5IjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCUNhdGFsb2dTdHJhdGVneSBnZXRDYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBGYXV4Q2F0YWxvZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JRm9sZGluZ1N0cmF0ZWd5IGdldEZvbGRpbmdTdHJhdGVneSgpIHsKLQkJcmV0dXJuIFVwcGVyQ2FzZUZvbGRpbmdTdHJhdGVneS5pbnN0YW5jZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXZvaWQgYWRkRGVmYXVsdFNjaGVtYUlkZW50aWZpZXJzVG8oRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKHRoaXMuYnVpbGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcih1c2VyTmFtZSkpOwotCX0KLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHVzZXIgbmFtZSBvbiBEZXJieSBpcyAiQVBQIiB3aGVuIHRoZSB1c2VyIGNvbm5lY3RzIHdpdGhvdXQKLQkgKiBhIHVzZXIgbmFtZS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBidWlsZERlZmF1bHRTY2hlbWFJZGVudGlmaWVyKFN0cmluZyB1c2VyTmFtZSkgewotCQlyZXR1cm4gKCh1c2VyTmFtZSAhPSBudWxsKSAmJiAodXNlck5hbWUubGVuZ3RoKCkgIT0gMCkpID8gdXNlck5hbWUgOiBERUZBVUxUX1VTRVJfSURFTlRJRklFUjsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfVVNFUl9JREVOVElGSUVSID0gIkFQUCI7ICAvLyROT04tTkxTLTEkCi0KLQlAT3ZlcnJpZGUKLQljaGFyW10gZ2V0RXh0ZW5kZWROb3JtYWxOYW1lUGFydENoYXJhY3RlcnMoKSB7Ci0JCXJldHVybiBFWFRFTkRFRF9OT1JNQUxfTkFNRV9QQVJUX0NIQVJBQ1RFUlM7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBFWFRFTkRFRF9OT1JNQUxfTkFNRV9QQVJUX0NIQVJBQ1RFUlMgPSBuZXcgY2hhcltdIHsgJ18nIH07Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9GYXV4Q2F0YWxvZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvRmF1eENhdGFsb2dTdHJhdGVneS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWI1YjQyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9GYXV4Q2F0YWxvZ1N0cmF0ZWd5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYTsKLQotLyoqCi0gKiBDYXRhbG9nIHN0cmF0ZWd5IGZvciBEVFAgZGF0YWJhc2VzIHRoYXQgYnVpbGQgYSAidmlydHVhbCIgY2F0YWxvZyAodGhhdCBoYXMKLSAqIG5vIG5hbWUpIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgSkRCQyBkcml2ZXIgZG9lcyBub3QgcmV0dXJuIGFueSBjYXRhbG9ncwotICogKGUuZy4gT3JhY2xlKS4KLSAqIEBzZWUgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSNnZXRDYXRhbG9ncygpCi0gKi8KLWNsYXNzIEZhdXhDYXRhbG9nU3RyYXRlZ3kKLQlpbXBsZW1lbnRzIENhdGFsb2dTdHJhdGVneQotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIENhdGFsb2dTdHJhdGVneSBJTlNUQU5DRSA9IG5ldyBGYXV4Q2F0YWxvZ1N0cmF0ZWd5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgQ2F0YWxvZ1N0cmF0ZWd5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIEZhdXhDYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncyhEYXRhYmFzZSBkYXRhYmFzZSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIExpc3Q8Q2F0YWxvZz4gZ2V0Q2F0YWxvZ3MoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBMaXN0PFNjaGVtYT4gZ2V0U2NoZW1hcyhEYXRhYmFzZSBkYXRhYmFzZSkgewotCQlyZXR1cm4gdGhpcy5nZXRGYXV4Q2F0YWxvZyhkYXRhYmFzZS5nZXRDYXRhbG9ncygpKS5nZXRTY2hlbWFzKCk7Ci0JfQotCi0JcHJpdmF0ZSBDYXRhbG9nIGdldEZhdXhDYXRhbG9nKExpc3Q8Q2F0YWxvZz4gY2F0YWxvZ3MpIHsKLQkJaWYgKGNhdGFsb2dzID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQkJfQotCQlpZiAoY2F0YWxvZ3Muc2l6ZSgpICE9IDEpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5vdCBhIHNpbmdsZSBjYXRhbG9nOiAiICsgY2F0YWxvZ3Muc2l6ZSgpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gY2F0YWxvZ3MuZ2V0KDApOwotCQlpZiAoY2F0YWxvZy5nZXROYW1lKCkubGVuZ3RoKCkgIT0gMCkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiaWxsZWdhbCBuYW1lOiAiICsgY2F0YWxvZy5nZXROYW1lKCkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIGNhdGFsb2c7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvRm9sZGluZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvRm9sZGluZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MjdmNTYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0ZvbGRpbmdTdHJhdGVneS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi0vKioKLSAqIEhhbmRsZSBkYXRhYmFzZS1zcGVjaWZpYyBpZGVudGlmaWVyLWZvbGRpbmcgaXNzdWVzLgotICovCi1pbnRlcmZhY2UgRm9sZGluZ1N0cmF0ZWd5IHsKLQotCS8qKgotCSAqIEZvbGQgdGhlIHNwZWNpZmllZCBuYW1lLgotCSAqLwotCVN0cmluZyBmb2xkKFN0cmluZyBuYW1lKTsKLQotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2Ugb2JqZWN0IG5hbWUgaXMgYWxyZWFkeSBmb2xkZWQsCi0JICogbWVhbmluZywgaWYgaXQgaGFzIG5vIHNwZWNpYWwgY2hhcmFjdGVycywgaXQgcmVxdWlyZXMgbm8gZGVsaW1pdGVycy4KLQkgKi8KLQlib29sZWFuIG5hbWVJc0ZvbGRlZChTdHJpbmcgbmFtZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgZGF0YWJhc2UgaXMgY2FzZS1zZW5zaXRpdmUgd2hlbiB1c2luZyAibm9ybWFsIgotCSAqIChpLmUuIG5vbi1kZWxpbWl0ZWQpIGlkZW50aWZpZXJzLgotCSAqLwotCWJvb2xlYW4gbm9ybWFsSWRlbnRpZmllcnNBcmVDYXNlU2Vuc2l0aXZlKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9IU1FMREIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9IU1FMREIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmNTFiNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvSFNRTERCLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkRhdGFiYXNlOwotCi1jbGFzcyBIU1FMREIKLQlleHRlbmRzIEFic3RyYWN0VmVuZG9yCi17Ci0JLy8gc2luZ2xldG9uCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgVmVuZG9yIElOU1RBTkNFID0gbmV3IEhTUUxEQigpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzaW5nbGV0b24uCi0JICovCi0Jc3RhdGljIFZlbmRvciBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBIU1FMREIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXREVFBWZW5kb3JOYW1lKCkgewotCQlyZXR1cm4gIkhTUUxEQiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gVW5rbm93bkNhdGFsb2dTdHJhdGVneS5pbnN0YW5jZSgpOyAgLy8gbm90IHZlcmlmaWVkIHlldC4uLgotCX0KLQotCUBPdmVycmlkZQotCUZvbGRpbmdTdHJhdGVneSBnZXRGb2xkaW5nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBVcHBlckNhc2VGb2xkaW5nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQl2b2lkIGFkZERlZmF1bHRTY2hlbWFJZGVudGlmaWVyc1RvKERhdGFiYXNlIGRhdGFiYXNlLCBTdHJpbmcgdXNlck5hbWUsIEFycmF5TGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzKSB7Ci0JCWlkZW50aWZpZXJzLmFkZChQVUJMSUNfU0NIRU1BX0lERU5USUZJRVIpOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElDX1NDSEVNQV9JREVOVElGSUVSID0gIlBVQkxJQyI7ICAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9JbmZvcm1peC5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0luZm9ybWl4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGM0YjIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0luZm9ybWl4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWNsYXNzIEluZm9ybWl4Ci0JZXh0ZW5kcyBBYnN0cmFjdFZlbmRvcgotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFZlbmRvciBJTlNUQU5DRSA9IG5ldyBJbmZvcm1peCgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzaW5nbGV0b24uCi0JICovCi0Jc3RhdGljIFZlbmRvciBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBJbmZvcm1peCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldERUUFZlbmRvck5hbWUoKSB7Ci0JCXJldHVybiAiSW5mb3JtaXgiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JQ2F0YWxvZ1N0cmF0ZWd5IGdldENhdGFsb2dTdHJhdGVneSgpIHsKLQkJcmV0dXJuIFVua25vd25DYXRhbG9nU3RyYXRlZ3kuaW5zdGFuY2UoKTsgIC8vIG5vdCB2ZXJpZmllZCB5ZXQuLi4KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlGb2xkaW5nU3RyYXRlZ3kgZ2V0Rm9sZGluZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gTG93ZXJDYXNlRm9sZGluZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVN0YXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1NUQVJUX0NIQVJBQ1RFUlM7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBFWFRFTkRFRF9OT1JNQUxfTkFNRV9TVEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICdfJyB9OwotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVBhcnRDaGFyYWN0ZXJzKCkgewotCQlyZXR1cm4gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICckJyB9OwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTG93ZXJDYXNlRm9sZGluZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTG93ZXJDYXNlRm9sZGluZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzM2M3MGYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL0xvd2VyQ2FzZUZvbGRpbmdTdHJhdGVneS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLQotLyoqCi0gKiBGb2xkICJub3JtYWwiIGlkZW50aWZpZXJzIHRvIGxvd2VyIGNhc2UuCi0gKiBJZ25vcmUgdGhlIGNhc2Ugb2YgIm5vcm1hbCIgaWRlbnRpZmllcnMuCi0gKi8KLWNsYXNzIExvd2VyQ2FzZUZvbGRpbmdTdHJhdGVneQotCWltcGxlbWVudHMgRm9sZGluZ1N0cmF0ZWd5Ci17Ci0KLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBGb2xkaW5nU3RyYXRlZ3kgSU5TVEFOQ0UgPSBuZXcgTG93ZXJDYXNlRm9sZGluZ1N0cmF0ZWd5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgRm9sZGluZ1N0cmF0ZWd5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIExvd2VyQ2FzZUZvbGRpbmdTdHJhdGVneSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGZvbGQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBuYW1lSXNGb2xkZWQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLnN0cmluZ0lzTG93ZXJjYXNlKG5hbWUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIG5vcm1hbElkZW50aWZpZXJzQXJlQ2FzZVNlbnNpdGl2ZSgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBDbGFzc1Rvb2xzLnRvU3RyaW5nQ2xhc3NOYW1lRm9yT2JqZWN0KHRoaXMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL01heERCLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTWF4REIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QwODE4Yy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTWF4REIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotY2xhc3MgTWF4REIKLQlleHRlbmRzIEFic3RyYWN0VmVuZG9yCi17Ci0JLy8gc2luZ2xldG9uCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgVmVuZG9yIElOU1RBTkNFID0gbmV3IE1heERCKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgVmVuZG9yIGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIE1heERCKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RFRQVmVuZG9yTmFtZSgpIHsKLQkJcmV0dXJuICJNYXhEQiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gVW5rbm93bkNhdGFsb2dTdHJhdGVneS5pbnN0YW5jZSgpOyAgLy8gbm90IHZlcmlmaWVkIHlldC4uLgotCX0KLQotCUBPdmVycmlkZQotCUZvbGRpbmdTdHJhdGVneSBnZXRGb2xkaW5nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBVcHBlckNhc2VGb2xkaW5nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQljaGFyW10gZ2V0RXh0ZW5kZWROb3JtYWxOYW1lU3RhcnRDaGFyYWN0ZXJzKCkgewotCQlyZXR1cm4gRVhURU5ERURfTk9STUFMX05BTUVfU1RBUlRfQ0hBUkFDVEVSUzsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIEVYVEVOREVEX05PUk1BTF9OQU1FX1NUQVJUX0NIQVJBQ1RFUlMgPSBuZXcgY2hhcltdIHsgJyMnLCAnQCcsICckJyB9OwotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVBhcnRDaGFyYWN0ZXJzKCkgewotCQlyZXR1cm4gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICdfJyB9OwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTXlTUUwuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9NeVNRTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIzNWI5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9NeVNRTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci0KLWNsYXNzIE15U1FMCi0JZXh0ZW5kcyBBYnN0cmFjdFZlbmRvcgotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFZlbmRvciBJTlNUQU5DRSA9IG5ldyBNeVNRTCgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzaW5nbGV0b24uCi0JICovCi0Jc3RhdGljIFZlbmRvciBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBNeVNRTCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldERUUFZlbmRvck5hbWUoKSB7Ci0JCXJldHVybiAiTXlTcWwiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogVGhlIERUUCBtb2RlbCBmb3IgTXlTUUwgaGFzIGEgZGF0YWJhc2UgdGhhdCBjb250YWlucyBubyBjYXRhbG9nczsKLQkgKiBidXQsIGluc3RlYWQsIGRpcmVjdGx5IGhvbGRzIGEgc2luZ2xlIHNjaGVtYSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMKLQkgKiB0aGUgZGF0YWJhc2UuIChUaGlzIGlzIGhhcmQtY29kZWQgaW4gTXlTcWxDYXRhbG9nRGF0YWJhc2UuZ2V0U2NoZW1hcygpLikKLQkgKiBBbHRob3VnaCB5b3UgY2FuIHF1YWxpZnkgaWRlbnRpZmllcnMgd2l0aCBhIGRhdGFiYXNlIG5hbWUKLQkgKiBpbiBNeVNRTCwgb25seSB0aGUgZGF0YWJhc2Ugc3BlY2lmaWVkIGF0IGxvZ2luIHNlZW1zIHRvIGJlIGF2YWlsYWJsZQotCSAqIGluIHRoZSBEVFAgbW9kZWwuLi4uCi0JICogCi0JICogTkI6IEluIE15U1FMIERETCwgU0NIRU1BIGlzIGEgc3lub255bSBmb3IgREFUQUJBU0U7IGJ1dCB0aGUgSkRCQwotCSAqIG1ldGhvZCBEYXRhYmFzZU1ldGFEYXRhLmdldFNjaGVtYXMoKSByZXR1cm5zIGFuIGVtcHR5IGxpc3QsCi0JICogd2hpbGUgZ2V0Q2F0YWxvZ3MoKSByZXR1cm5zIGEgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIGRhdGFiYXNlcy4KLQkgKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBKREJDIG1ldGhvZCBDb25uZWN0aW9uLnNldENhdGFsb2coU3RyaW5nKSB0bwotCSAqIHNldCB0aGUgZGVmYXVsdCBkYXRhYmFzZS4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gTm9DYXRhbG9nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBNeVNRTCBpcyBhIGJpdCB1bnVzdWFsLCBzbyB3ZSBmb3JjZSBleGFjdCBtYXRjaGVzLgotCSAqIChlLmcuIE15U1FMIGZvbGRzIGRhdGFiYXNlIGFuZCB0YWJsZSBuYW1lcyB0byBsb3dlcmNhc2Ugb24gV2luZG93cwotCSAqIGJ5IGRlZmF1bHQ7IGJ1dCB0aGF0IGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlCi0JICogJ2xvd2VyX2Nhc2VfdGFibGVfbmFtZXMnIHN5c3RlbSB2YXJpYWJsZS4gVGhpcyBpcyBiZWNhdXNlIGRhdGFiYXNlcyBhcmUKLQkgKiBzdG9yZWQgYXMgZGlyZWN0b3JpZXMgYW5kIHRhYmxlcyBhcmUgc3RvcmVkIGFzIGZpbGVzIGluIHRoZSB1bmRlcmx5aW5nCi0JICogTy9TOyBhbmQgdGhlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgdGhlIG5hbWVzIGlzIGRldGVybWluZWQgYnkgdGhlIGJlaGF2aW9yCi0JICogb2YgZmlsZW5hbWVzIG9uIHRoZSBPL1MuIFRoZW4sIHRvIGNvbXBsaWNhdGUgdGhpbmdzLAotCSAqIG5vbmUgb2YgdGhlIG90aGVyIGlkZW50aWZpZXJzLCBsaWtlIGluZGV4IGFuZCBjb2x1bW4gbmFtZXMsIGFyZSBmb2xkZWQ7Ci0JICogYnV0IHRoZXkgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIHVubGVzcyBkZWxpbWl0ZWQuIFNlZQotCSAqIGh0dHA6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vNS4wL2VuL2lkZW50aWZpZXItY2FzZS1zZW5zaXRpdml0eS5odG1sLikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlGb2xkaW5nU3RyYXRlZ3kgZ2V0Rm9sZGluZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gTm9uRm9sZGluZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0Jdm9pZCBhZGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnNUbyhEYXRhYmFzZSBkYXRhYmFzZSwgU3RyaW5nIHVzZXJOYW1lLCBBcnJheUxpc3Q8U3RyaW5nPiBpZGVudGlmaWVycykgewotCQlpZGVudGlmaWVycy5hZGQodGhpcy5jb252ZXJ0TmFtZVRvSWRlbnRpZmllcihkYXRhYmFzZS5nZXROYW1lKCkpKTsgIC8vIGhtbW0uLi4gfmJqdgotCX0KLQotCS8qKgotCSAqIE15U1FMIGlzIHRoZSBvbmx5IHZlbmRvciB0aGF0IGFsbG93cyBhIGRpZ2l0LgotCSAqIEFsdGhvdWdoLCB0aGUgbmFtZSBjYW5ubm90IGJlICphbGwqIGRpZ2l0cy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlib29sZWFuIGNoYXJhY3RlcklzTm9ybWFsTmFtZVN0YXJ0KGNoYXIgYykgewotCQlyZXR1cm4gQ2hhcmFjdGVyLmlzRGlnaXQoYykgfHwgc3VwZXIuY2hhcmFjdGVySXNOb3JtYWxOYW1lU3RhcnQoYyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVN0YXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1NUQVJUX0NIQVJBQ1RFUlM7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBFWFRFTkRFRF9OT1JNQUxfTkFNRV9TVEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICdfJywgJyQnIH07Ci0KLQkvKioKLQkgKiBCeSBkZWZhdWx0LCBNeVNRTCBkZWxpbWl0cyBpZGVudGlmaWVycyB3aXRoIGJhY2t0aWNrcyAoYCk7IGJ1dCBpdAotCSAqIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGRvdWJsZS1xdW90ZXMuCi0JICovCi0JQE92ZXJyaWRlCi0JYm9vbGVhbiBpZGVudGlmaWVySXNEZWxpbWl0ZWQoU3RyaW5nIGlkZW50aWZpZXIpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLnN0cmluZ0lzRGVsaW1pdGVkKGlkZW50aWZpZXIsIEJBQ0tUSUNLKQotCQkJCQl8fCBzdXBlci5pZGVudGlmaWVySXNEZWxpbWl0ZWQoaWRlbnRpZmllcik7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgQkFDS1RJQ0sgPSAnYCc7Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9Ob0NhdGFsb2dTdHJhdGVneS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL05vQ2F0YWxvZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmI3OWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL05vQ2F0YWxvZ1N0cmF0ZWd5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYTsKLQotLyoqCi0gKiBDYXRhbG9nIHN0cmF0ZWd5IGZvciBEVFAgZGF0YWJhc2VzIHRoYXQgZG8gbm90IGhhdmUgY2F0YWxvZ3MKLSAqIChlLmcuIE15U1FMIHNlZSBidWcgMjQ5MDEzKS4KLSAqLwotY2xhc3MgTm9DYXRhbG9nU3RyYXRlZ3kKLQlpbXBsZW1lbnRzIENhdGFsb2dTdHJhdGVneQotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIENhdGFsb2dTdHJhdGVneSBJTlNUQU5DRSA9IG5ldyBOb0NhdGFsb2dTdHJhdGVneSgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzaW5nbGV0b24uCi0JICovCi0Jc3RhdGljIENhdGFsb2dTdHJhdGVneSBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBOb0NhdGFsb2dTdHJhdGVneSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0NhdGFsb2dzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxDYXRhbG9nPiBnZXRDYXRhbG9ncyhEYXRhYmFzZSBkYXRhYmFzZSkgewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHVibGljIExpc3Q8U2NoZW1hPiBnZXRTY2hlbWFzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiBkYXRhYmFzZS5nZXRTY2hlbWFzKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTm9uRm9sZGluZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvTm9uRm9sZGluZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2MxYWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL05vbkZvbGRpbmdTdHJhdGVneS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLQotLyoqCi0gKiBEbyBub3QgZm9sZCAibm9ybWFsIiBpZGVudGlmaWVycy4KLSAqIFJlc3BlY3QgdGhlIGNhc2Ugb2YgIm5vcm1hbCIgaWRlbnRpZmllcnMuCi0gKi8KLWNsYXNzIE5vbkZvbGRpbmdTdHJhdGVneQotCWltcGxlbWVudHMgRm9sZGluZ1N0cmF0ZWd5Ci17Ci0KLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBGb2xkaW5nU3RyYXRlZ3kgSU5TVEFOQ0UgPSBuZXcgTm9uRm9sZGluZ1N0cmF0ZWd5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgRm9sZGluZ1N0cmF0ZWd5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIE5vbkZvbGRpbmdTdHJhdGVneSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBTaW5jZSBpZGVudGlmaWVycyBhcmUgbm90IGZvbGRlZCB0byB1cHBlci0gb3IgbG93ZXItY2FzZSwgdGhlIG5hbWUgaXMKLQkgKiBhbHJlYWR5ICJmb2xkZWQiLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZm9sZChTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBTaW5jZSBpZGVudGlmaWVycyBhcmUgbm90IGZvbGRlZCB0byB1cHBlci0gb3IgbG93ZXItY2FzZSwgdGhlIG5hbWUgaXMKLQkgKiBhbHJlYWR5ICJmb2xkZWQiLgotCSAqIChOb24tZm9sZGluZyBkYXRhYmFzZXMgZG8gbm90IHJlcXVpcmUgZGVsaW1pdGVycyBhcm91bmQgbWl4ZWQtY2FzZQotCSAqICJub3JtYWwiIGlkZW50aWZpZXJzLikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBuYW1lSXNGb2xkZWQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gbm9ybWFsSWRlbnRpZmllcnNBcmVDYXNlU2Vuc2l0aXZlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQlyZXR1cm4gQ2xhc3NUb29scy50b1N0cmluZ0NsYXNzTmFtZUZvck9iamVjdCh0aGlzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9PcmFjbGUuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9PcmFjbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IwNGY5Zi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvT3JhY2xlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi5pbnRlcm5hbC52ZW5kb3I7Ci0KLWNsYXNzIE9yYWNsZQotCWV4dGVuZHMgQWJzdHJhY3RWZW5kb3IKLXsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgSU5TVEFOQ0UgPSBuZXcgT3JhY2xlKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgVmVuZG9yIGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIE9yYWNsZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldERUUFZlbmRvck5hbWUoKSB7Ci0JCXJldHVybiAiT3JhY2xlIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCUNhdGFsb2dTdHJhdGVneSBnZXRDYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBGYXV4Q2F0YWxvZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JRm9sZGluZ1N0cmF0ZWd5IGdldEZvbGRpbmdTdHJhdGVneSgpIHsKLQkJcmV0dXJuIFVwcGVyQ2FzZUZvbGRpbmdTdHJhdGVneS5pbnN0YW5jZSgpOwotCX0KLQotCUBPdmVycmlkZQotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVQYXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUzsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUyA9IG5ldyBjaGFyW10geyAnXycsICckJywgJyMnIH07Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9Qb3N0Z3JlU1FMLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvUG9zdGdyZVNRTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWNhZDU0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9Qb3N0Z3JlU1FMLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZTsKLQotY2xhc3MgUG9zdGdyZVNRTAotCWV4dGVuZHMgQWJzdHJhY3RWZW5kb3IKLXsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgSU5TVEFOQ0UgPSBuZXcgUG9zdGdyZVNRTCgpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzaW5nbGV0b24uCi0JICovCi0Jc3RhdGljIFZlbmRvciBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBQb3N0Z3JlU1FMKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RFRQVmVuZG9yTmFtZSgpIHsKLQkJcmV0dXJuICJwb3N0Z3JlcyI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBUaGUgUG9zdGdyZVNRTCBKREJDIGRyaXZlciByZXR1cm5zIGEgc2luZ2xlIGNhdGFsb2cgZnJvbSB0aGUgY2FsbCB0bwotCSAqIERhdGFiYXNlTWV0YURhdGEuZ2V0Q2F0YWxvZ3MoKSB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZQotCSAqIGRhdGFiYXNlIGluaXRpYWxseSBzcGVjaWZpZWQgYnkgdGhlIGNvbm5lY3Rpb24gKGluIHRoZSBKREJDIFVSTCkuCi0JICogRFRQIHVzZXMgdGhpcyBjb25maWd1cmF0aW9uIHVubW9kaWZpZWQuIFVuZm9ydHVuYXRlbHksIHRoZSBEVFAKLQkgKiBkYXRhYmFzZSdzIG5hbWUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlJ3MKLQkgKiBuYW1lLgotCSAqLwotCUBPdmVycmlkZQotCUNhdGFsb2dTdHJhdGVneSBnZXRDYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBTaW1wbGVDYXRhbG9nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlGb2xkaW5nU3RyYXRlZ3kgZ2V0Rm9sZGluZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gTG93ZXJDYXNlRm9sZGluZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIFBvc3RncmVTUUwgZGF0YWJhc2UgaG9sZHMgYSBzaW5nbGUgY2F0YWxvZyB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzCi0JICogdGhlIGRhdGFiYXNlLgotCSAqLwotCUBPdmVycmlkZQotCXZvaWQgYWRkRGVmYXVsdENhdGFsb2dJZGVudGlmaWVyc1RvKERhdGFiYXNlIGRhdGFiYXNlLCBTdHJpbmcgdXNlck5hbWUsIEFycmF5TGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzKSB7Ci0JCWlkZW50aWZpZXJzLmFkZCh0aGlzLmJ1aWxkRGVmYXVsdENhdGFsb2dJZGVudGlmaWVyKGRhdGFiYXNlKSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXIoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJcmV0dXJuIHRoaXMuY29udmVydE5hbWVUb0lkZW50aWZpZXIodGhpcy5idWlsZERlZmF1bHRDYXRhbG9nTmFtZShkYXRhYmFzZSkpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRGVmYXVsdENhdGFsb2dOYW1lKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiAoKENhdGFsb2cpIGRhdGFiYXNlLmdldENhdGFsb2dzKCkuZ2V0KDApKS5nZXROYW1lKCk7Ci0JfQotCi0JLyoqCi0JICogUG9zdGdyZVNRTCBoYXMgYSAic2NoZW1hIHNlYXJjaCBwYXRoIi4gVGhlIGRlZmF1bHQgaXM6Ci0JICogICAgICIkdXNlciIscHVibGljCi0JICogSWYgdGhlICIkdXNlciIgc2NoZW1hIGlzIG5vdCBmb3VuZCwgdXNlIHRoZSAicHVibGljIiBzY2hlbWEuCi0JICovCi0JQE92ZXJyaWRlCi0Jdm9pZCBhZGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnNUbyhEYXRhYmFzZSBkYXRhYmFzZSwgU3RyaW5nIHVzZXJOYW1lLCBBcnJheUxpc3Q8U3RyaW5nPiBpZGVudGlmaWVycykgewotCQlzdXBlci5hZGREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnNUbyhkYXRhYmFzZSwgdXNlck5hbWUsIGlkZW50aWZpZXJzKTsKLQkJaWRlbnRpZmllcnMuYWRkKFBVQkxJQ19TQ0hFTUFfSURFTlRJRklFUik7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSUNfU0NIRU1BX0lERU5USUZJRVIgPSAicHVibGljIjsgIC8vJE5PTi1OTFMtMSQKLQotCUBPdmVycmlkZQotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVTdGFydENoYXJhY3RlcnMoKSB7Ci0JCXJldHVybiBFWFRFTkRFRF9OT1JNQUxfTkFNRV9TVEFSVF9DSEFSQUNURVJTOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gRVhURU5ERURfTk9STUFMX05BTUVfU1RBUlRfQ0hBUkFDVEVSUyA9IG5ldyBjaGFyW10geyAnXycgfTsKLQotCUBPdmVycmlkZQotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVQYXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUzsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUyA9IG5ldyBjaGFyW10geyAnJCcgfTsKLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1NRTFNlcnZlci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1NRTFNlcnZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmU1OTdjLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9TUUxTZXJ2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci0KLWNsYXNzIFNRTFNlcnZlcgotCWV4dGVuZHMgQWJzdHJhY3RWZW5kb3IKLXsKLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3IgSU5TVEFOQ0UgPSBuZXcgU1FMU2VydmVyKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgVmVuZG9yIGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIFNRTFNlcnZlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldERUUFZlbmRvck5hbWUoKSB7Ci0JCXJldHVybiAiU1FMIFNlcnZlciI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlDYXRhbG9nU3RyYXRlZ3kgZ2V0Q2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gU2ltcGxlQ2F0YWxvZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi0JLyoqCi0JICogQnkgZGVmYXVsdCwgU1FMIFNlcnZlciBpZGVudGlmaWVycyBhcmUgY2FzZS1zZW5zaXRpdmUsIGV2ZW4gd2l0aG91dAotCSAqIGRlbGltaXRlcnMuIFRoaXMgY2FuIGRlcGVuZCBvbiB0aGUgY29sbGF0aW9uIHNldHRpbmcuLi4uCi0JICovCi0JQE92ZXJyaWRlCi0JRm9sZGluZ1N0cmF0ZWd5IGdldEZvbGRpbmdTdHJhdGVneSgpIHsKLQkJcmV0dXJuIE5vbkZvbGRpbmdTdHJhdGVneS5pbnN0YW5jZSgpOwotCX0KLQotCS8qKgotCSAqIFNRTCBTZXJ2ZXIgd2lsbCB1c2UgdGhlIHVzZXItcmVxdWVzdGVkIGRhdGFiYXNlOyBpZiB0aGF0IGRhdGFiYXNlIGlzIG5vdAotCSAqIGZvdW5kLCBpdCB3aWxsIGRlZmF1bHQgdG8gJ21hc3RlcicuCi0JICovCi0JQE92ZXJyaWRlCi0Jdm9pZCBhZGREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzVG8oRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKGRhdGFiYXNlLmdldE5hbWUoKSk7Ci0JCWlkZW50aWZpZXJzLmFkZChNQVNURVJfQ0FUQUxPR19JREVOVElGSUVSKTsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BU1RFUl9DQVRBTE9HX0lERU5USUZJRVIgPSAibWFzdGVyIjsgIC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IHNjaGVtYSBvbiBTUUwgU2VydmVyIGZvciBhbnkgZGF0YWJhc2UgKGNhdGFsb2cpIGlzICdkYm8nLgotCSAqLwotCUBPdmVycmlkZQotCXZvaWQgYWRkRGVmYXVsdFNjaGVtYUlkZW50aWZpZXJzVG8oRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKERFRkFVTFRfU0NIRU1BX0lERU5USUZJRVIpOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TQ0hFTUFfSURFTlRJRklFUiA9ICJkYm8iOyAgLy8kTk9OLU5MUy0xJAotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVN0YXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1NUQVJUX0NIQVJBQ1RFUlM7Ci0JfQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBFWFRFTkRFRF9OT1JNQUxfTkFNRV9TVEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICdfJywgJ0AnLCAnIycgfTsKLQotCUBPdmVycmlkZQotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVQYXJ0Q2hhcmFjdGVycygpIHsKLQkJcmV0dXJuIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUzsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIEVYVEVOREVEX05PUk1BTF9OQU1FX1BBUlRfQ0hBUkFDVEVSUyA9IG5ldyBjaGFyW10geyAnJCcgfTsKLQotCS8qKgotCSAqIEJ5IGRlZmF1bHQsIFNRTCBTZXJ2ZXIgZGVsaW1pdHMgaWRlbnRpZmllcnMgd2l0aCBicmFja2V0cyAoW10pOyBidXQgaXQKLQkgKiBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvIHVzZSBkb3VibGUtcXVvdGVzLgotCSAqLwotCUBPdmVycmlkZQotCWJvb2xlYW4gaWRlbnRpZmllcklzRGVsaW1pdGVkKFN0cmluZyBpZGVudGlmaWVyKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5zdHJpbmdJc0JyYWNrZXRlZChpZGVudGlmaWVyKQotCQkJCQl8fCBzdXBlci5pZGVudGlmaWVySXNEZWxpbWl0ZWQoaWRlbnRpZmllcik7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvU2ltcGxlQ2F0YWxvZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvU2ltcGxlQ2F0YWxvZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMWEwNDEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1NpbXBsZUNhdGFsb2dTdHJhdGVneS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkRhdGFiYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWE7Ci0KLS8qKgotICogQ2F0YWxvZyBzdHJhdGVneSBmb3IgRFRQIGRhdGFiYXNlcyB0aGF0IHNpbXBseSBtb2RlbCB0aGUgY2F0YWxvZ3MgcmV0dXJuZWQKLSAqIGJ5IHRoZSB1bmRlcmx5aW5nIEpEQkMgZHJpdmVyIChlLmcuIFN5YmFzZSkuCi0gKiBAc2VlIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEjZ2V0Q2F0YWxvZ3MoKQotICovCi1jbGFzcyBTaW1wbGVDYXRhbG9nU3RyYXRlZ3kKLQlpbXBsZW1lbnRzIENhdGFsb2dTdHJhdGVneQotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIENhdGFsb2dTdHJhdGVneSBJTlNUQU5DRSA9IG5ldyBTaW1wbGVDYXRhbG9nU3RyYXRlZ3koKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2luZ2xldG9uLgotCSAqLwotCXN0YXRpYyBDYXRhbG9nU3RyYXRlZ3kgaW5zdGFuY2UoKSB7Ci0JCXJldHVybiBJTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgc2luZ2xlIGluc3RhbmNlLgotCSAqLwotCXByaXZhdGUgU2ltcGxlQ2F0YWxvZ1N0cmF0ZWd5KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHN1cHBvcnRzQ2F0YWxvZ3MoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHVibGljIExpc3Q8Q2F0YWxvZz4gZ2V0Q2F0YWxvZ3MoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJcmV0dXJuIGRhdGFiYXNlLmdldENhdGFsb2dzKCk7Ci0JfQotCi0JcHVibGljIExpc3Q8U2NoZW1hPiBnZXRTY2hlbWFzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9TeWJhc2UuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9TeWJhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5NWQyMS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvU3liYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLQotY2xhc3MgU3liYXNlCi0JZXh0ZW5kcyBBYnN0cmFjdFZlbmRvcgotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIGR0cFZlbmRvck5hbWU7Ci0KLQlzdGF0aWMgZmluYWwgVmVuZG9yIEFTQSA9IG5ldyBTeWJhc2UoIlN5YmFzZV9BU0EiKTsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYyBmaW5hbCBWZW5kb3IgQVNFID0gbmV3IFN5YmFzZSgiU3liYXNlX0FTRSIpOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgVmVuZG9yIGFzYSgpIHsKLQkJcmV0dXJuIEFTQTsKLQl9Ci0KLQlzdGF0aWMgVmVuZG9yIGFzZSgpIHsKLQkJcmV0dXJuIEFTRTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgb25seSBzdGF0aWMgaW5zdGFuY2VzLgotCSAqLwotCXByaXZhdGUgU3liYXNlKFN0cmluZyBkdHBWZW5kb3JOYW1lKSB7Ci0JCXN1cGVyKCk7Ci0JCXRoaXMuZHRwVmVuZG9yTmFtZSA9IGR0cFZlbmRvck5hbWU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXREVFBWZW5kb3JOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5kdHBWZW5kb3JOYW1lOwotCX0KLQotCUBPdmVycmlkZQotCUNhdGFsb2dTdHJhdGVneSBnZXRDYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBTaW1wbGVDYXRhbG9nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBCeSBkZWZhdWx0LCBTeWJhc2UgaWRlbnRpZmllcnMgYXJlIGNhc2Utc2Vuc2l0aXZlLCBldmVuIHdpdGhvdXQKLQkgKiBkZWxpbWl0ZXJzLiBUaGlzIGNhbiBkZXBlbmQgb24gdGhlIGNvbGxhdGlvbiBzZXR0aW5nLi4uLgotCSAqLwotCUBPdmVycmlkZQotCUZvbGRpbmdTdHJhdGVneSBnZXRGb2xkaW5nU3RyYXRlZ3koKSB7Ci0JCXJldHVybiBOb25Gb2xkaW5nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBTeWJhc2Ugd2lsbCB1c2UgdGhlIHVzZXItcmVxdWVzdGVkIGRhdGFiYXNlOyBpZiB0aGF0IGRhdGFiYXNlIGlzIG5vdAotCSAqIGZvdW5kLCBpdCB3aWxsIGRlZmF1bHQgdG8gJ21hc3RlcicuCi0JICovCi0JQE92ZXJyaWRlCi0Jdm9pZCBhZGREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzVG8oRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSwgQXJyYXlMaXN0PFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJaWRlbnRpZmllcnMuYWRkKGRhdGFiYXNlLmdldE5hbWUoKSk7Ci0JCWlkZW50aWZpZXJzLmFkZChNQVNURVJfQ0FUQUxPR19JREVOVElGSUVSKTsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BU1RFUl9DQVRBTE9HX0lERU5USUZJRVIgPSAibWFzdGVyIjsgIC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFRoZSB0eXBpY2FsIGRlZmF1bHQgc2NoZW1hIG9uIFN5YmFzZSBmb3IgYW55IGRhdGFiYXNlIChjYXRhbG9nKSBpcwotCSAqICdkYm8nLgotCSAqIAotCSAqIEFjdHVhbGx5LCB0aGUgZGVmYXVsdCBzY2hlbWEgaXMgbW9yZSBsaWtlIGEgc2VhcmNoIHBhdGg6Ci0JICogVGhlIHNlcnZlciBsb29rcyBmb3IgYSBzY2hlbWEgb2JqZWN0IChlLmcuIGEgdGFibGUpIGZpcnN0IGluIHRoZSB1c2VyJ3MKLQkgKiBzY2hlbWEsIHRoZW4gaXQgbG9va3MgZm9yIHRoZSBzY2hlbWEgb2JqZWN0IGluIHRoZSBkYXRhYmFzZSBvd25lcidzCi0JICogc2NoZW1hIChkYm8pLiBBcyBhIHJlc3VsdCwgaXQncyByZWFsbHkgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkKLQkgKiB0aGUgImRlZmF1bHQiIHNjaGVtYSB3aXRob3V0IGtub3dpbmcgdGhlIHNjaGVtYSBvYmplY3Qgd2UgYXJlCi0JICogbG9va2luZyBmb3IuCi0JICogCi0JICogKE5vdGU6IHRoZSBjdXJyZW50ICd1c2VyJyBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIGN1cnJlbnQKLQkgKiAnbG9naW4nIC0gc2VlIHNwX2FkZHVzZXIgYW5kIHNwX2FkZGxvZ2luOyBzbyB3ZSBwcm9iYWJseSBjYW4ndAotCSAqIHVzZSBDb25uZWN0aW9uUHJvZmlsZSNnZXRVc2VyTmFtZSgpLikKLQkgKi8KLQlAT3ZlcnJpZGUKLQl2b2lkIGFkZERlZmF1bHRTY2hlbWFJZGVudGlmaWVyc1RvKERhdGFiYXNlIGRhdGFiYXNlLCBTdHJpbmcgdXNlck5hbWUsIEFycmF5TGlzdDxTdHJpbmc+IGlkZW50aWZpZXJzKSB7Ci0JCWlkZW50aWZpZXJzLmFkZChERUZBVUxUX1NDSEVNQV9JREVOVElGSUVSKTsKLQl9Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU0NIRU1BX0lERU5USUZJRVIgPSAiZGJvIjsgIC8vJE5PTi1OTFMtMSQKLQotCUBPdmVycmlkZQotCWNoYXJbXSBnZXRFeHRlbmRlZE5vcm1hbE5hbWVTdGFydENoYXJhY3RlcnMoKSB7Ci0JCXJldHVybiBFWFRFTkRFRF9OT1JNQUxfTkFNRV9TVEFSVF9DSEFSQUNURVJTOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gRVhURU5ERURfTk9STUFMX05BTUVfU1RBUlRfQ0hBUkFDVEVSUyA9IG5ldyBjaGFyW10geyAnXycsICdAJyB9OwotCi0JQE92ZXJyaWRlCi0JY2hhcltdIGdldEV4dGVuZGVkTm9ybWFsTmFtZVBhcnRDaGFyYWN0ZXJzKCkgewotCQlyZXR1cm4gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTOwotCX0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gRVhURU5ERURfTk9STUFMX05BTUVfUEFSVF9DSEFSQUNURVJTID0gbmV3IGNoYXJbXSB7ICckJywgJ6UnLCAnoycsICcjJyB9OwotCi0JLyoqCi0JICogQnkgZGVmYXVsdCwgU3liYXNlIGRlbGltaXRzIGlkZW50aWZpZXJzIHdpdGggYnJhY2tldHMgKFtdKTsgYnV0IGl0Ci0JICogY2FuIGFsc28gYmUgY29uZmlndXJlZCB0byB1c2UgZG91YmxlLXF1b3Rlcy4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlib29sZWFuIGlkZW50aWZpZXJJc0RlbGltaXRlZChTdHJpbmcgaWRlbnRpZmllcikgewotCQlyZXR1cm4gU3RyaW5nVG9vbHMuc3RyaW5nSXNCcmFja2V0ZWQoaWRlbnRpZmllcikKLQkJCQkJfHwgc3VwZXIuaWRlbnRpZmllcklzRGVsaW1pdGVkKGlkZW50aWZpZXIpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1Vua25vd25DYXRhbG9nU3RyYXRlZ3kuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9Vbmtub3duQ2F0YWxvZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOWE3MjkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1Vua25vd25DYXRhbG9nU3RyYXRlZ3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hOwotCi0vKioKLSAqIENhdGFsb2cgc3RyYXRlZ3kgZm9yIHVua25vd24gRFRQIGRhdGFiYXNlcy4KLSAqIEBzZWUgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSNnZXRDYXRhbG9ncygpCi0gKi8KLWNsYXNzIFVua25vd25DYXRhbG9nU3RyYXRlZ3kKLQlpbXBsZW1lbnRzIENhdGFsb2dTdHJhdGVneQotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIENhdGFsb2dTdHJhdGVneSBJTlNUQU5DRSA9IG5ldyBVbmtub3duQ2F0YWxvZ1N0cmF0ZWd5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgQ2F0YWxvZ1N0cmF0ZWd5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIFVua25vd25DYXRhbG9nU3RyYXRlZ3koKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncyhEYXRhYmFzZSBkYXRhYmFzZSkgewotCQlMaXN0PENhdGFsb2c+IGNhdGFsb2dzID0gZGF0YWJhc2UuZ2V0Q2F0YWxvZ3MoKTsKLQkJaWYgKChjYXRhbG9ncyA9PSBudWxsKSB8fCBjYXRhbG9ncy5pc0VtcHR5KCkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCXJldHVybiB0aGlzLmdldEZhdXhDYXRhbG9nKGNhdGFsb2dzKSA9PSBudWxsOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBMaXN0PENhdGFsb2c+IGdldENhdGFsb2dzKERhdGFiYXNlIGRhdGFiYXNlKSB7Ci0JCUxpc3Q8Q2F0YWxvZz4gY2F0YWxvZ3MgPSBkYXRhYmFzZS5nZXRDYXRhbG9ncygpOwotCQkvLyBpZiB0aGVyZSBhcmUgbm8gY2F0YWxvZ3MsIHRoZSBkYXRhYmFzZSBtdXN0IGhvbGQgdGhlIHNjaGVtYXRhIGRpcmVjdGx5Ci0JCWlmICgoY2F0YWxvZ3MgPT0gbnVsbCkgfHwgY2F0YWxvZ3MuaXNFbXB0eSgpKSB7Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0JCX0KLQotCQlDYXRhbG9nIGZhdXhDYXRhbG9nID0gdGhpcy5nZXRGYXV4Q2F0YWxvZyhjYXRhbG9ncyk7Ci0JCXJldHVybiAoZmF1eENhdGFsb2cgPT0gbnVsbCkgPyBjYXRhbG9ncyA6IENvbGxlY3Rpb25zLjxDYXRhbG9nPmVtcHR5TGlzdCgpOwotCX0KLQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBMaXN0PFNjaGVtYT4gZ2V0U2NoZW1hcyhEYXRhYmFzZSBkYXRhYmFzZSkgewotCQlMaXN0PENhdGFsb2c+IGNhdGFsb2dzID0gZGF0YWJhc2UuZ2V0Q2F0YWxvZ3MoKTsKLQkJLy8gaWYgdGhlcmUgYXJlIG5vIGNhdGFsb2dzLCB0aGUgZGF0YWJhc2UgbXVzdCBob2xkIHRoZSBzY2hlbWF0YSBkaXJlY3RseQotCQlpZiAoKGNhdGFsb2dzID09IG51bGwpIHx8IGNhdGFsb2dzLmlzRW1wdHkoKSkgewotCQkJcmV0dXJuIGRhdGFiYXNlLmdldFNjaGVtYXMoKTsKLQkJfQotCi0JCUNhdGFsb2cgZmF1eENhdGFsb2cgPSB0aGlzLmdldEZhdXhDYXRhbG9nKGNhdGFsb2dzKTsKLQkJcmV0dXJuIChmYXV4Q2F0YWxvZyAhPSBudWxsKSA/IGZhdXhDYXRhbG9nLmdldFNjaGVtYXMoKSA6IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotCX0KLQotCXByaXZhdGUgQ2F0YWxvZyBnZXRGYXV4Q2F0YWxvZyhMaXN0PENhdGFsb2c+IGNhdGFsb2dzKSB7Ci0JCWlmIChjYXRhbG9ncy5zaXplKCkgPT0gMSkgewotCQkJQ2F0YWxvZyBjYXRhbG9nID0gY2F0YWxvZ3MuZ2V0KDApOwotCQkJaWYgKGNhdGFsb2cuZ2V0TmFtZSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCXJldHVybiBjYXRhbG9nOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1VucmVjb2duaXplZFZlbmRvci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1VucmVjb2duaXplZFZlbmRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTc1MTIzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9VbnJlY29nbml6ZWRWZW5kb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotLyoqCi0gKiAKLSAqLwotY2xhc3MgVW5yZWNvZ25pemVkVmVuZG9yCi0JZXh0ZW5kcyBBYnN0cmFjdFZlbmRvcgotewotCS8vIHNpbmdsZXRvbgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFZlbmRvciBJTlNUQU5DRSA9IG5ldyBVbnJlY29nbml6ZWRWZW5kb3IoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2luZ2xldG9uLgotCSAqLwotCXN0YXRpYyBWZW5kb3IgaW5zdGFuY2UoKSB7Ci0JCXJldHVybiBJTlNUQU5DRTsKLQl9Ci0KLQkvKioKLQkgKiBFbnN1cmUgc2luZ2xlIGluc3RhbmNlLgotCSAqLwotCXByaXZhdGUgVW5yZWNvZ25pemVkVmVuZG9yKCkgewotCQlzdXBlcigpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0RFRQVmVuZG9yTmFtZSgpIHsKLQkJcmV0dXJuICJVbnJlY29nbml6ZWQgVmVuZG9yIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIE5vdCBzdXJlIHdoYXQgdG8gZG8gaGVyZS4uLi4KLQkgKiBBc3N1bWUgdGhlIERUUCBkYXRhYmFzZSBpcyBvcmdhbml6ZWQgaW50byBvbmUgb3IgbW9yZSBjYXRhbG9ncyBhbmQKLQkgKiB0aGUgc2NoZW1hdGEgYXJlIGNvbnRhaW5lZCBieSB0aG9zZSBjYXRhbG9ncy4gVGhpcyBhcHBlYXJzIHRvIGJlIHRoZQotCSAqIGRlZmF1bHQgd2F5IERUUCBidWlsZHMgbW9kZWxzIHRoZXNlIGRheXMgKGkuZS4gYSBkYXRhYmFzZSB3aXRoIGF0Ci0JICogbGVhc3Qgb25lIGNhdGFsb2csIGluc3RlYWQgb2YgdGhlIGRhdGFiYXNlIGhvbGRpbmcgc2NoZW1hdGEKLQkgKiBkaXJlY3RseSkuCi0JICovCi0JQE92ZXJyaWRlCi0JQ2F0YWxvZ1N0cmF0ZWd5IGdldENhdGFsb2dTdHJhdGVneSgpIHsKLQkJcmV0dXJuIFVua25vd25DYXRhbG9nU3RyYXRlZ3kuaW5zdGFuY2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlGb2xkaW5nU3RyYXRlZ3kgZ2V0Rm9sZGluZ1N0cmF0ZWd5KCkgewotCQlyZXR1cm4gVXBwZXJDYXNlRm9sZGluZ1N0cmF0ZWd5Lmluc3RhbmNlKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvVXBwZXJDYXNlRm9sZGluZ1N0cmF0ZWd5LmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvVXBwZXJDYXNlRm9sZGluZ1N0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OGQ0ZGQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1VwcGVyQ2FzZUZvbGRpbmdTdHJhdGVneS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLQotLyoqCi0gKiBGb2xkICJub3JtYWwiIGlkZW50aWZpZXJzIHRvIHVwcGVyIGNhc2UuCi0gKiBJZ25vcmUgdGhlIGNhc2Ugb2YgIm5vcm1hbCIgaWRlbnRpZmllcnMuCi0gKi8KLWNsYXNzIFVwcGVyQ2FzZUZvbGRpbmdTdHJhdGVneQotCWltcGxlbWVudHMgRm9sZGluZ1N0cmF0ZWd5Ci17Ci0KLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBGb2xkaW5nU3RyYXRlZ3kgSU5TVEFOQ0UgPSBuZXcgVXBwZXJDYXNlRm9sZGluZ1N0cmF0ZWd5KCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNpbmdsZXRvbi4KLQkgKi8KLQlzdGF0aWMgRm9sZGluZ1N0cmF0ZWd5IGluc3RhbmNlKCkgewotCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JfQotCi0JLyoqCi0JICogRW5zdXJlIHNpbmdsZSBpbnN0YW5jZS4KLQkgKi8KLQlwcml2YXRlIFVwcGVyQ2FzZUZvbGRpbmdTdHJhdGVneSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGZvbGQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIG5hbWUudG9VcHBlckNhc2UoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBuYW1lSXNGb2xkZWQoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIFN0cmluZ1Rvb2xzLnN0cmluZ0lzVXBwZXJjYXNlKG5hbWUpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIG5vcm1hbElkZW50aWZpZXJzQXJlQ2FzZVNlbnNpdGl2ZSgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBDbGFzc1Rvb2xzLnRvU3RyaW5nQ2xhc3NOYW1lRm9yT2JqZWN0KHRoaXMpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1ZlbmRvci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1ZlbmRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzNkNzc0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kYi9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL2ludGVybmFsL3ZlbmRvci9WZW5kb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLmludGVybmFsLnZlbmRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkRhdGFiYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWE7Ci0KLS8qKgotICogRGVsZWdhdGUgdmVuZG9yLXNwZWNpZmljIGJlaGF2aW9yIHRvIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGludGVyZmFjZToKLSAqICAgLSBjYXRhbG9nIHN1cHBvcnQKLSAqICAgLSBkZWZhdWx0IGNhdGFsb2cgYW5kIHNjaGVtYQotICogICAtIGNvbnZlcnRpbmcgbmFtZXMgdG8gaWRlbnRpZmllcnMgYW5kIHZpY2UtdmVyc2EKLSAqIAotICogTm90ZToKLSAqIFdlIHVzZSAibmFtZSIgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHVubW9kaWZpZWQgbmFtZSBvZiBhIGRhdGFiYXNlIG9iamVjdAotICogYXMgc3VwcGxpZWQgYnkgdGhlIGRhdGFiYXNlIGl0c2VsZiAoaS5lLiBpdCBpcyBub3QgZGVsaW1pdGVkIGFuZCBpdCBpcyBhbHdheXMKLSAqIGNhc2Utc2Vuc2l0aXZlKS4KLSAqIFdlIHVzZSAiaWRlbnRpZmllciIgd2hlbiBkZWFsaW5nIHdpdGggYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRhYmFzZQotICogb2JqZWN0IG5hbWUgKGkuZS4gaXQgbWF5IGJlIGRlbGltaXRlZCBhbmQsIGRlcGVuZGluZyBvbiB0aGUgdmVuZG9yLCBpdCBtYXkKLSAqIGJlIGNhc2UtaW5zZW5zaXRpdmUpLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFZlbmRvciB7Ci0KLQkvKioKLQkgKiBUaGlzIG11c3QgbWF0Y2ggdGhlIERUUCB2ZW5kb3IgbmFtZS4KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZSNnZXRWZW5kb3IoKQotCSAqLwotCVN0cmluZyBnZXREVFBWZW5kb3JOYW1lKCk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gd2hldGhlciB0aGUgdmVuZG9yIHN1cHBvcnRzICJyZWFsIiBjYXRhbG9ncyAoZS5nLiBTeWJhc2UpLgotCSAqLwotCWJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncyhEYXRhYmFzZSBkYXRhYmFzZSk7Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBkYXRhYmFzZSdzIGNhdGFsb2dzLgotCSAqLwotCUxpc3Q8Q2F0YWxvZz4gZ2V0Q2F0YWxvZ3MoRGF0YWJhc2UgZGF0YWJhc2UpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UncyBkZWZhdWx0IGNhdGFsb2cgaWRlbnRpZmllcnMgZm9yIHRoZQotCSAqIHNwZWNpZmllZCB1c2VyLgotCSAqLwotCUxpc3Q8U3RyaW5nPiBnZXREZWZhdWx0Q2F0YWxvZ0lkZW50aWZpZXJzKERhdGFiYXNlIGRhdGFiYXNlLCBTdHJpbmcgdXNlck5hbWUpOwotCi0JLyoqCi0JICogUmV0dXJuIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UncyBzY2hlbWFzLgotCSAqLwotCUxpc3Q8U2NoZW1hPiBnZXRTY2hlbWFzKERhdGFiYXNlIGRhdGFiYXNlKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlJ3MgZGVmYXVsdCBzY2hlbWEgaWRlbnRpZmllcnMgZm9yIHRoZQotCSAqIHNwZWNpZmllZCB1c2VyLgotCSAqLwotCUxpc3Q8U3RyaW5nPiBnZXREZWZhdWx0U2NoZW1hSWRlbnRpZmllcnMoRGF0YWJhc2UgZGF0YWJhc2UsIFN0cmluZyB1c2VyTmFtZSk7Ci0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2Ugb2JqZWN0IG5hbWUgdG8gYSB2ZW5kb3IgaWRlbnRpZmllci4KLQkgKiBSZXR1cm4gbnVsbCBpZiB0aGUgaWRlbnRpZmllciBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgZGVmYXVsdCBuYW1lLgotCSAqLwotCVN0cmluZyBjb252ZXJ0TmFtZVRvSWRlbnRpZmllcihTdHJpbmcgbmFtZSwgU3RyaW5nIGRlZmF1bHROYW1lKTsKLQotCS8qKgotCSAqIENvbnZlcnQgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBvYmplY3QgbmFtZSB0byBhIHZlbmRvciBpZGVudGlmaWVyLgotCSAqLwotCVN0cmluZyBjb252ZXJ0TmFtZVRvSWRlbnRpZmllcihTdHJpbmcgbmFtZSk7Ci0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgZGF0YWJhc2Ugb2JqZWN0IGlkZW50aWZpZXIgdG8gYSB2ZW5kb3IgbmFtZS4KLQkgKi8KLQlTdHJpbmcgY29udmVydElkZW50aWZpZXJUb05hbWUoU3RyaW5nIGlkZW50aWZpZXIpOwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvVmVuZG9yUmVwb3NpdG9yeS5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRiL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvaW50ZXJuYWwvdmVuZG9yL1ZlbmRvclJlcG9zaXRvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY4ZjA5ZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZGIvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi9pbnRlcm5hbC92ZW5kb3IvVmVuZG9yUmVwb3NpdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIuaW50ZXJuYWwudmVuZG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBWZW5kb3JSZXBvc2l0b3J5IHsKLQlwcml2YXRlIGZpbmFsIFZlbmRvcltdIHZlbmRvcnM7Ci0KLQkvLyBzaW5nbGV0b24KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBWZW5kb3JSZXBvc2l0b3J5IElOU1RBTkNFID0gbmV3IFZlbmRvclJlcG9zaXRvcnkoKTsKLQotCS8qKgotCSAqIFJldHVybiB0aGUgc2luZ2xldG9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVmVuZG9yUmVwb3NpdG9yeSBpbnN0YW5jZSgpIHsKLQkJcmV0dXJuIElOU1RBTkNFOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSBzaW5nbGUgaW5zdGFuY2UuCi0JICovCi0JcHJpdmF0ZSBWZW5kb3JSZXBvc2l0b3J5KCkgewotCQlzdXBlcigpOwotCQl0aGlzLnZlbmRvcnMgPSB0aGlzLmJ1aWxkVmVuZG9ycygpOwotCX0KLQotCXByaXZhdGUgVmVuZG9yW10gYnVpbGRWZW5kb3JzKCkgewotCQlBcnJheUxpc3Q8VmVuZG9yPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxWZW5kb3I+KCk7Ci0JCXRoaXMuYWRkVmVuZG9yc1RvKGxpc3QpOwotCQlyZXR1cm4gbGlzdC50b0FycmF5KG5ldyBWZW5kb3JbbGlzdC5zaXplKCldKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYWRkVmVuZG9yc1RvKEFycmF5TGlzdDxWZW5kb3I+IGxpc3QpIHsKLQkJdGhpcy5hZGRWZW5kb3JUbyhEQjIudWRiKCksIGxpc3QpOwotCQl0aGlzLmFkZFZlbmRvclRvKERCMi51ZGJJU2VyaWVzKCksIGxpc3QpOwotCQl0aGlzLmFkZFZlbmRvclRvKERCMi51ZGJaU2VyaWVzKCksIGxpc3QpOwotCQl0aGlzLmFkZFZlbmRvclRvKERlcmJ5Lmluc3RhbmNlKCksIGxpc3QpOwotCQl0aGlzLmFkZFZlbmRvclRvKEhTUUxEQi5pbnN0YW5jZSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhJbmZvcm1peC5pbnN0YW5jZSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhNYXhEQi5pbnN0YW5jZSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhNeVNRTC5pbnN0YW5jZSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhPcmFjbGUuaW5zdGFuY2UoKSwgbGlzdCk7Ci0JCXRoaXMuYWRkVmVuZG9yVG8oUG9zdGdyZVNRTC5pbnN0YW5jZSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhTUUxTZXJ2ZXIuaW5zdGFuY2UoKSwgbGlzdCk7Ci0JCXRoaXMuYWRkVmVuZG9yVG8oU3liYXNlLmFzYSgpLCBsaXN0KTsKLQkJdGhpcy5hZGRWZW5kb3JUbyhTeWJhc2UuYXNlKCksIGxpc3QpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRWZW5kb3JUbyhWZW5kb3IgdmVuZG9yLCBBcnJheUxpc3Q8VmVuZG9yPiBsaXN0KSB7Ci0JCVN0cmluZyBuYW1lID0gdmVuZG9yLmdldERUUFZlbmRvck5hbWUoKTsKLQkJZm9yIChJdGVyYXRvcjxWZW5kb3I+IHN0cmVhbSA9IGxpc3QuaXRlcmF0b3IoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQlpZiAoc3RyZWFtLm5leHQoKS5nZXREVFBWZW5kb3JOYW1lKCkuZXF1YWxzKG5hbWUpKSB7Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRHVwbGljYXRlIHZlbmRvcjogIiArIG5hbWUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJbGlzdC5hZGQodmVuZG9yKTsKLQl9Ci0KLQlwdWJsaWMgVmVuZG9yIGdldFZlbmRvcihTdHJpbmcgZHRwVmVuZG9yTmFtZSkgewotCQlmb3IgKGludCBpID0gdGhpcy52ZW5kb3JzLmxlbmd0aDsgaS0tID4gMDspIHsKLQkJCVZlbmRvciB2ZW5kb3IgPSB0aGlzLnZlbmRvcnNbaV07Ci0JCQlpZiAodmVuZG9yLmdldERUUFZlbmRvck5hbWUoKS5lcXVhbHMoZHRwVmVuZG9yTmFtZSkpIHsKLQkJCQlyZXR1cm4gdmVuZG9yOwotCQkJfQotCQl9Ci0JCXJldHVybiBVbnJlY29nbml6ZWRWZW5kb3IuaW5zdGFuY2UoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci8ucHJvamVjdCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2NzBmZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXI8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZmYwY2UuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMi4wLnF1YWxpZmllcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuaGVscDtidW5kbGUtdmVyc2lvbj0iWzMuMy4xMDAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cztidW5kbGUtdmVyc2lvbj0iWzMuMy4xMDAsNC4wLjApIgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2Fib3V0Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9hYm91dC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNmE3ZmIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2Fib3V0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+QWJvdXQgdGhpcyBjb250ZW50PC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1NFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJBYm91dCB0aGlzIGNvbnRlbnQiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+PGEgaWQ9InN0aHJlZjI4OCIgbmFtZT0ic3RocmVmMjg4Ij48L2E+Ci08aDE+QWJvdXQgdGhpcyBjb250ZW50PC9oMT4KLTxwPkRlY2VtYmVyLCAyMDA4PC9wPgotPGEgaWQ9InN0aHJlZjI4OSIgbmFtZT0ic3RocmVmMjg5Ij48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkxpY2Vuc2U8L3A+Ci08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdCA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+PC9jb2RlPi4gRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT48L2NvZGU+LjwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9hYm91dC5odG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjM2FmNmUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPCEtLSBSdW4gZGF0ZSA9IEp1bHkgMjMsIDIwMDggODo1OTo1NSAtLT4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotPHRpdGxlPkFib3V0IHRoaXMgY29udGVudDwvdGl0bGU+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4wIiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwNS0wNy0xMFQxMjo1NzoyMCswODowMCIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkFib3V0IHRoaXMgY29udGVudCIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjAiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBzdGFydC0tPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT48YSBpZD0ic3RocmVmMjU3IiBuYW1lPSJzdGhyZWYyNTciPjwvYT4KLTxoMT5BYm91dCB0aGlzIGNvbnRlbnQ8L2gxPgotPHA+SmFudWFyeSwgMjAwODwvcD4KLTxhIGlkPSJzdGhyZWYyNTgiIG5hbWU9InN0aHJlZjI1OCI+PC9hPgotPHAgY2xhc3M9InN1YmhlYWQyIj5MaWNlbnNlPC9wPgotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPjwvY29kZT4uIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2E+PC9jb2RlPi48L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iODYlIj48YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA4LCZuYnNwO09yYWNsZS4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYzg4MDguLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gY2hlYXRzaGVldHMvLFwKLSAgICAgICAgICAgICAgIGRjb21tb24vLFwKLSAgICAgICAgICAgICAgIGltZy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBjb25jZXB0X21hcHBpbmcuaHRtLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzLmh0bSxcCi0gICAgICAgICAgICAgICBjb25jZXB0czAwMS5odG0sXAotICAgICAgICAgICAgICAgY29uY2VwdHMwMDIuaHRtLFwKLSAgICAgICAgICAgICAgIGNvbmNlcHRzMDAzLmh0bSxcCi0gICAgICAgICAgICAgICBjb250ZXh0cy54bWwsXAotICAgICAgICAgICAgICAgZ2V0dGluZ19zdGFydGVkLmh0bSxcCi0gICAgICAgICAgICAgICBnZXR0aW5nX3N0YXJ0ZWQwMDEuaHRtLFwKLSAgICAgICAgICAgICAgIGdldHRpbmdfc3RhcnRlZDAwMi5odG0sXAotICAgICAgICAgICAgICAgZ2V0dGluZ19zdGFydGVkMDAzLmh0bSxcCi0gICAgICAgICAgICAgICBnZXR0aW5nX3N0YXJ0ZWQwMDQuaHRtLFwKLSAgICAgICAgICAgICAgIGluZGV4LnhtbCxcCi0gICAgICAgICAgICAgICBsZWdhbC5odG0sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICByZWZfZGV0YWlsc19vcm0uaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9qcGFfZmFjZXQuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9uZXdfanBhX3Byb2plY3QuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfcGVyc2lzdGVuY2VfcGVyc3BlY3RpdmUuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9wcmltYXJ5X2tleS5odG0sXAotICAgICAgICAgICAgICAgcmVmX3Byb2plY3RfcHJvcGVydGllcy5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlLmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMDEuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAwMi5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDAzLmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMDQuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAwNS5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDA2Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMDcuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAwOC5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDA5Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMTAuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAxMS5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDEyLmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMTMuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAxNC5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDE1Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMTYuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAxNy5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDE4Lmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0sXAotICAgICAgICAgICAgICAgdGFza19hZGRpdG9uYWxfdGFibGVzLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0sXAotICAgICAgICAgICAgICAgdGFza19pbmhlcml0YW5jZS5odG0sXAotICAgICAgICAgICAgICAgdGFza19tYW5hZ2Vfb3JtLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0sXAotICAgICAgICAgICAgICAgdGFza19tYXBwaW5nLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrcy5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMDEuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDAyLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAwMy5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMDQuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDA1Lmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAwNi5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMDcuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDA4Lmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAwOS5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMTAuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDExLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAxMi5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMTMuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDE0Lmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAxNS5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMTYuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDE3Lmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAxOC5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMTkuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDIwLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrczAyMS5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMjIuaHRtLFwKLSAgICAgICAgICAgICAgIHRpcHNfYW5kX3RyaWNrcy5odG0sXAotICAgICAgICAgICAgICAgdG9jLnhtbCxcCi0gICAgICAgICAgICAgICB3aGF0c19uZXcuaHRtLFwKLSAgICAgICAgICAgICAgIHdoYXRzX25ldzAwMS5odG0sXAotICAgICAgICAgICAgICAgd2hhdHNfbmV3MDAyLmh0bSxcCi0gICAgICAgICAgICAgICB3aGF0c19uZXcwMDMuaHRtLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMTkuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAyMC5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDIxLmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMjIuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAyMy5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDI0Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMjUuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAyNi5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDI3Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMjguaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAzMC5odG0sXAotICAgICAgICAgICAgICAgcmVmZXJlbmNlMDI5Lmh0bSxcCi0gICAgICAgICAgICAgICByZWZlcmVuY2UwMzEuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZmVyZW5jZTAzMi5odG0sXAotICAgICAgICAgICAgICAgdGFza3MwMjMuaHRtLFwKLSAgICAgICAgICAgICAgIHRhc2tzMDI0Lmh0bSxcCi0gICAgICAgICAgICAgICB3aGF0c19uZXcwMDQuaHRtLFwKLSAgICAgICAgICAgICAgIHdoYXRzX25ldzAwNS5odG0sXAotICAgICAgICAgICAgICAgcmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfRW50aXR5UHJvcGVydGllc1BhZ2UuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9hZGRfY29udmVydGVyLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfYXNzb2NpYXRpb25fY2FyZGluYWxpdHkuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9hc3NvY2lhdGlvbl90YWJsZS5odG0sXAotICAgICAgICAgICAgICAgcmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtLFwKLSAgICAgICAgICAgICAgIHJlZl9jdXN0b21pekluZGl2aWR1YWxFbnRpdGllcy5odG0sXAotICAgICAgICAgICAgICAgcmVmX2N1c3RvbWl6ZURlZmF1bHRFbnRpdHlHZW5lcmF0aW9uLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfZWNsaXBzZWxpbmtfbWFwcGluZ19maWxlLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfamF2YV9wYWdlLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfam9pbl9jb2x1bW5zLmh0bSxcCi0gICAgICAgICAgICAgICByZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0sXAotICAgICAgICAgICAgICAgcmVmX3NlbGVjdFRhYmxlcy5odG0sXAotICAgICAgICAgICAgICAgcmVmX3NlbGVjdF9jYXNjYWRlX2RpYWxvZy5odG0sXAotICAgICAgICAgICAgICAgcmVmX3RhYmxlQXNzb2NpYXRpb25zLmh0bSxcCi0gICAgICAgICAgICAgICB0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bQotZ2VuZXJhdGVTb3VyY2VCdW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jaGVhdHNoZWV0cy9hZGRfcGVyc2lzdGVuY2UueG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NoZWF0c2hlZXRzL2FkZF9wZXJzaXN0ZW5jZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYjlkMzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NoZWF0c2hlZXRzL2FkZF9wZXJzaXN0ZW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNoZWF0c2hlZXQgdGl0bGU9IkNyZWF0ZSBhIEpQQSBQcm9qZWN0Ij4KLSAgIDxpbnRybyBocmVmPSIvb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvcmVmZXJlbmNlL3JlZi1jaGVhdHNoZWV0cy5odG0iPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgVGhpcyBjaGVhdCBzaGVldCB3aWxsIGF1dG9tYXRpY2FsbHkgbGF1bmNoIHdpemFyZHMsIHBlcmZvcm0gYWN0aW9ucywgYW5kIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBzdGVwcyB0byBjcmVhdGUgYSBKUEEgcHJvamVjdC4gCi0KLVRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgY2hlYXQgc2hlZXRzLCBvciB0byBzZWUgYSBsaXN0IG9mIGF2YWlsYWJsZSBjaGVhdCBzaGVldHMsIGNsaWNrIEhlbHAgKD8pLiAKLVRvIHN0YXJ0IHdvcmsgd29ya2luZyBvbiB0aGlzIGNoZWF0IHNoZWV0IGNsaWNrIHRoZSAmcXVvdDtDbGljayB0byBCZWdpbiZxdW90OyBidXR0b24gYmVsb3cuIAotCi1MZXQmYXBvcztzIGdldCBzdGFydGVkIQotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgIDwvaW50cm8+Ci0gICA8aXRlbSB0aXRsZT0iU2V0dXAgdGhlIEVudmlyb25tZW50IiBkaWFsb2c9ImZhbHNlIiBza2lwPSJ0cnVlIiBocmVmPSIvb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kb2MudXNlci9kb2MvaHRtbC9hc2MxMjI5NzAwMzQzMzUyLmh0bWwiPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgWW91ciBlbnZpcm9ubWVudCBtdXN0IGJlIHNldCB1cCBiZWZvcmUgeW91IGNhbiBwZXJmb3JtIHRoZSBzdGVwcyBpbiB0aGlzIGNoZWF0IHNoZWV0LiAKLQotQ3JlYXRlIGEgZGF0YWJhc2UgcHJvZmlsZSBhbmQgY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuCi0KLVRoZSBEYXRhYmFzZSBDb25uZWN0aW9uIGRpYWxvZyBhdXRvbWF0aWNhbGx5IGFwcGVhcnMgd2hlbiB5b3UgY2xpY2sgdGhlICZxdW90O0NsaWNrIHRvIFBlcmZvcm0mcXVvdDsgYnV0dG9uLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxjb21tYW5kIHNlcmlhbGl6YXRpb249Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuYXR0YWNoUHJvZmlsZUFjdGlvbiIgY29uZmlybT0iZmFsc2UiPgotICAgICAgPC9jb21tYW5kPgotICAgPC9pdGVtPgotICAgPGl0ZW0gdGl0bGU9IkNyZWF0ZSBhIEpQQSBQcm9qZWN0IiBkaWFsb2c9ImZhbHNlIiBza2lwPSJmYWxzZSIgaHJlZj0iL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0iPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgVXNlIHRoZSBOZXcgUHJvamVjdCBXaXphcmQgdG8gY3JlYXRlIGEgSlBBIHByb2plY3QuIAotU2VsZWN0IDxiPkZpbGUtJmd0O05ldy0mZ3Q7UHJvamVjdC4uLjwvYj4gYW5kIGNob29zZSA8Yj5KUEEtJmd0O0pQQSBQcm9qZWN0PC9iPiBpbiB0aGUgbGlzdC4gCi0KLU9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSB3aXphcmQsIGVudGVyIGEgcHJvamVjdCBuYW1lIGFuZCBsb2NhdGlvbiwgc2VsZWN0IHlvdXIgdGFyZ2V0IHJ1bnRpbWUsIGFuZCBzZWxlY3QgYSBwcmVkZWZpbmVkIHByb2plY3QgY29uZmlndXJhdGlvbi4KLQotQ2xpY2sgPGI+TmV4dDwvYj4gdG8gZGlzcGxheSB0aGUgbmV4dCBwYWdlIG9mIHRoZSB3aXphcmQuCi0KLVRoZSAmcXVvdDtOZXcgSlBBIFByb2plY3QmcXVvdDsgd2l6YXJkIGlzIGF1dG9tYXRpY2FsbHkgZGlzcGxheWVkIHdoZW4geW91IGNsaWNrIHRoZSAmcXVvdDtDbGljayB0byBQZXJmb3JtJnF1b3Q7IGJ1dHRvbi4KLSAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkud2l6YXJkcy5PcGVuUHJvamVjdFdpemFyZEFjdGlvbiIgcGx1Z2luSWQ9Im9yZy5lY2xpcHNlLmpkdC51aSIgY29uZmlybT0iZmFsc2UiPgotICAgICAgPC9hY3Rpb24+Ci0gICA8L2l0ZW0+Ci0gICA8aXRlbSB0aXRsZT0iU2VsZWN0IFByb2plY3QgRmFjZXQiIGRpYWxvZz0iZmFsc2UiIHNraXA9ImZhbHNlIiBocmVmPSIvb3JnLmVjbGlwc2UuanN0LmoyZWUuZG9jLnVzZXIvdG9waWNzL3BoLXByb2plY3RzLmh0bWwiPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgVXNlIHRoZSBQcm9qZWN0IEZhY2V0IHBhZ2UgdG8gc2VsZWN0IGEgcHJlZGVmaW5lZCBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gb3Igc3BlY2lmaWMgc3BlY2lmaWMgZmFjZXRzIHRvIGluY2x1ZGUgaW4gdGhlIHByb2plY3QuIAotCi1DbGljayAmcXVvdDtOZXh0JnF1b3Q7IHRvIGRpc3BsYXkgdGhlIG5leHQgcGFnZSBvZiB0aGUgd2l6YXJkLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgIDwvaXRlbT4KLSAgIDxpdGVtIHRpdGxlPSJTcGVjaWZ5IHRoZSBKUEEgRmFjZXQiIGRpYWxvZz0iZmFsc2UiIHNraXA9ImZhbHNlIiBocmVmPSIvb3JnLmVjbGlwc2UuamR0LmRvYy51c2VyL3JlZl9qcGFfZmFjZXQuaHRtIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIFVzZSB0aGUgSlBBIEZhY2V0IHBhZ2UgdG8gc3BlY2lmeSB0aGUgdGhlIHZlbmRvci1zcGVjaWZpYyBKUEEgcGxhdGZvcm0sIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIHVzZSwgYW5kIHRoZSBzcGVjaWZpYyBKUEEgaW1wbGVtZW50YXRpb24gbGlicmFyeS4gCi0KLVlvdSBjYW4gYWxzbyBzcGVjaWZ5IGlmIERhbGkgc2hvdWxkIGNyZWF0ZSBhbiBvcm0ueG1sIGZpbGUuCi0KLUlmIHlvdSBkbyBub3QgaGF2ZSBhbiBhY3RpdmUgZGF0YWJhc2UgY29ubmVjdGlvbiwgY2xpY2sgPGI+QWRkIENvbm5lY3Rpb25zPC9iPiB0byBjcmVhdGUgb25lLiAKLQotSWYgeW91IGRvIG5vdCBoYXZlIGEgZGVmaW5lZCBKUEEgaW1wbGVtZW50YXRpb24gbGlicmFyeSwgY2xpY2sgPGI+Q29uZmlndXJlIGRlZmF1bHQgSlBBIGltcGxlbWVudGF0aW9uIGxpYnJhcnk8L2I+IG9yIDxiPkNvbmZpZ3VyZSB1c2VyIGxpYnJhcmllczwvYj4gdG8gZGVmaW5lIG9uZS4gCi0KLUNsaWNrIDxiPkZpbmlzaDwvYj4gdG8gY29tcGxldGUgdGhlIHdpemFyZCBhbmQgb3BlbiB0aGUgb3BlbiB0aGUgcHJvamVjdC4KLSAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICA8L2l0ZW0+Ci0gICA8aXRlbSB0aXRsZT0iRmluaXNoIiBkaWFsb2c9ImZhbHNlIiBza2lwPSJmYWxzZSI+Ci0gICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICBDb25ncmF0dWxhdGlvbnMhIFlvdSBoYXZlIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIGEgSlBBIHByb2plY3QuIENvbXBsZXRlIHRoZSBhZGRpdGlvbmFsIGNoZWF0IHNoZWV0cyB0byBhZGQgSmF2YSBwZXJzaXN0ZW50IGVudGl0aWVzIGFuZCBtYXAgdGhvc2UgZW50aXRpZXMgdG8gZGF0YWJhc2UgdGFibGVzLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgIDwvaXRlbT4KLTwvY2hlYXRzaGVldD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jaGVhdHNoZWV0cy9jcmVhdGVfZW50aXR5LnhtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jaGVhdHNoZWV0cy9jcmVhdGVfZW50aXR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY0ZThhZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY2hlYXRzaGVldHMvY3JlYXRlX2VudGl0eS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNoZWF0c2hlZXQgdGl0bGU9IkNyZWF0ZSBhIFBlcnNpc3RlbnQgRW50aXR5Ij4KLQk8aW50cm8gaHJlZj0iL29yZy5lY2xpcHNlLnBsYXRmb3JtLmRvYy51c2VyL3JlZmVyZW5jZS9yZWYtY2hlYXRzaGVldHMuaHRtIj4KLQkJPGRlc2NyaXB0aW9uPgotVGhpcyBjaGVhdCBzaGVldCB3aWxsIGF1dG9tYXRpY2FsbHkgbGF1bmNoIHdpemFyZHMsIHBlcmZvcm0gYWN0aW9ucywgYW5kIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBzdGVwcyB0byBhZGQgYSBKYXZhIHBlcnNpc3RlbnQgZW50aXR5IHRvIHlvdXIgSmF2YSBwcm9qZWN0LiAKLVRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgY2hlYXQgc2hlZXRzIG9yIHRvIHNlZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNoZWF0IHNoZWV0cywgY2xpY2sgSGVscCAoPykuIAotVG8gc3RhcnQgd29yayB3b3JraW5nIG9uIHRoaXMgY2hlYXQgc2hlZXQsIGNsaWNrIHRoZSA8Yj5DbGljayB0byBCZWdpbjwvYj4gYnV0dG9uIGJlbG93LiAKLUxldCdzIGdldCBzdGFydGVkIQotICA8L2Rlc2NyaXB0aW9uPgotCTwvaW50cm8+Ci0JPGl0ZW0gdGl0bGU9IkNyZWF0ZSBhIEpQQSBQcm9qZWN0IiBza2lwPSJ0cnVlIj4KLQkJPGRlc2NyaXB0aW9uPgotVG8gY3JlYXRlIGEgUGVyc2lzdGVudCBlbnRpdHksIHlvdSBtdXN0IGNyZWF0ZSBhIEpQQSBwcm9qZWN0LiBJZiB5b3UgYWxyZWFkeSBoYXZlIGEgSlBBIHByb2plY3QsIHlvdSBtYXkgc2tpcCB0aGlzIHN0ZXAgYnkgY2xpY2tpbmcgdGhlICJDbGljayB0byBTa2lwIiBidXR0b24uCi1JZiBub3QsIHNlbGVjdCA8Yj5GaWxlLT5OZXctPlByb2plY3QuLi48L2I+IGFuZCBjaG9vc2UgPGI+SlBBLT5KUEEgUHJvamVjdDwvYj4gaW4gdGhlIGxpc3QuIENvbXBsZXRlIGVhY2ggcGFnZSBvZiB0aGUgQ3JlYXRlIEpQQSBQcm9qZWN0IHdpemFyZCB0byBjcmVhdGUgYSBuZXcgSlBBIHByb2plY3QuCi0gICAgICA8L2Rlc2NyaXB0aW9uPgotCTwvaXRlbT4KLQk8aXRlbSB0aXRsZT0iT3BlbiB0aGUgSlBBIERldmVsb3BtZW50IFBlcnNwZWN0aXZlIiBza2lwPSJ0cnVlIiBocmVmPSIvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9wZXJzcGVjdGl2ZS5odG0iPgotCQk8YWN0aW9uIHBsdWdpbklkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cyIgY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNoZWF0c2hlZXRzLmFjdGlvbnMuT3BlblBlcnNwZWN0aXZlIiBwYXJhbTE9Im9yZy5lY2xpcHNlLmpwdC51aS5QZXJzaXN0ZW5jZVBlcnNwZWN0aXZlIi8+Ci0JCTxkZXNjcmlwdGlvbj4KLVdoZW4gd29ya2luZyB3aXRoIEpQQSAgcGVyc2lzdGVuY2UsIHlvdSBzaG91bGQgdXNlIHRoZSBQZXJzaXN0ZW5jZSBwZXJzcGVjdGl2ZS4gSWYgeW91IGFscmVhZHkgaGF2ZSB0aGUgUGVyc2lzdGVuY2UgcGVyc3BlY3RpdmUgYWN0aXZlLCB5b3UgbWF5IHNraXAgdGhpcyBzdGVwIGJ5IGNsaWNraW5nIHRoZSAiQ2xpY2sgdG8gU2tpcCIgYnV0dG9uLiAKLUlmIG5vdCwgc2VsZWN0IDxiPldpbmRvdy0+T3BlbiBQZXJzcGVjdGl2ZS0+T3RoZXI8L2I+IGluIHRoZSBtZW51YmFyIGF0IHRoZSB0b3Agb2YgdGhlIHdvcmtiZW5jaC4gSW4gdGhlIFNlbGVjdCBQZXJzcGVjdGl2ZXMgZGlhbG9nLCBzZWxlY3QgPGI+SlBBIERldmVsb3BtZW50PC9iPiBhbmQgY2xpY2sgT0suIFRoaXMgc3RlcCBjaGFuZ2VzIHRoZSBwZXJzcGVjdGl2ZSB0byBzZXQgdXAgdGhlIEVjbGlwc2Ugd29ya2JlbmNoIGZvciBKUEEgZGV2ZWxvcG1lbnQuCi1Zb3UgY2FuIGNsaWNrIHRoZSAiQ2xpY2sgdG8gUGVyZm9ybSIgYnV0dG9uIHRvIGhhdmUgdGhlICJQZXJzaXN0ZW5jZSIgcGVyc3BlY3RpdmUgb3BlbmVkIGF1dG9tYXRpY2FsbHkuCi0gICA8L2Rlc2NyaXB0aW9uPgotCTwvaXRlbT4KLQk8aXRlbSB0aXRsZT0iQ3JlYXRlIGEgSmF2YSBDbGFzcyI+Ci0JCTxkZXNjcmlwdGlvbj4KLVRoZSBuZXh0IHN0ZXAgaXMgdG8gY3JlYXRlIGEgbmV3IEphdmEgY2xhc3MuIEluIHRoZSBtYWluIHRvb2xiYXIgYWdhaW4sIGNsaWNrIG9uIDxiPk5ldyBKYXZhIENsYXNzPC9iPiBidXR0b24gKG9yIHRoZSBsaW5rIGJlbG93KS4KLVRoZSBKYXZhIGVkaXRvciB3aWxsIGF1dG9tYXRpY2FsbHkgb3BlbiBzaG93aW5nIHlvdXIgbmV3IGNsYXNzLiAgICAgIAotICAgICA8L2Rlc2NyaXB0aW9uPgotCTwvaXRlbT4KLQk8aXRlbSB0aXRsZT0iQ3JlYXRlIGEgUGVyc2lzdGVudCBFbnRpdHkiPgotCQk8ZGVzY3JpcHRpb24+Ci1GaW5hbGx5IHdlIHdpbGwgbWFrZSB0aGUgSmF2YSBjbGFzcyBhIHBlcnNpc3RlbnQgZW50aXR5LgotSW4gdGhlIEpQQSBTdHJ1Y3R1cmUgdmlldyBzZWxlY3QgdGhlIEphdmEgY2xhc3MuIAotSW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcsIHVzZSB0aGUgIk1hcCBBcyIgZmllbGQgdG8gc2VsZWN0IDxiPkVudGl0eTwvYj4uIERhbGkgYXV0b21hdGljYWxseSBhZGRzIHRoZSBARW50aXR5IGFubm90YXRpb24gdG8gdGhlIGNsYXNzIGluIHRoZSBKYXZhIGVkaXRvci4gCi1Vc2UgdGhlIFRhYmxlLCBDYXRhbG9nLCBhbmQgU2NoZW1hIGZpZWxkcyB0byBhc3NvY2lhdGUgdGhlIGVudGl0eSB3aXRoIGEgc3BlY2lmaWMgdGFibGUgaW4gdGhlIGRhdGFiYXNlLgotICAgICA8L2Rlc2NyaXB0aW9uPgotCTwvaXRlbT4KLQk8aXRlbSB0aXRsZT0iRmluaXNoIj4KLQkJPGRlc2NyaXB0aW9uPgotQ29uZ3JhdHVsYXRpb25zISBZb3UgaGF2ZSBzdWNjZXNzZnVsbHkgYWRkZWQgYSBKUEEgZW50aXR5IHRvIHlvdXIgSlBBIHByb2plY3QuIENvbXBsZXRlIHRoZSBhZGRpdGlvbmFsIGNoZWF0IHNoZWV0cyB0byBtYXAgdGhlIGVudGl0eSdzIGZpZWxkcyB0byBkYXRhYmFzZSB0YWJsZXMuCi0gIDwvZGVzY3JpcHRpb24+Ci0JPC9pdGVtPgotPC9jaGVhdHNoZWV0PgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NoZWF0c2hlZXRzL21hcF9lbnRpdHkueG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NoZWF0c2hlZXRzL21hcF9lbnRpdHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTIxOTE0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jaGVhdHNoZWV0cy9tYXBfZW50aXR5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2hlYXRzaGVldCB0aXRsZT0iTWFwIGEgSmF2YSBQZXJzaXN0ZW50IEVudGl0eSI+Ci0gICA8aW50cm8gaHJlZj0iL29yZy5lY2xpcHNlLnBsYXRmb3JtLmRvYy51c2VyL3JlZmVyZW5jZS9yZWYtY2hlYXRzaGVldHMuaHRtIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIFRoaXMgY2hlYXQgc2hlZXQgd2lsbCBhdXRvbWF0aWNhbGx5IGxhdW5jaCB3aXphcmRzLCBwZXJmb3JtIGFjdGlvbnMsIGFuZCBndWlkZSB5b3UgdGhyb3VnaCB0aGUgc3RlcHMgdG8gbWFwIHRoZSBmaWVsZHMgb2YgYSBKUEEgZW50aXR5IGVudGl0eSB0byB5b3VyIGRhdGFiYXNlLgotCi1UbyBsZWFybiBtb3JlIGFib3V0IHVzaW5nIGNoZWF0IHNoZWV0cyBvciB0byBzZWUgYSBsaXN0IG9mIGF2YWlsYWJsZSBjaGVhdCBzaGVldHMsIGNsaWNrIEhlbHAgKD8pLiAKLVRvIHN0YXJ0IHdvcmsgd29ya2luZyBvbiB0aGlzIGNoZWF0IHNoZWV0LCBjbGljayB0aGUgJnF1b3Q7Q2xpY2sgdG8gQmVnaW4mcXVvdDsgYnV0dG9uIGJlbG93LiAKLQotTGV0JmFwb3M7cyBnZXQgc3RhcnRlZCEKLSAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICA8L2ludHJvPgotICAgPGl0ZW0gdGl0bGU9IlNldHVwIHRoZSBFbnZpcm9ubWVudCIgZGlhbG9nPSJmYWxzZSIgc2tpcD0idHJ1ZSIgaHJlZj0iL29yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZG9jLnVzZXIvZG9jL2h0bWwvYXNjMTIyOTcwMDM0MzM1Mi5odG1sIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIFlvdXIgZW52aXJvbm1lbnQgbXVzdCBiZSBzZXQgdXAgYmVmb3JlIHlvdSBjYW4gcGVyZm9ybSB0aGUgc3RlcHMgaW4gdGhpcyBjaGVhdCBzaGVldC4gCi0KLUNyZWF0ZSBhIGRhdGFiYXNlIHByb2ZpbGUgYW5kIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLgotCi1JZiB5b3UgYWxyZWFkeSBoYXZlIChhbmQgYXJlIGNvbm5lY3RlZCB0bykgYSBkYXRhYmFzZSBjb25uZWN0aW9uLCB5b3UgIG1heSBza2lwIHRoaXMgc3RlcCBieSBjbGlja2luZyB0aGUgJnF1b3Q7Q2xpY2sgdG8gU2tpcCZxdW90OyBidXR0b24uCi0KLVRoZSBEYXRhYmFzZSBDb25uZWN0aW9uIGRpYWxvZyBhdXRvbWF0aWNhbGx5IGFwcGVhcnMgd2hlbiB5b3UgY2xpY2sgdGhlICZxdW90O0NsaWNrIHRvIFBlcmZvcm0mcXVvdDsgYnV0dG9uLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxjb21tYW5kIHNlcmlhbGl6YXRpb249Im9yZy5lY2xpcHNlLmRhdGF0b29scy5zcWx0b29scy5zcWxlZGl0b3IuYXR0YWNoUHJvZmlsZUFjdGlvbiIgY29uZmlybT0iZmFsc2UiPgotICAgICAgPC9jb21tYW5kPgotICAgPC9pdGVtPgotICAgPGl0ZW0gdGl0bGU9IkNyZWF0ZSBhIEpQQSBQcm9qZWN0IiBkaWFsb2c9ImZhbHNlIiBza2lwPSJ0cnVlIiBocmVmPSIvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSI+Ci0gICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICBVc2UgdGhlIE5ldyBQcm9qZWN0IFdpemFyZCB0byBjcmVhdGUgYSBKUEEgcHJvamVjdC4gCi1TZWxlY3QgPGI+RmlsZS0mZ3Q7TmV3LSZndDtQcm9qZWN0Li4uPC9iPiBhbmQgY2hvb3NlIDxiPkpQQS0mZ3Q7SlBBIFByb2plY3Q8L2I+IGluIHRoZSBsaXN0LiAKLQotQ29tcGxldGUgZWFjaCBwYWdlIG9mIHRoZSB3aXphcmQgdG8gY3JlYXRlIGEgbmV3IEpQQSBwcm9qZWN0LgotCi1UaGUgJnF1b3Q7TmV3IEpQQSBQcm9qZWN0JnF1b3Q7IHdpemFyZCBpcyBhdXRvbWF0aWNhbGx5IGRpc3BsYXllZCB3aGVuIHlvdSBjbGljayB0aGUgJnF1b3Q7Q2xpY2sgdG8gUGVyZm9ybSZxdW90OyBidXR0b24uCi0KLUlmIHlvdSBhbHJlYWR5IGhhdmUgYSBKUEEgcHJvamVjdCwgeW91ICBtYXkgc2tpcCB0aGlzIHN0ZXAgYnkgY2xpY2tpbmcgdGhlICZxdW90O0NsaWNrIHRvIFNraXAmcXVvdDsgYnV0dG9uLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS53aXphcmRzLk9wZW5Qcm9qZWN0V2l6YXJkQWN0aW9uIiBwbHVnaW5JZD0ib3JnLmVjbGlwc2UuamR0LnVpIiBjb25maXJtPSJmYWxzZSI+Ci0gICAgICA8L2FjdGlvbj4KLSAgIDwvaXRlbT4KLSAgIDxpdGVtIHRpdGxlPSJPcGVuIHRoZSBKUEEgRGV2ZWxvcG1lbnQgUGVyc3BlY3RpdmUiIGRpYWxvZz0iZmFsc2UiIHNraXA9InRydWUiIGhyZWY9Ii9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSI+Ci0gICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICBXaGVuIHdvcmtpbmcgd2l0aCBKUEEgIHBlcnNpc3RlbmNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgUGVyc2lzdGVuY2UgcGVyc3BlY3RpdmUuIElmIHlvdSBhbHJlYWR5IGhhdmUgdGhlIFBlcnNpc3RlbmNlIHBlcnNwZWN0aXZlIGFjdGl2ZSwgeW91IG1heSBza2lwIHRoaXMgc3RlcCBieSBjbGlja2luZyB0aGUgJnF1b3Q7Q2xpY2sgdG8gU2tpcCZxdW90OyBidXR0b24uIAotSWYgbm90LCBzZWxlY3QgPGI+V2luZG93LSZndDtPcGVuIFBlcnNwZWN0aXZlLSZndDtPdGhlcjwvYj4gaW4gdGhlIG1lbnViYXIgYXQgdGhlIHRvcCBvZiB0aGUgd29ya2JlbmNoLiBJbiB0aGUgU2VsZWN0IFBlcnNwZWN0aXZlcyBkaWFsb2csIHNlbGVjdCA8Yj5KUEEgRGV2ZWxvcG1lbnQ8L2I+IGFuZCBjbGljayBPSy4gVGhpcyBzdGVwIGNoYW5nZXMgdGhlIHBlcnNwZWN0aXZlIHRvIHNldCB1cCB0aGUgRWNsaXBzZSB3b3JrYmVuY2ggZm9yIEpQQSBkZXZlbG9wbWVudC4KLVlvdSBjYW4gY2xpY2sgdGhlICZxdW90O0NsaWNrIHRvIFBlcmZvcm0mcXVvdDsgYnV0dG9uIHRvIGhhdmUgdGhlICZxdW90O1BlcnNpc3RlbmNlJnF1b3Q7IHBlcnNwZWN0aXZlIG9wZW5lZCBhdXRvbWF0aWNhbGx5LgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNoZWF0c2hlZXRzLmFjdGlvbnMuT3BlblBlcnNwZWN0aXZlIiBwbHVnaW5JZD0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMiIGNvbmZpcm09ImZhbHNlIiBwYXJhbTE9Im9yZy5lY2xpcHNlLmpwdC51aS5QZXJzaXN0ZW5jZVBlcnNwZWN0aXZlIj4KLSAgICAgIDwvYWN0aW9uPgotICAgPC9pdGVtPgotICAgPGl0ZW0gdGl0bGU9IkNyZWF0ZSBhIEphdmEgQ2xhc3MiIGRpYWxvZz0iZmFsc2UiIHNraXA9ImZhbHNlIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY3JlYXRlIGEgbmV3IEphdmEgY2xhc3MuIEluIHRoZSBtYWluIHRvb2xiYXIgYWdhaW4sIGNsaWNrIG9uIDxiPk5ldyBKYXZhIENsYXNzPC9iPiBidXR0b24gKG9yIHRoZSBsaW5rIGJlbG93KS4KLVRoZSBKYXZhIGVkaXRvciB3aWxsIGF1dG9tYXRpY2FsbHkgb3BlbiBzaG93aW5nIHlvdXIgbmV3IGNsYXNzLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgIDwvaXRlbT4KLSAgIDxpdGVtIHRpdGxlPSJDcmVhdGUgYSBQZXJzaXN0ZW50IEVudGl0eSIgZGlhbG9nPSJmYWxzZSIgc2tpcD0iZmFsc2UiPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgRmluYWxseSB3ZSB3aWxsIG1ha2UgdGhlIEphdmEgY2xhc3MgYSBwZXJzaXN0ZW50IGVudGl0eS4KLUluIHRoZSBKUEEgU3RydWN0dXJlIHZpZXcgc2VsZWN0IHRoZSBKYXZhIGNsYXNzLiAKLUluIHRoZSBKUEEgRGV0YWlscyB2aWV3LCB1c2UgdGhlICZxdW90O01hcCBBcyZxdW90OyBmaWVsZCB0byBzZWxlY3QgPGI+RW50aXR5PC9iPi4gRGFsaSBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIEBFbnRpdHkgYW5ub3RhdGlvbiB0byB0aGUgY2xhc3MgaW4gdGhlIEphdmEgZWRpdG9yLiAKLVVzZSB0aGUgVGFibGUsIENhdGFsb2csIGFuZCBTY2hlbWEgZmllbGRzIHRvIGFzc29jaWF0ZSB0aGUgZW50aXR5IHdpdGggYSBzcGVjaWZpYyB0YWJsZSBpbiB0aGUgZGF0YWJhc2UuCi0gICAgICA8L2Rlc2NyaXB0aW9uPgotICAgPC9pdGVtPgotICAgPGl0ZW0gdGl0bGU9IkFkZCBGaWVsZHMgdG8gdGhlIENsYXNzIiBkaWFsb2c9ImZhbHNlIiBza2lwPSJ0cnVlIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIE5vdyB5b3Ugd2lsbCBhZGQgc29tZSBmaWVsZHMgdG8gdGhlIGVudGl0eSB0byBtYXAgdG8gcm93cyBpbiB0aGUgZGF0YWJhc2UgdGFibGUuICAgCi0KLUlmIHlvdXIgcGVyc2lzdGVudCBlbnRpdHkgYWxyZWFkeSBoYXMgZmllbGRzIHRvIG1hcCwgeW91IG1heSBza2lwIHRoaXMgc3RlcCBieSBjbGlja2luZyB0aGUgJnF1b3Q7Q2xpY2sgdG8gU2tpcCZxdW90OyBidXR0b24uIElmIG5vdCwgdXNlIHRoZSBKYXZhIGVkaXRvciB0byBhZGQgZmllbGRzIHRvIHRoZSBlbnRpdHkuCi0gICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgPGFjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuY2hlYXRzaGVldHMuYWN0aW9ucy5PcGVuUGVyc3BlY3RpdmUiIHBsdWdpbklkPSJvcmcuZWNsaXBzZS51aS5jaGVhdHNoZWV0cyIgY29uZmlybT0iZmFsc2UiIHBhcmFtMT0ib3JnLmVjbGlwc2UuZGFsaS51aS5QZXJzaXN0ZW5jZVBlcnNwZWN0aXZlIj4KLSAgICAgIDwvYWN0aW9uPgotICAgPC9pdGVtPgotICAgPGl0ZW0gdGl0bGU9IkNyZWF0ZSB0aGUgTWFwcGluZyIgZGlhbG9nPSJmYWxzZSIgc2tpcD0iZmFsc2UiIGhyZWY9Ii9vcmcuZWNsaXBzZS5kYWxpLmRvYy51c2VyL3JlZl9lbnRpdHlfcGFnZS5odG0iPgotICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgTm93IHlvdSBhcmUgcmVhZHkgdG8gbWFwIHRoZSBlbnRpdHkgZmllbGRzIHRvIGNvbHVtbnMgaW4gdGhlIGRhdGFiYXNlIHRhYmxlLiBJbiB0aGUgUGFja2FnZSBFeHBsb3Jlciwgc2VsZWN0IHRoZSBKYXZhIGNsYXNzLiAKLQotSW4gdGhlIEpQQSBTdHJ1Y3R1cmUgdmlldywgZXhwYW5kIHRoZSBwZXJzaXN0ZW50IGVudGl0eSB0byBkaXNwbGF5IHRoZSBmaWVsZHMuIFNlbGVjdCBhIGZpZWxkLiAKLQotVGhlIEpQQSBEZXRhaWxzIHZpZXcgZGlzcGxheXMgdGhlIGluZm9ybWF0aW9uIGZvciB0aGUgZmllbGQuIFVzZSB0aGUgTWFwIEFzIGZpZWxkIHRvIHNlbGVjdCB0aGUgQmFzaWMgbWFwcGluZy4gVXNlIHRoZSBDb2x1bW4gZmllbGQgdG8gc2VsZWN0IGEgY29sdW1uIGZyb20gdGhlIGRhdGFiYXNlIHRhYmxlLgotICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmNoZWF0c2hlZXRzLmFjdGlvbnMuT3BlblBlcnNwZWN0aXZlIiBwbHVnaW5JZD0ib3JnLmVjbGlwc2UudWkuY2hlYXRzaGVldHMiIGNvbmZpcm09ImZhbHNlIiBwYXJhbTE9Im9yZy5lY2xpcHNlLmRhbGkudWkuUGVyc2lzdGVuY2VQZXJzcGVjdGl2ZSI+Ci0gICAgICA8L2FjdGlvbj4KLSAgIDwvaXRlbT4KLSAgIDxpdGVtIHRpdGxlPSJGaW5pc2giIGRpYWxvZz0iZmFsc2UiIHNraXA9ImZhbHNlIj4KLSAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgIENvbmdyYXR1bGF0aW9ucyEgWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IG1hcHBlZCB0aGUgZmllbGRzIGZyb20gYSBKYXZhIHBlcnNpc3RlbnQgZW50aXR5IHRvIGEgY29sdW1uIGluIGEgZGF0YWJhc2UgdGFibGUuCi0gICAgICA8L2Rlc2NyaXB0aW9uPgotICAgPC9pdGVtPgotPC9jaGVhdHNoZWV0PgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRfbWFwcGluZy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdF9tYXBwaW5nLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1MjE2ZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdF9tYXBwaW5nLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkJESkZJIiBuYW1lPSJCQUJCREpGSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj4KLTxoMT5VbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyMSIgbmFtZT0ic3RocmVmMjEiPjwvYT48YSBpZD0ic3RocmVmMjIiIG5hbWU9InN0aHJlZjIyIj48L2E+VGhlIERhbGkgT1IgKG9iamVjdC1yZWxhdGlvbmFsKSBNYXBwaW5nIFRvb2wgYWxsb3dzIHlvdSB0byBkZXNjcmliZSBob3cgeW91ciBlbnRpdHkgb2JqZWN0cyA8c3BhbiBjbGFzcz0iaXRhbGljIj5tYXA8L3NwYW4+IHRvIHRoZSBkYXRhIHNvdXJjZSAob3Igb3RoZXIgb2JqZWN0cykuIFRoaXMgYXBwcm9hY2ggaXNvbGF0ZXMgcGVyc2lzdGVuY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2JqZWN0IG1vZGVsJm5kYXNoO2RldmVsb3BlcnMgYXJlIGZyZWUgdG8gZGVzaWduIHRoZWlyIGlkZWFsIG9iamVjdCBtb2RlbCwgYW5kIERCQXMgYXJlIGZyZWUgdG8gZGVzaWduIHRoZWlyIGlkZWFsIHNjaGVtYS48L3A+Ci08cD5UaGVzZSBtYXBwaW5ncyB0cmFuc2Zvcm0gYW4gb2JqZWN0IGRhdGEgbWVtYmVyIHR5cGUgdG8gYSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uYWwgZGF0YWJhc2UgZGF0YSBzb3VyY2UgcmVwcmVzZW50YXRpb24uIFRoZXNlIE9SIG1hcHBpbmdzIGNhbiBhbHNvIHRyYW5zZm9ybSBvYmplY3QgZGF0YSBtZW1iZXJzIHRoYXQgcmVmZXJlbmNlIG90aGVyIGRvbWFpbiBvYmplY3RzIHN0b3JlZCBpbiBvdGhlciB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIGFuZCBhcmUgcmVsYXRlZCB0aHJvdWdoIGZvcmVpZ24ga2V5cy48L3A+Ci08cD5Zb3UgY2FuIHVzZSB0aGVzZSBtYXBwaW5ncyB0byBtYXAgc2ltcGxlIGRhdGEgdHlwZXMgaW5jbHVkaW5nIHByaW1pdGl2ZXMgKHN1Y2ggYXMgPGNvZGU+aW50PC9jb2RlPiksIEpESyBjbGFzc2VzIChzdWNoIGFzIDxjb2RlPlN0cmluZzwvY29kZT4pLCBhbmQgbGFyZ2Ugb2JqZWN0IChMT0IpIHZhbHVlcy4gWW91IGNhbiBhbHNvIHVzZSB0aGVtIHRvIHRyYW5zZm9ybSBvYmplY3QgZGF0YSBtZW1iZXJzIHRoYXQgcmVmZXJlbmNlIG90aGVyIGRvbWFpbiBvYmplY3RzIGJ5IHdheSBvZiBhc3NvY2lhdGlvbiB3aGVyZSBkYXRhIHNvdXJjZSByZXByZXNlbnRhdGlvbnMgcmVxdWlyZSBvYmplY3QgaWRlbnRpdHkgbWFpbnRlbmFuY2UgKHN1Y2ggYXMgc2VxdWVuY2luZyBhbmQgYmFjayByZWZlcmVuY2VzKSBhbmQgcG9zc2VzcyB2YXJpb3VzIHR5cGVzIG9mIG11bHRpcGxpY2l0eSBhbmQgbmF2aWdhYmlsaXR5LiBUaGUgYXBwcm9wcmlhdGUgbWFwcGluZyBjbGFzcyBpcyBjaG9zZW4gcHJpbWFyaWx5IGJ5IHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgcmVsYXRpb25zaGlwLjwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRfcGVyc2lzdGVuY2UuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2MyMmNiLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0X3BlcnNpc3RlbmNlLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VW5kZXJzdGFuZGluZyBKYXZhIHBlcnNpc3RlbmNlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJVbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2UiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJDQUhJQyIgbmFtZT0iQkFCQ0FISUMiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+Ci08aDE+VW5kZXJzdGFuZGluZyBKYXZhIHBlcnNpc3RlbmNlPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYxOSIgbmFtZT0ic3RocmVmMTkiPjwvYT48c3BhbiBjbGFzcz0iaXRhbGljIj5QZXJzaXN0ZW5jZTwvc3Bhbj4gcmVmZXJzIHRvIHRoZSBhYmlsaXR5IHRvIHN0b3JlIG9iamVjdHMgaW4gYSBkYXRhYmFzZSBhbmQgdXNlIHRob3NlIG9iamVjdHMgd2l0aCB0cmFuc2FjdGlvbmFsIGludGVncml0eS4gSW4gYSBKMkVFIGFwcGxpY2F0aW9uLCBkYXRhIGlzIHR5cGljYWxseSBzdG9yZWQgYW5kIHBlcnNpc3RlZCBpbiB0aGUgZGF0YSB0aWVyLCBpbiBhIHJlbGF0aW9uYWwgZGF0YWJhc2UuPC9wPgotPHA+PGEgaWQ9InN0aHJlZjIwIiBuYW1lPSJzdGhyZWYyMCI+PC9hPjxzcGFuIGNsYXNzPSJpdGFsaWMiPkVudGl0eSBiZWFuczwvc3Bhbj4gYXJlIGVudGVycHJpc2UgYmVhbnMgdGhhdCBjb250YWluIHBlcnNpc3RlbnQgZGF0YSBhbmQgdGhhdCBjYW4gYmUgc2F2ZWQgaW4gdmFyaW91cyBwZXJzaXN0ZW50IGRhdGEgc3RvcmVzLiBUaGUgZW50aXR5IGJlYW5zIHJlcHJlc2VudCBkYXRhIGZyb20gYSBkYXRhYmFzZTsgZWFjaCBlbnRpdHkgYmVhbiBjYXJyaWVzIGl0cyBvd24gaWRlbnRpdHkuIEVudGl0eSBiZWFucyBjYW4gYmUgZGVwbG95ZWQgdXNpbmcgPHNwYW4gY2xhc3M9Iml0YWxpYyI+YXBwbGljYXRpb24tbWFuYWdlZCBwZXJzaXN0ZW5jZTwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9Iml0YWxpYyI+Y29udGFpbmVyLW1hbmFnZWQgcGVyc2lzdGVuY2U8L3NwYW4+LjwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0cy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdHMuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQ3NWEzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0cy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNvbmNlcHRzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSIgQ29uY2VwdHMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJzdGhyZWYxOCIgbmFtZT0ic3RocmVmMTgiPjwvYT48L3A+Ci08aDE+Q29uY2VwdHM8L2gxPgotPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFuIG92ZXJ2aWV3IG9mIGNvbmNlcHRzIHlvdSBzaG91bGQgYmUgZmFtaWxpYXIgd2l0aCB3aGVuIHVzaW5nIERhbGkgdG8gY3JlYXRlIG1hcHBpbmdzIGZvciBKYXZhIHBlcnNpc3RlbnQgZW50aXRpZXMuPC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0iY29uY2VwdF9wZXJzaXN0ZW5jZS5odG0jQkFCQ0FISUMiPlVuZGVyc3RhbmRpbmcgSmF2YSBwZXJzaXN0ZW5jZTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSNCQUJCREpGSSI+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0iY29uY2VwdHMwMDEuaHRtI0JBQkJHRkpHIj5VbmRlcnN0YW5kaW5nIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEk8L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08cD5JbiBhZGRpdGlvbiB0byB0aGVzZSBzZWN0aW9ucywgeW91IHNob3VsZCByZXZpZXcgdGhlIGZvbGxvd2luZyByZXNvdXJjZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb246PC9wPgotPHVsPgotPGxpPgotPHA+RWNsaXBzZSBEYWxpIHByb2plY3Q6IDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvZGFsaSI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9kYWxpPC9hPjwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+RWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gcHJvamVjdDogPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29sczwvYT48L2NvZGU+PC9wPgotPC9saT4KLTxsaT4KLTxwPkpTUiAyMjAgRUpCIDMuMCBzcGVjaWZpY2F0aW9uOiA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LmpjcC5vcmcvZW4vanNyL2RldGFpbD9pZD0yMjAiPmh0dHA6Ly93d3cuamNwLm9yZy9lbi9qc3IvZGV0YWlsP2lkPTIyMDwvYT48L2NvZGU+PC9wPgotPC9saT4KLTxsaT4KLTxwPkVjbGlwc2VMaW5rIHByb2plY3Q6IDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZWxpbmsiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZWxpbms8L2E+PC9jb2RlPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0czAwMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdHMwMDEuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2UyNWMwLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0czAwMS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iVW5kZXJzdGFuZGluZyBFSkIgMy4wIEphdmEgUGVyc2lzdGVuY2UgQVBJIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCQkdGSkciIG5hbWU9IkJBQkJHRkpHIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPgotPGgxPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvaDE+Ci08cD5UaGUgSmF2YSAyIEVudGVycHJpc2UgRWRpdGlvbihKMkVFKSBFbnRlcnByaXNlIEphdmFCZWFucyAoRUpCKSBhcmUgYSBjb21wb25lbnQgYXJjaGl0ZWN0dXJlIHRoYXQgeW91IHVzZSB0byBkZXZlbG9wIGFuZCBkZXBsb3kgb2JqZWN0LW9yaWVudGVkLCBkaXN0cmlidXRlZCwgZW50ZXJwcmlzZS1zY2FsZSBhcHBsaWNhdGlvbnMuIEFuIGFwcGxpY2F0aW9uIHdyaXR0ZW4gYWNjb3JkaW5nIHRvIHRoZSBFbnRlcnByaXNlIEphdmFCZWFucyBhcmNoaXRlY3R1cmUgaXMgc2NhbGFibGUsIHRyYW5zYWN0aW9uYWwsIGFuZCBzZWN1cmUuPC9wPgotPHA+VGhlIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkgaW1wcm92ZXMgdGhlIEVKQiBhcmNoaXRlY3R1cmUgYnkgcmVkdWNpbmcgaXRzIGNvbXBsZXhpdHkgdGhyb3VnaCB0aGUgdXNlIG9mIG1ldGFkYXRhIChhbm5vdGF0aW9ucykgYW5kIHNwZWNpZnlpbmcgcHJvZ3JhbW1hdGljIGRlZmF1bHRzIG9mIHRoYXQgbWV0YWRhdGEuPC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRzMDAyLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb25jZXB0czAwMi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2UzY2QuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRzMDAyLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJUaGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSERIQUdJSCIgbmFtZT0iQ0hESEFHSUgiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPjxhIGlkPSJzdGhyZWYyMyIgbmFtZT0ic3RocmVmMjMiPjwvYT5UaGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L2gxPgotPHA+VGhlIEpQQSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoZSB1c2Ugb2YgYSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUgZm9yIGRlcGxveW1lbnQuIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBkYXRhYmFzZSBhbmQgZW50aXR5IG1hbmFnZXIgb3B0aW9ucywgYW5kIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmUgcGVyc2lzdGVuY2UgdW5pdC4gVG8gZW5hYmxlIHlvdSB0byBlYXNpbHkgZWRpdCB0aGlzIGluZm9ybWF0aW9uLCBEYWxpIHByb3ZpZGVzIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIEVjbGlwc2UgWE1MIEVkaXRvciB0byBjcmVhdGUgYW5kIG1haW50YWluIHRoaXMgaW5mb3JtYXRpb24uIFNlZSA8YSBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jQ0lIREFKSUQiPiJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZWFsc28iPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlQWxzbyBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPlRpcDo8L3A+Ci1UbyB3b3JrIHdpdGggbXVsdGlwbGUgcGVyc2lzdGVuY2UgdW5pdHMsIGNvbW1lbnQgb3V0IGFsbCBidXQgb25lIHBlcnNpc3RlbmNlIHVuaXQgaW4gPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPi48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyIgLS0+PC9kaXY+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jQ0lIREFKSUQiPk1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSNDSUhIRUpDSiI+Q3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3Q8L2E+Ci08cD4mbmJzcDs8L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdHMwMDMuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbmNlcHRzMDAzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1NDQ3MS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvY29uY2VwdHMwMDMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5UaGUgb3JtLnhtbCBmaWxlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJUaGUgb3JtLnhtbCBmaWxlIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0hEQklKQUMiIG5hbWU9IkNIREJJSkFDIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT48YSBpZD0ic3RocmVmMjQiIG5hbWU9InN0aHJlZjI0Ij48L2E+VGhlIG9ybS54bWwgZmlsZTwvaDE+Ci08cD5BbHRob3VnaCB0aGUgSlBBIHNwZWNpZmljYXRpb24gZW1waGFzaXplcyB0aGUgdXNlIG9mIGFubm90YXRpb25zIHRvIHNwZWNpZnkgcGVyc2lzdGVuY2UsIHlvdSBjYW4gYWxzbyB1c2UgdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUgdG8gc3RvcmUgdGhpcyBtZXRhZGF0YS4gRGFsaSBlbmFibGVzIHlvdSB0byBjcmVhdGUgYSBzdHViIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUgZm9yIGEgSlBBIHByb2plY3QgdXNpbmcgdGhlIDxhIGhyZWY9InJlZmVyZW5jZTAwMi5odG0jQ0lBSUpDQ0UiPk1hcHBpbmcgRmlsZSBXaXphcmQ8L2E+LiBTZWUgPGEgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSNDSUhER0RDRCI+Ik1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoZSBtZXRhZGF0YSBtdXN0IG1hdGNoIHRoZSBYU0Qgc3BlY2lmaWNhdGlvbiBvZiB5b3VyIHNlbGVjdGVkIEpQQSBpbXBsZW1lbnRhdGlvbi48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTxwPkRhbGkgcHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBjb25maWd1cmluZyBYTUwgbWFwcGluZyBmaWxlcyB0aHJvdWdoIHRoZSA8YSBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtI0NBQ0dER0hDIj5KUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCk8L2E+IHRoYXQgaXMgbmVhcmx5IGlkZW50aWNhbCB0byB0aGUgYW5ub3RhdGlvbi1iYXNlZCBjb25maWd1cmF0aW9uIGluIHRoZSBKYXZhIHNvdXJjZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIHVzZSB0aGUgRWNsaXBzZSBYTUwgRWRpdG9yIHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4gdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGluIDxjb2RlPm9ybS54bWw8L2NvZGU+LjwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFuYWdlX29ybS5odG0jQ0lIREdEQ0QiPk1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGU8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9hPjxiciAvPgotPHA+Jm5ic3A7PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbnRleHRzLnhtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9jb250ZXh0cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjJkYWYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2NvbnRleHRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI/PgotPGNvbnRleHRzPgotCTxjb250ZXh0IGlkPSJlbnRpdHlfYWNjZXNzVHlwZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGhvdyB0aGUgdmFyaWFibGUgaXMgYWNjZXNzZWQ6IFByb3BlcnR5IChkZWZhdWx0KSBvciBGaWVsZC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X25hbWUiPgotCQk8ZGVzY3JpcHRpb24+VGhlIG5hbWUgb2YgdGhpcyBlbnRpdHkuIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBuYW1lIGlzIHVzZWQgYXMgdGhlIGVudGl0eSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJlbnRpdHlfdGFibGUiPgotCQk8ZGVzY3JpcHRpb24+VGhlIGRhdGFiYXNlIHRhYmxlIGFzc2lnbmVkIHRvIHRoaXMgZW50aXR5LiBCeSBkZWZhdWx0LCB0aGUgY2xhc3MgbmFtZSBpcyB1c2VkIGFzIHRoZSBkYXRhYmFzZSB0YWJsZSBuYW1lLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X2F0dHJpYnV0ZU92ZXJyaWRlcyI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGEgcHJvcGVydHkgb3IgZmllbGQgdG8gYmUgb3ZlcnJpZGRlbiAoZnJvbSB0aGUgZGVmYXVsdCBtYXBwaW5ncykuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzcyIgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBwZXJzaXN0ZW5jZSIgaHJlZj0iY29uY2VwdF9wZXJzaXN0ZW5jZS5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImVudGl0eV9hdHRyaWJ1dGVPdmVycmlkZXNOYW1lIj4KLQkJPGRlc2NyaXB0aW9uPk5hbWUgb2YgdGhlIGRhdGFiYXNlIGNvbHVtbi48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X2F0dHJpYnV0ZU92ZXJyaWRlc0NvbHVtbiI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgZGF0YWJhc2UgY29sdW1uIHRoYXQgb3ZlcnJpZGVzIGEgcHJvcGVydHkgb3IgZmllbGQuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzcyIgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBwZXJzaXN0ZW5jZSIgaHJlZj0iY29uY2VwdF9wZXJzaXN0ZW5jZS5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImVudGl0eV9hdHRyaWJ1dGVPdmVycmlkZXNJbnNlcnRhYmxlIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZmllcyBpZiB0aGUgY29sdW1uIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBTUUwgSU5TRVJUIHN0YXRlbWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzcyIgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBwZXJzaXN0ZW5jZSIgaHJlZj0iY29uY2VwdF9wZXJzaXN0ZW5jZS5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImVudGl0eV9hdHRyaWJ1dGVPdmVycmlkZXNVcGRhdGFibGUiPgotCQk8ZGVzY3JpcHRpb24+U3BlY2lmaWVzIGlmIHRoZSBjb2x1bW4gaXMgYWx3YXlzIGluY2x1ZGVkIGluIFNRTCBVUERBVEUgc3RhdGVtZW50cy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19tYXBBcyI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGhvdyB0aGlzIGF0dHJpYnV0ZSBtYXBzIHRvIHRoZSBkYXRhYmFzZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzIiBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX2NvbHVtbiI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgZGF0YWJhc2UgY29sdW1uIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfY29sdW1uVGFibGUiPgotCQk8ZGVzY3JpcHRpb24+TmFtZSBvZiB0aGUgZGF0YWJhc2UgdGFibGUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgY29sdW1uLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfY29sdW1uSW5zZXJ0YWJsZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiBpcyBhbHdheXMgaW5jbHVkZWQgaW4gU1FMIElOU0VSVCBzdGF0ZW1lbnRzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfY29sdW1uVXBkYXRhYmxlIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZmllcyBpZiB0aGUgY29sdW1uIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBTUUwgVVBEQVRFIHN0YXRlbWVudHMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19mZXRjaFR5cGUiPgotCQk8ZGVzY3JpcHRpb24+RGVmaW5lcyBob3cgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2U6IEVhZ2VyIChkZWZhdWx0KSBvciBMYXp5PC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19vcHRpb25hbCI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZpZXMgaWYgdGhpcyBmaWVsZCBpcyBjYW4gYmUgbnVsbC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzIiBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX2dlbmVyYXRlZFZhbHVlU3RyYXRlZ3kiPgotCQk8ZGVzY3JpcHRpb24+RGV0ZXJtaW5lcyBob3cgdGhlIHByaW1hcnkga2V5IGlzIGdlbmVyYXRlZDogQXV0byAoZGVmYXVsdCksIFNlcXVlbmNlLCBJZGVudGl0eSwgb3IgVGFibGUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19nZW5lcmF0ZWRWYWx1ZUdlbmVyYXRvck5hbWUiPgotCQk8ZGVzY3JpcHRpb24+VW5pcXVlIG5hbWUgb2YgdGhlIGdlbmVyYXRvci48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzIiBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX3RhcmdldEVudGl0eSI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgZW50aXR5IHRvIHdoaWNoIHRoaXMgYXR0cmlidXRlIGlzIG1hcHBlZC4gPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19jYXNjYWRlVHlwZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHdoaWNoIG9wZXJhdGlvbnMgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaG91dCB0aGUgZW50aXR5OiBBbGwsIFBlcnNpc3QsIE1lcmdlLCBvciBNb3ZlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfbWFwcGVkQnkiPgotCQk8ZGVzY3JpcHRpb24+VGhlIGZpZWxkIGluIHRoZSBkYXRhYmFzZSB0YWJsZSB0aGF0IG93bnMgdGhlIHJlbGF0aW9uc2hpcC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzIiBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX2pvaW5Db2x1bW5OYW1lIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBjb2x1bW4gdGhhdCBjb250YWlucyB0aGUgZm9yZWlnbiBrZXkgcmVmZXJlbmNlIGZvciB0aGUgZW50aXR5IGFzc29jaWF0aW9uLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfam9pblJlZmVyZW5jZWRDb2x1bW4iPgotCQk8ZGVzY3JpcHRpb24+TmFtZSBvZiB0aGUgam9pbiB0YWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBmb3JlaWduIGtleSBjb2x1bW4uPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19lbWJlZGRlZEF0dHJpYnV0ZU92ZXJyaWRlcyI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICBtYXBwaW5nIG9mIGFuIGVudGl0eeKAmXMgYXR0cmlidXRlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfZW1iZWRkZWRBdHRyaWJ1dGVPdmVycmlkZXNDb2x1bW4iPgotCQk8ZGVzY3JpcHRpb24+VGhlIGRhdGFiYXNlIGNvbHVtbiB0aGF0IGlzIGJlaW5nIG1hcHBlZCB0byB0aGUgZW50aXR54oCZcyBhdHRyaWJ1dGUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X21hcEFzIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdGhlIHR5cGUgb2YgcGVyc2lzdGVudCBkb21haW4gb2JqZWN0IGZvciB0aGUgSmF2YSBjbGFzczogUGVyc2lzdGVudCwgRW1iZWRkZWQsIG9yIE1hcHBlZCBTdXBlcmNsYXNzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJlbnRpdHlfaW5oZXJpdGFuY2VTdHJhdGVneSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGhvdyBhbiBlbnRpdHkgbWF5IGluaGVyaXQgcHJvcGVydGllcyBmcm9tIG90aGVyIGVudGl0aWVzOiBTaW5nbGUgdGFibGUsIE9uZSB0YWJsZSBwZXIgY2xhc3MsIG9yIEpvaW5lZCB0YWJsZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTcGVjaWZ5aW5nIGluaGVyaXRhbmNlIiBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X2luaGVyaXRhbmNlRGlzY3JpbWluYXRvckNvbHVtbiI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZGlzY3JpbWluYXRvciBjb2x1bW4gd2hlbiB1c2luZyBhIFNpbmdsZSBvciBKb2luZWQgaW5oZXJpdGFuY2Ugc3RyYXRlZ3kuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTcGVjaWZ5aW5nIGluaGVyaXRhbmNlIiBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X2luaGVyaXRhbmNlRGlzY3JpbWluYXRvclR5cGUiPgotCQk8ZGVzY3JpcHRpb24+VXNlIHRoaXMgZmllbGQgdG8gc2V0IHRoZSBkaXNjcmltaW5hdG9yIHR5cGUgdG8gQ0hBUiBvciBJTlRFR0VSIChpbnN0ZWFkIG9mIGl0cyBkZWZhdWx0OiBTdHJpbmcpLiBUaGUgZGlzY3JpbWluYXRvciB2YWx1ZSBtdXN0IGNvbmZvcm0gdG8gdGhpcyB0eXBlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iU3BlY2lmeWluZyBpbmhlcml0YW5jZSIgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImVudGl0eV9pbmhlcml0YW5jZURpc2NyaW1pbmF0b3JWYWx1ZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHRoZSBkaXNjcmltaW5hdG9yIHZhbHVlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBhbiBlbnRpdHkgaW4gdGhpcyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuIFRoZSB2YWx1ZSBtdXN0IGNvbmZvcm0gdG8gdGhlIHNwZWNpZmllZCBkaXNjcmltaW5hdG9yIHR5cGUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTcGVjaWZ5aW5nIGluaGVyaXRhbmNlIiBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19vcmRlckJ5Ij4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdGhlIGRlZmF1bHQgb3JkZXIgZm9yIG9iamVjdHMgcmV0dXJuZWQgZnJvbSBhIHF1ZXJ5LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBFbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfam9pblRhYmxlTmFtZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHRoZSAgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGFibGUgdGhhdCBkZWZpbmVzIHRoZSBmb3JlaWduIGtleSBmb3IgYSBtYW55LXRvLW1hbnkgb3IgYSB1bmlkaXJlY3Rpb25hbCBvbmUtdG8tbWFueSBhc3NvY2lhdGlvbi4gWW91IGNhbiBjb25maWd1cmUgdGhlIGpvaW4gdGFibGUgd2l0aCBhIHNwZWNpZmljIGNhdGFsb2cgb3Igc2NoZW1hLCBjb25maWd1cmUgb25lIG9yIG1vcmUgam9pbiB0YWJsZSBjb2x1bW5zIHdpdGggYSB1bmlxdWUgY29uc3RyYWludCwgYW5kIHVzZSBtdWx0aXBsZSBqb2luIGNvbHVtbnMgcGVyIGVudGl0eS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX2pvaW5UYWJsZUpvaW5Db2x1bW5zIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgIHR3byBvciBtb3JlIGpvaW4gY29sdW1ucyAodGhhdCBpcywgYSBjb21wb3NpdGUgcHJpbWFyeSBrZXkpLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfam9pblRhYmxlSW52ZXJzZUpvaW5Db2x1bW5zIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdGhlIGpvaW4gY29sdW1uIG9uIHRoZSBvd25lZCAob3IgaW52ZXJzZSBzaWRlKSBvZiB0aGUgYXNzb2NpYXRpb246IHRoZSBvd25lZCBlbnRpdHkncyBwcmltYXJ5IGtleSBjb2x1bW4uIDwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9InByb3BlcnRpZXNfamF2YVBlcnNpc3RlbmNlIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGUgSmF2YSBQZXJzaXN0ZW5jZSBvcHRpb25zIG9uIHRoZSBQcm9wZXJ0aWVzIHBhZ2UgdG8gc2VsZWN0IHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIHVzZSB3aXRoIHRoZSBwcm9qZWN0LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iUHJvamVjdCBwcm9wZXJ0aWVzIiBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzIi8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJyZWZfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJwcm9wZXJ0aWVzX2phdmFQZXJzaXN0ZW5jZUNvbm5lY3Rpb24iPgotCQk8ZGVzY3JpcHRpb24+VGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gdXNlZCB0byBtYXAgdGhlIHBlcnNpc3RlbnQgZW50aXRpZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJQcm9qZWN0IHByb3BlcnRpZXMiIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMiLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0icHJvcGVydGllc19qYXZhUGVyc2lzdGVuY2VTY2hlbWEiPgotCQk8ZGVzY3JpcHRpb24+VGhlIGRhdGFiYXNlIHNjaGVtYSB1c2VkIHRvIG1hcCB0aGUgcGVyc2lzdGVudCBlbnRpdGllcy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IlByb2plY3QgcHJvcGVydGllcyIgaHJlZj0icmVmX3Byb2plY3RfcHJvcGVydGllcyIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfYWRkUGVyc2lzdGVuY2UiPgotCQk8ZGVzY3JpcHRpb24+VXNlIHRoZSBBZGQgUGVyc2lzdGVuY2UgZGlhbG9nIHRvIGRlZmluZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiB1c2UgdG8gc3RvcmUgdGhlIHBlcnNpc3RlbmNlIGVudGl0aWVzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIiBocmVmPSJyZWZfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJwZXJzaXN0ZW5jZU91dGxpbmUiPgotCQk8ZGVzY3JpcHRpb24+VGhlIEpQQSBTdHJ1Y3R1cmUgdmlldyBkaXNwbGF5cyBhbiBvdXRsaW5lIG9mIHRoZSBzdHJ1Y3R1cmUgKGl0cyBhdHRyaWJ1dGVzIGFuZCBtYXBwaW5ncykgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBvciBvcGVuZWQgaW4gdGhlIGVkaXRvci48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBTdHJ1Y3R1cmUgdmlldyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImRpYWxvZ19nZW5lcmF0ZUVudGl0aWVzIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGUgR2VuZXJhdGUgRW50aXRpZXMgZGlhbG9nIHRvIGNyZWF0ZSBKYXZhIHBlcnNpc3RlbnQgZW50aXRpZXMgYmFzZWQgb24geW91ciBkYXRhYmFzZSB0YWJsZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzIiBocmVmPSJ0YXNrX2dlbmVyYXRlX2VudGl0aWVzLmh0bS5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iUHJvamVjdCBwcm9wZXJ0aWVzIiBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfZ2VuZXJhdGVFbnRpdGllc19zb3VyY2UiPgotCQk8ZGVzY3JpcHRpb24+VGhlIHByb2plY3QgZm9sZGVyIG5hbWUgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIEphdmEgcGVyc2lzdGVudCBlbnRpdGllcy4gQ2xpY2sgQnJvd3NlIHRvIHNlbGVjdCBhbiBleGlzdGluZyBmb2xkZXIuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzIiBocmVmPSJ0YXNrX2dlbmVyYXRlX2VudGl0aWVzLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2dlbmVyYXRlRW50aXRpZXNfcGFja2FnZSI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgcGFja2FnZSBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUgSmF2YSBwZXJzaXN0ZW50IGVudGl0aWVzLCBvciBjbGljayBCcm93c2UgdG8gc2VsZWN0IGFuIGV4aXN0aW5nIHBhY2thZ2UuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzIiBocmVmPSJ0YXNrX2dlbmVyYXRlX2VudGl0aWVzLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2dlbmVyYXRlRW50aXRpZXNfdGFibGVzIj4KLQkJPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgdGFibGVzIGZyb20gd2hpY2ggdG8gY3JlYXRlIEphdmEgcGVyc2lzdGVudCBlbnRpdGllcy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXMiIGhyZWY9InRhc2tfZ2VuZXJhdGVfZW50aXRpZXMuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iUHJvamVjdCBwcm9wZXJ0aWVzIiBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfYWRkSmF2YVBlcnNpc3RlbmNlIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBkZWZpbmUgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gdXNlZCB0byBzdG9yZSB0aGUgcGVyc2lzdGVuY2UgZW50aXRpZXMgYW5kIHRvIGNyZWF0ZSB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJBZGQgUGVyc2lzdGVuY2UgZGlhbG9nIiBocmVmPSJyZWZfYWRkX3BlcnNpc3RlbmNlLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBwcm9qZWN0IiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZSIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImRpYWxvZ19uZXdKUEFQcm9qZWN0Ij4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBkZWZpbmUgdGhlIG5ldyBKUEEgcHJvamVjdCBuYW1lLCBpdHMgbG9jYXRpb24sIHRhcmdldCBydW50aW1lLCBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9Ik5ldyBKUEEgUHJvamVjdCBwYWdlIiBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0Lmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJOZXcgSlBBIFByb2plY3Qgd2l6YXJkIiBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZCIgLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBwcm9qZWN0IiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZSIgLz4KLQkJPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCIgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2FkZEphdmFQZXJzaXN0ZW5jZV9kYXRhYmFzZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhlc2UgZmllbGRzIHRvIGRlZmluZSB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiB1c2VkIHRvIHN0b3JlIHRoZSBwZXJzaXN0ZW50IGVudGl0aWVzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkIFBlcnNpc3RlbmNlIGRpYWxvZyIgaHJlZj0icmVmX2FkZF9wZXJzaXN0ZW5jZS5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgcHJvamVjdCIgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfYWRkSmF2YVBlcnNpc3RlbmNlX2NsYXNzcGF0aCI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBvcHRpb24gdG8gYWRkIGxpYnJhcmllcyBvciBKQVJzIHRoYXQgY29udGFpbiB0aGUgSmF2YSBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkgYW5kIGVudGl0aWVzIHRvIHRoZSBwcm9qZWN04oCZcyBKYXZhIEJ1aWxkIFBhdGguPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJBZGQgUGVyc2lzdGVuY2UgZGlhbG9nIiBocmVmPSJyZWZfYWRkX3BlcnNpc3RlbmNlLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBwcm9qZWN0IiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImRpYWxvZ19hZGRKYXZhUGVyc2lzdGVuY2VfcGFja2FnaW5nIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGVzZSBmaWVsZHMgdG8gY3JlYXRlIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZS4gU2VsZWN0IHRoZSBwZXJzaXN0ZW5jZSB2ZXJzaW9uLCB0aGUgbmFtZSBvZiB0aGUgSlBBIHByb3ZpZGVyLCBhbmQgYSB1bmlxdWUgbmFtZSB0byBpZGVudGlmeSB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkFkZCBQZXJzaXN0ZW5jZSBkaWFsb2ciIGhyZWY9InJlZl9hZGRfcGVyc2lzdGVuY2UuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0id2l6YXJkX2dlbmVyYXRlRERMX29wdGlvbnMgIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIHBhZ2UgdG8gc2VsZWN0IHdoaWNoIHNjcmlwdCBvcHRpb25zIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBzY3JpcHQuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIHRhYmxlcyAoRERMKSBmcm9tIGVudGl0aWVzICIgaHJlZj0idGFza19nZW5lcmF0ZV9kZGwuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9Ik9wdGlvbnMgcGFnZSAiIGhyZWY9InJlZl9vcHRpb25zLmh0bSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9IndpemFyZF9nZW5lcmF0ZURETF9vYmplY3RzICI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBwYWdlIHRvIHNlbGVjdCB3aGljaCBlbGVtZW50cyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgc2NyaXB0LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iR2VuZXJhdGluZyB0YWJsZXMgKERETCkgZnJvbSBlbnRpdGllcyAiIGhyZWY9InRhc2tfZ2VuZXJhdGVfZGRsLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJPYmplY3RzIHBhZ2UgIiBocmVmPSJyZWZfb2JqZWN0cy5odG0iIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJ3aXphcmRfZ2VuZXJhdGVERExfc2F2ZSAiPgotCQk8ZGVzY3JpcHRpb24+VXNlIHRoaXMgcGFnZSB0byBzZWxlY3QgdGhlIGZpbGVuYW1lIGFuZCBsb2NhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHNjcmlwdC4gWW91IGNhbiBhbHNvIHByZXZpZXcgdGhlIHNjcmlwdCBhbmQgc3BlY2lmeSB0byBydW4gb3IgY29udGludWUgZWRpdGluZyB0aGUgc2NyaXB0IGFmdGVyIGdlbmVyYXRpb24uPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIHRhYmxlcyAoRERMKSBmcm9tIGVudGl0aWVzICIgaHJlZj0idGFza19nZW5lcmF0ZV9kZGwuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9IlNhdmUgYW5kIFJ1biBEREwgcGFnZSAiIGhyZWY9InJlZl9zYXZlX2FuZF9ydW4uaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0id2l6YXJkX2dlbmVyYXRlRERMX3N1bW1hcnkgIj4KLQkJPGRlc2NyaXB0aW9uPlRoaXMgcGFnZSBzaG93cyB0aGUgc2V0dGluZ3MgdGhhdCB5b3Ugc2VsZWN0ZWQgZm9yIHRoZSBnZW5lcmF0ZWQgRERMLiBUbyBjaGFuZ2UgYW55IG9wdGlvbiBjbGljayAiQmFjayIgb3IgY2xpY2sgIkZpbmlzaCIgdG8gY29udGludWUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0aW5nIHRhYmxlcyAoRERMKSBmcm9tIGVudGl0aWVzICIgaHJlZj0idGFza19nZW5lcmF0ZV9kZGwuaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ190YWJsZUdlbmVyYXRvck5hbWUiPgotCQk8ZGVzY3JpcHRpb24+VGhlIG5hbWUgb2YgdGhlIHRhYmxlIHNlcXVlbmNlIGdlbmVyYXRvci4gVGhpcyBuYW1lIGlzIGdsb2JhbCB0byB0byB0aGUgcGVyc2lzdGVuY2UgdW5pdCAoYWNyb3NzIGFsbCBnZW5lcmF0b3IgdHlwZXMpLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ190YWJsZUdlbmVyYXRvclRhYmxlIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkYXRhYmFzZSB0YWJsZSB0aGF0IHN0b3JlcyB0aGUgZ2VuZXJhdGVkIElEIHZhbHVlcy4gPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX3RhYmxlR2VuZXJhdG9yUHJpbWFyeUtleUNvbHVtbiI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgZGF0YWJhc2UgY29sdW1uIG9mIHRoZSBnZW5lcmF0b3IgdGFibGUgdGhhdCBzdG9yZXMgdGhlIGdlbmVyYXRlZCBJRCB2YWx1ZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX3RhYmxlR2VuZXJhdG9yVmFsdWVDb2x1bW4iPgotCQk8ZGVzY3JpcHRpb24+VGhlIG5hbWUgZm9yIHRoZSBjb2x1bW4gdGhhdCBzdG9yZXMgdGhlIGdlbmVyYXRlZCBJRCB2YWx1ZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX3RhYmxlR2VuZXJhdG9yUHJpbWFyeUtleUNvbHVtblZhbHVlIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkYXRhYmFzZSBjb2x1bW4gb2YgdGhlIGdlbmVyYXRvciB0YWJsZSB0aGF0IGRlZmluZXMgdGhlIHByaW1hcnkga2V5IHZhbHVlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2RhdGFiYXNlQXV0aG9yaXphdGlvbiI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdG8gY29ubmVjdCAobG9nIGluKSB0byBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gdXNlIHdpdGggeW91ciBKYXZhIHBlcnNpc3RlbnQgZW50aXRpZXMuIAotCQlZb3UgbXVzdCBoYXZlIGEgZGVmaW5lZCBkYXRhYmFzZSBjb25uZWN0aW9uIChhbmQgYmUgY29ubmVjdGVkKSB0byBhZGQgcGVyc2lzdGVuY2UuIDwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkIHBlcnNpc3RlbmNlIHRvIGEgSmF2YSBwcm9qZWN0IiBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZV9wcm9qZWN0Lmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ190ZW1wb3JhbCI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGlmIHRoZSBtYXBwZWQgZmllbGQgY29udGFpbnMgYSBEYXRlIChqYXZhLnNxbC5EYXRlKSwgVGltZSAoamF2YS5zcWwuVGltZSksIG9yIFRpbWVzdGFtcCAoamF2YS5zcWwuVGltZXN0YW1wKSB2YWx1ZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfcHJpbWFyeUtleUdlbmVyYXRpb24iPgotCQk8ZGVzY3JpcHRpb24+RGVmaW5lIGhvdyB0aGUgcHJpbWFyeSBrZXkgaXMgZ2VuZXJhdGVkPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJQcmltYXJ5IEtleSBHZW5lcmF0aW9uIGluZm9ybWF0aW9uIiBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ190YWJsZUdlbmVyYXRvciI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHRvIHVzZSBhIHNwZWNpZmljIGRhdGFiYXNlIHRhYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBwcmltYXJ5IGtleS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IlByaW1hcnkgS2V5IEdlbmVyYXRpb24gaW5mb3JtYXRpb24iIGhyZWY9InJlZl9wcmltYXJ5X2tleS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5IiBocmVmPSJ0YXNrX21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJtYXBwaW5nX3NlcXVlbmNlR2VuZXJhdG9yIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdG8gdXNlIGEgc3BlY2lmaWMgc2VxdWVuY2UgZm9yIGdlbmVyYXRpbmcgdGhlIHByaW1hcnkga2V5LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiIgaHJlZj0icmVmX3ByaW1hcnlfa2V5Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfc2VxdWVuY2VHZW5lcmF0b3JOYW1lIj4KLQkJPGRlc2NyaXB0aW9uPk5hbWUgb2YgdGhlIHNlcXVlbmNlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiIgaHJlZj0icmVmX3ByaW1hcnlfa2V5Lmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im1hcHBpbmdfc2VxdWVuY2VHZW5lcmF0b3JTZXF1ZW5jZSI+Ci0JCTxkZXNjcmlwdGlvbj4gPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJQcmltYXJ5IEtleSBHZW5lcmF0aW9uIGluZm9ybWF0aW9uIiBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19sb2IiPgotCQk8ZGVzY3JpcHRpb24+U3BlY2lmeSBpZiB0aGUgZmllbGQgaXMgbWFwcGVkIHRvIGphdmEuc3FsLkNsb2Igb3IgamF2YS5zcWwuQmxvYi48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkdlbmVyYWwgaW5mb3JtYXRpb24iIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibWFwcGluZ19lbnVtZXJhdGVkIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgaG93IHRvIHBlcnNpc3QgZW51bWVyYXRlZCBjb25zdHJhaW50cyBpZiB0aGUgU3RyaW5nIHZhbHVlIHN1aXRzIHlvdXIgYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzIG9yIHRvIG1hdGNoIGFuIGV4aXN0aW5nIGRhdGFiYXNlIHNjaGVtYS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkdlbmVyYWwgaW5mb3JtYXRpb24iIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2VkaXRJbnZlcnNlSm9pbkNvbHVtbiI+Ci0JCTxkZXNjcmlwdGlvbj4uPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJNYXBwaW5nIGFuIGVudGl0eSIgaHJlZj0idGFza19tYXBwaW5nLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZW50aXR5X2NhdGFsb2ciPgotCQk8ZGVzY3JpcHRpb24+VGhlIGRhdGFiYXNlIGNhdGFsb2cgdGhhdCBjb250YWlucyB0aGUgVGFibGUuIFRoaXMgZmllbGQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0cyBpbiB0aGUgb3JtLnhtbCBmaWxlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJlbnRpdHlfc2NoZW1hIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkYXRhYmFzZSBzY2hlbWEgdGhhdCBjb250YWlucyB0aGUgVGFibGUuIFRoaXMgZmllbGQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0cyBpbiB0aGUgb3JtLnhtbCBmaWxlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IlVuZGVyc3RhbmRpbmcgcGVyc2lzdGVuY2UiIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcm1fcGFja2FnZSI+Ci0JCTxkZXNjcmlwdGlvbj5UaGUgSmF2YSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIHBlcnNpc3RlbnQgZW50aXRpZXMgdG8gd2hpY2ggdGhlIG9ybS54bWwgZmlsZSBhcHBsaWVzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcm1fc2NoZW1hIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkYXRhYmFzZSBzY2hlbWEgdG8gdXNlIGFzIHRoZSBkZWZhdWx0IGZvciBhbGwgZW50aXRpZXMgbWFuYWdlZCBieSB0aGlzIHBlcnNpc3RlbmNlIHVuaXQuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9vcm0uaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIERldGFpbHMiIGhyZWY9InJlZl9kZXRhaWxzX29ybS5odG0iLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9Im9ybV9jYXRhbG9nIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkYXRhYmFzZSBjYXRhbG9nIHRvIHVzZSBhcyB0aGUgZGVmYXVsdCBmb3IgYWxsIGVudGl0aWVzIG1hbmFnZWQgYnkgdGhpcyBwZXJzaXN0ZW5jZSB1bml0LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcm1fYWNjZXNzIj4KLQkJPGRlc2NyaXB0aW9uPlRoZSBkZWZhdWx0IGFjY2VzcyBtZXRob2QgZm9yIHZhcmlhYmxlcyBpbiB0aGlzIHByb2plY3Q6IFByb3BlcnR5IG9yIEZpZWxkLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcm1fY2FzY2FkZSI+Ci0JCTxkZXNjcmlwdGlvbj5BZGRzIGNhc2NhZGUtcGVyc2lzdCB0byB0aGUgc2V0IG9mIGNhc2NhZGUgb3B0aW9ucyBpbiBlbnRpdHkgcmVsYXRpb25zaGlwcyBvZiB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX29ybS5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJKUEEgRGV0YWlscyIgaHJlZj0icmVmX2RldGFpbHNfb3JtLmh0bSIvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ib3JtX3htbCI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZpZXMgdGhhdCB0aGUgSmF2YSBjbGFzc2VzIGluIHRoaXMgcGVyc2lzdGVuY2UgdW5pdCBhcmUgZnVsbHkgc3BlY2lmaWVkIGJ5IHRoZWlyIG1ldGFkYXRhLiBBbnkgYW5ub3RhdGlvbnMgd2lsbCBiZSBpZ25vcmVkLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfSlBBUGxhdGZvcm0iPgotCQk8ZGVzY3JpcHRpb24+U3BlY2lmeSB0aGUgdmVuZG9yLXNwZWNpZmljIEpQQSBpbXBsZW1lbnRhdGlvbi5EZWZhdWx0IGlzIEdlbmVyaWMuLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIEZhY2V0IHBhZ2UiIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfY3JlYXRlT1JNIj4KLQkJPGRlc2NyaXB0aW9uPkNyZWF0ZSBhbiBpbml0aWFsIG9ybS54bWwgZmlsZS4gVXNlIHRoaXMgZmlsZSB0byBzcGVjaWZ5IHByb2plY3QgYW5kIHBlcnNpc3RlbmNlIHVuaXQgZGVmYXVsdHMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9vcm0uaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iSlBBIEZhY2V0IHBhZ2UiIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtIi8+Ci0JPC9jb250ZXh0PgotCi0JPGNvbnRleHQgaWQ9ImNhY2hpbmdfZGVmYXVsdFR5cGUiPgotCQk8ZGVzY3JpcHRpb24+U2VsZWN0IHRoZSBkZWZhdWx0IGNhY2hpbmcgc3RyYXRlZ3kgZm9yIHRoZSBwcm9qZWN0LiBUaGUgZGVmYXVsdCBpcyBXZWFrIHdpdGggU29mdCBTdWJjYWNoZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJjYWNoaW5nX2RlZmF1bHRTaXplIj4KLQkJPGRlc2NyaXB0aW9uPlNlbGVjdCB0aGUgZGVmYXVsdCBzaXplIG9mIHRoZSBjYWNoZS4gVGhlIGRlZmF1bHQgaXMgMTAwIGl0ZW1zLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0icGVyc2lzdGVuY2UueG1sIGVkaXRvciIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbF9lZGl0b3IiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImNhY2hpbmdfZGVmYXVsdFNoYXJlZCI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IGlmIGNhY2hlZCBpbnN0YW5jZXMgc2hvdWxkIGJlIGluIHRoZSBzaGFyZWQgY2FjaGUgb3IgaW4gYSBjbGllbnQgaXNvbGF0ZWQgY2FjaGUuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ibG9nZ2luZ19sZXZlbCI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZpZXMgdGhlIGFtb3VudCBhbmQgZGV0YWlsIG9mIGxvZyBvdXRwdXQgYnkgc2VsZWN0aW5nIHRoZSBsb2cgbGV2ZWwuIERlZmF1bHQgaXMgSW5mbyBsZXZlbC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJsb2dnaW5nX3RpbWVTdGFtcCI+Ci0JCTxkZXNjcmlwdGlvbj5Db250cm9sIHdoZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyBsb2dnZWQgaW4gZWFjaCBsb2cgZW50cnkuIERlZmF1bHQgaXMgVHJ1ZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJsb2dnaW5nX3RocmVhZCI+Ci0JCTxkZXNjcmlwdGlvbj5Db250cm9sIHdoZXRoZXIgYSB0aHJlYWQgaWRlbnRpZmllciBpcyBsb2dnZWQgaW4gZWFjaCBsb2cgZW50cnkuIERlZmF1bHQgaXMgVHJ1ZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJsb2dnaW5nX3Nlc3Npb24iPgotCQk8ZGVzY3JpcHRpb24+Q29udHJvbCB3aGV0aGVyIGFuIEVjbGlwc2VMaW5rIHNlc3Npb24gaWRlbnRpZmllciBpcyBsb2dnZWQgaW4gZWFjaCBsb2cgZW50cnkuIERlZmF1bHQgaXMgVHJ1ZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJsb2dnaW5nX2V4Y2VwdGlvbnMiPgotCQk8ZGVzY3JpcHRpb24+Q29udHJvbCB3aGV0aGVyIHRoZSBleGNlcHRpb25zIHRocm93biBmcm9tIHdpdGhpbiB0aGUgY29kZSBhcmUgbG9nZ2VkIHByaW9yIHRvIHJldHVybmluZyB0aGUgZXhjZXB0aW9uIHRvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLiBFbnN1cmVzIHRoYXQgYWxsIGV4Y2VwdGlvbnMgYXJlIGxvZ2dlZCBhbmQgbm90IG1hc2tlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZS4uIERlZmF1bHQgaXMgRmFsc2UuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ib3B0aW9uc19zZXNzaW9uTmFtZSI+Ci0JCTxkZXNjcmlwdGlvbj5TcGVjaWZ5IHRoZSBuYW1lIGJ5IHdoaWNoIHRoZSBFY2xpcHNlTGluayBzZXNzaW9uIGlzIHN0b3JlZCBpbiB0aGUgc3RhdGljIHNlc3Npb24gbWFuYWdlci48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcHRpb25zX3Nlc3Npb25zWG1sIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgcGVyc2lzdGVuY2UgaW5mb3JtYXRpb24gbG9hZGVkIGZyb20gdGhlIEVjbGlwc2VMaW5rIHNlc3Npb24gY29uZmlndXJhdGlvbiBmaWxlLiBZb3UgY2FuIHVzZSB0aGlzIG9wdGlvbiBhcyBhbiBhbHRlcm5hdGl2ZSB0byBhbm5vdGF0aW9ucyBhbmQgZGVwbG95bWVudCBYTUwuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0ib3B0aW9uc190YXJnZXREYXRhYmFzZSI+Ci0JCTxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJvcHRpb25zX3RhcmdldFNlcnZlciI+Ci0JCTxkZXNjcmlwdGlvbj4gPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX25ld0pQQVByb2plY3RKYXZhIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBpbmNsdWRlIGV4aXN0aW5nIEphdmEgc291cmNlIGZpbGVzIGluIHRoaXMgcHJvamVjdC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkphdmEgcGFnZSIgaHJlZj0icmVmX2phdmFfcGFnZS5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTmV3IEpQQSBQcm9qZWN0IHdpemFyZCIgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdF93aXphcmQiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3QiIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9ImRpYWxvZ19uZXdKUEFQcm9qZWN0RmFjZXQiPgotCQk8ZGVzY3JpcHRpb24+VXNlIHRoaXMgZGlhbG9nIHRvIHNwZWNpZnkgeW91ciB2ZW5kZXItc3BlY2lmaWMgcGxhdGZvcm0sIEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5LCBhbmQgZGF0YWJhc2UgY29ubmVjdGlvbi48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkpQQSBGYWNldCBwYWdlIiBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJOZXcgSlBBIFByb2plY3Qgd2l6YXJkIiBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZCIgLz4KLQkJPHRvcGljIGxhYmVsPSJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCIgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2VudGl0eUNsYXNzUGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSBwYWNrYWdlLCBjbGFzcyBuYW1lLCBhbmQgaW5oZXJpdGFuY2UgcHJvcGVydGllcyBvZiB0aGUgZW50aXR5IHRvIGNyZWF0ZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkVudGl0eSBDbGFzcyBwYWdlIiBocmVmPSJyZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJOZXcgSlBBIEVudGl0eSB3aXphcmQiIGhyZWY9InJlZl9jcmVhdGVfanBhX2VudGl0eV93aXphcmQuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9IkNyZWF0aW5nIGEgbmV3IEpQQSBlbnRpdHkiIGhyZWY9InRhc2tfY3JlYXRlX2pwYV9lbnRpdHkuaHRtIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2VudGl0eVByb3BlcnRpZXNQYWdlIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBzcGVjaWZ5IHRoZSBlbnRpdHkgbmFtZSwgYXNzb2NpYXRlZCB0YWJsZSwgYW5kIG1hcHBlZCBmaWVsZHMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJFbnRpdHkgUHJvcGVydGllcyBwYWdlIiBocmVmPSJyZWZfRW50aXR5UHJvcGVydGllc1BhZ2UuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9Ik5ldyBKUEEgRW50aXR5IHdpemFyZCIgaHJlZj0icmVmX2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBuZXcgSlBBIGVudGl0eSIgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0iIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfc2VsZWN0VGFibGVzUGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSB0aGUgZGF0YWJhc2UgdGFibGVzIGZyb20gd2hpY2ggdG8gZ2VuZXJhdGUgZW50aXRpZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTZWxlY3QgVGFibGVzIHBhZ2UiIGhyZWY9InJlZl9zZWxlY3RUYWJsZXMuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9IkdlbmVyYXRlIEN1c3RvbSBFbnRpdGllcyB3aXphcmQiIGhyZWY9InJlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0iIC8+Ci0JPC9jb250ZXh0PgkKLQk8Y29udGV4dCBpZD0iZGlhbG9nX3RhYmxlQXNzb2NpYXRpb25zUGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gY3JlYXRlIG9yIGVkaXQgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGRhdGFiYXNlIHRhYmxlIGFuZCBlbnRpdHkuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJUYWJsZSBBc3NvY2lhdGlvbnMgcGFnZSIgaHJlZj0icmVmX3RhYmxlQXNzb2NpYXRpb25zLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0ZSBDdXN0b20gRW50aXRpZXMgd2l6YXJkIiBocmVmPSJyZWZfY3JlYXRlX2N1c3RvbV9lbnRpdGllc193aXphcmQuaHRtIiAvPgotCTwvY29udGV4dD4JCi0JPGNvbnRleHQgaWQ9ImRpYWxvZ19jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbiI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSB0aGUgdGFibGUgbWFwcGluZyBhbmQgZG9tYWluIGNsYXNzIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkIGVudGl0eS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkN1c3RvbWl6ZSBEZWZhdWx0IEVudGl0eSBHZW5lcmF0aW9uIHBhZ2UiIGhyZWY9InJlZl9jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbi5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iR2VuZXJhdGUgQ3VzdG9tIEVudGl0aWVzIHdpemFyZCIgaHJlZj0icmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSIgLz4KLQk8L2NvbnRleHQ+CQotCTxjb250ZXh0IGlkPSJkaWFsb2dfY3VzdG9taXplSW5kaXZpZHVhbEVudGl0aWVzIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBzcGVjaWZ5IHRoZSB0YWJsZSBtYXBwaW5nIGFuZCBkb21haW4gY2xhc3MgaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWQgZW50aXR5LjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iQ3VzdG9taXplIEluZGl2aWR1YWwgRW50aXRpZXMgcGFnZSIgaHJlZj0icmVmX2N1c3RvbWl6SW5kaXZpZHVhbEVudGl0aWVzLmh0bSIgLz4KLQkJPHRvcGljIGxhYmVsPSJHZW5lcmF0ZSBDdXN0b20gRW50aXRpZXMgd2l6YXJkIiBocmVmPSJyZWZfY3JlYXRlX2N1c3RvbV9lbnRpdGllc193aXphcmQuaHRtIiAvPgotCTwvY29udGV4dD4JCi0KLQk8Y29udGV4dCBpZD0iZGlhbG9nX2Fzc29jaWF0aW9uVGFibGVzUGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSB0aGUgYXNzb2NpYXRpb24gdGFibGVzIGZvciBhbiBlbnRpdHkuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJBc3NvY2lhdGlvbiBUYWJsZXMgcGFnZSIgaHJlZj0icmVmX2Fzc29jaWF0aW9uX3RhYmxlcy5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iQ3JlYXRlIE5ldyBBc3NvY2lhdGlvbiB3aXphcmQiIGhyZWY9InJlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0iIC8+Ci0JPC9jb250ZXh0PgkKLQk8Y29udGV4dCBpZD0iZGlhbG9nX2pvaW5Db2x1bW5zUGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSB0aGUgam9pbiBjb2x1bW5zIG9mIGFuIGFzc29jaWF0aW9uIHRhYmxlLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iSm9pbiBDb2x1bW5zIHBhZ2UiIGhyZWY9InJlZl9qb2luX2NvbHVtbnMuaHRtIiAvPgotCQk8dG9waWMgbGFiZWw9IkNyZWF0ZSBOZXcgQXNzb2NpYXRpb24gd2l6YXJkIiBocmVmPSJyZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtIiAvPgotCTwvY29udGV4dD4JCi0JPGNvbnRleHQgaWQ9ImRpYWxvZ19hc3NvY2lhdGlvbkNhcmRpbmFsaXR5UGFnZSI+Ci0JCTxkZXNjcmlwdGlvbj5Vc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSBjYXJkaW5hbGl0eSBvZiBhbiBhc3NvY2lhdGlvbiB0YWJsZS48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkFzc29jaWF0aW9uIENhcmRpbmFsaXR5IHBhZ2UiIGhyZWY9InJlZl9hc3NvY2lhdGlvbl9jYXJkaW5hbGl0eS5odG0iIC8+Ci0JCTx0b3BpYyBsYWJlbD0iQ3JlYXRlIE5ldyBBc3NvY2lhdGlvbiB3aXphcmQiIGhyZWY9InJlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0iIC8+Ci0JPC9jb250ZXh0PgkKLQk8Y29udGV4dCBpZD0iZGlhbG9nX3NlbGVjdENhc2NhZGUiPgotCQk8ZGVzY3JpcHRpb24+U3BlY2lmeSB3aGljaCBvcGVyYXRpb25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIGFzc29jaWF0aW9uOiBBbGwsIFBlcnNpc3QsIE1lcmdlLCBSZW1vdmUsIG9yIFJlZnJlc2guPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTZWxlY3QgQ2FzY2FkZSBwYWdlIiBocmVmPSJyZWZfc2VsZWN0X2Nhc2NhZGVfZGlhbG9nLmh0bSIvPgotCQk8dG9waWMgbGFiZWw9IkpQQSBEZXRhaWxzIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtIi8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFwcGluZyBhbiBlbnRpdHkiIGhyZWY9InRhc2tfbWFwcGluZy5odG0iLz4KLQkJPHRvcGljIGxhYmVsPSJVbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzIiBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtIi8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJwZXJzaXN0ZW5jZV9nZW5lcmFsIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdGhlIGdlbmVyYWwgcGVyc2lzdGVuY2Ugb3B0aW9ucy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkdlbmVyYWwgcGFnZSIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX2dlbmVyYWwiIC8+Ci0JCTx0b3BpYyBsYWJlbD0icGVyc2lzdGVuY2UueG1sIGVkaXRvciIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbF9lZGl0b3IiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9InBlcnNpc3RlbmNlX2Nvbm5lY3Rpb24iPgotCQk8ZGVzY3JpcHRpb24+U3BlY2lmeSB0aGUgZGF0YSBzb3VyY2Ugb3IgSkRCQyBjb25uZWN0aW9uIHByb3BlcnRpZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJDb25uZWN0aW9uIHBhZ2UiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9jb25uZWN0aW9uIiAvPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJwZXJzaXN0ZW5jZV9jdXN0b21pemF0aW9uIj4KLQkJPGRlc2NyaXB0aW9uPlNwZWNpZnkgdGhlIGRlZmF1bHQgb3IgZW50aXR5IHNwZWNpZmljIEVjbGlwc2VMaW5rIGN1c3RvbWl6YXRpb24gYW5kIHZhbGlkYXRpb24gcHJvcGVydGllcy48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IkN1c3RvbWl6YXRpb24gcGFnZSIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX2Nvbm5lY3Rpb24iIC8+Ci0JCTx0b3BpYyBsYWJlbD0icGVyc2lzdGVuY2UueG1sIGVkaXRvciIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbF9lZGl0b3IiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZSIgLz4KLQk8L2NvbnRleHQ+Ci0JPGNvbnRleHQgaWQ9InBlcnNpc3RlbmNlX2NhY2hpbmciPgotCQk8ZGVzY3JpcHRpb24+Q29uZmlndXJlIHRoZSBzZXNzaW9uIG9yIGVudGl0eSBzcGVjaWZpYyBFY2xpcHNlTGluayBjYWNoaW5nIHByb3BlcnRpZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJDYWNoaW5nIHBhZ2UiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9jYWNoaW5nIiAvPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJwZXJzaXN0ZW5jZV9sb2dnaW5nIj4KLQkJPGRlc2NyaXB0aW9uPkNvbmZpZ3VyZSB0aGUgRWNsaXBzZUxpbmsgbG9nZ2luZyBwcm9wZXJ0aWVzLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iTG9nZ2luZyBwYWdlIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbG9nZ2luZyIgLz4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0icGVyc2lzdGVuY2Vfb3B0aW9ucyI+Ci0JCTxkZXNjcmlwdGlvbj5Db25maWd1cmUgdGhlIEVjbGlwc2VMaW5rIHNlc3Npb24gYW5kIG1pc2NlbGxhbm91cyBvcHRpb25zLjwvZGVzY3JpcHRpb24+Ci0JCTx0b3BpYyBsYWJlbD0iT3B0aW9ucyBwYWdlIiBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3B0aW9ucyIgLz4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0icGVyc2lzdGVuY2Vfc2NoZW1hR2VuZXJhdGlvbiI+Ci0JCTxkZXNjcmlwdGlvbj5Db25maWd1cmUgdGhlIHNjaGVtYSBnZW5lcmF0aW9uIHByb3BlcnRpZXMuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJTY2hlbWEgR2VuZXJhdGlvbiBwYWdlIiBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfc2NoZW1hR2VuZXJhdGlvbiIgLz4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlIiAvPgotCTwvY29udGV4dD4KLQk8Y29udGV4dCBpZD0icGVyc2lzdGVuY2VfcHJvcGVydGllcyI+Ci0JCTxkZXNjcmlwdGlvbj5Db25maWd1cmUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBmb3IgdGhlIHBlcnNpc3RlbmNlIHVuaXQuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJQcm9wZXJ0aWVzIHBhZ2UiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wZXJ0aWVzIiAvPgotCQk8dG9waWMgbGFiZWw9InBlcnNpc3RlbmNlLnhtbCBlZGl0b3IiIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV94bWxfZWRpdG9yIiAvPgotCQk8dG9waWMgbGFiZWw9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UiIC8+Ci0JPC9jb250ZXh0PgotCQk8Y29udGV4dCBpZD0icGVyc2lzdGVuY2Vfc291cmNlIj4KLQkJPGRlc2NyaXB0aW9uPkNvbmZpZ3VyZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGZvciB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9IlByb3BlcnRpZXMgcGFnZSIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3BlcnRpZXMiIC8+Ci0JCTx0b3BpYyBsYWJlbD0icGVyc2lzdGVuY2UueG1sIGVkaXRvciIgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbF9lZGl0b3IiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZSIgLz4KLQk8L2NvbnRleHQ+CQotCTxjb250ZXh0IGlkPSJkaWFsb2dfZWNsaXBzZWxpbmtfbWFwcGluZ19maWxlIj4KLQkJPGRlc2NyaXB0aW9uPkNvbmZpZ3VyZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGZvciB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L2Rlc2NyaXB0aW9uPgotCQk8dG9waWMgbGFiZWw9Ik5ldyBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGUgcGFnZSIgaHJlZj0icmVmX2VjbGlwc2VsaW5rX21hcHBpbmdfZmlsZSIgLz4KLQkJPHRvcGljIGxhYmVsPSJwZXJzaXN0ZW5jZS54bWwgZWRpdG9yIiBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sX2VkaXRvciIgLz4KLQkJPHRvcGljIGxhYmVsPSJNYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlIiBocmVmPSJ0YXNrX21hbmFnZV9vcm0iIC8+Ci0JPC9jb250ZXh0PgotCTxjb250ZXh0IGlkPSJkaWFsb2dfY3JlYXRlX25ld19jb252ZXJ0ZXJzIj4KLQkJPGRlc2NyaXB0aW9uPlVzZSB0aGlzIGRpYWxvZyB0byBjcmVhdGUgYSBuZXcgRWNsaXBzZUxpbmsgY29udmV0ZXIuPC9kZXNjcmlwdGlvbj4KLQkJPHRvcGljIGxhYmVsPSJBZGQgQ29udmVydGVyIGRpYWxvZyIgaHJlZj0icmVmX2FkZF9jb252ZXJ0ZXIiIC8+Ci0JCTx0b3BpYyBsYWJlbD0iTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSIgaHJlZj0idGFza19tYW5hZ2Vfb3JtIiAvPgotCTwvY29udGV4dD4KLQkKLQkKLTwvY29udGV4dHM+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZjYxMjcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2Rjb21tb24vY3NzL2JsYWZkb2MuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotQGltcG9ydCAiLi4vLi4vLi4vUFJPRFVDVF9QTFVHSU4vYm9vay5jc3MiOwotCi1zcGFuLmNvbnRyb2wsIHNwYW4uZ3VpLW9iamVjdC1hY3Rpb24sIHAuc3ViaGVhZDIsIHNwYW4uYm9sZCwgcC5ub3RlcDEgewotICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotc3Bhbi5uYW1lLCBwLnRpdGxlaW5maWd1cmUsIHNwYW4uaXRhbGljIHsKLSAgZm9udC1zdHlsZTogaXRhbGljOwotfQotCi1wLnRpdGxlaW5maWd1cmUsIHAuc3ViaGVhZDIgewotICBwYWRkaW5nLXRvcDogMTBweDsKLX0KLQotc3Bhbi5jb2RlIHsKLSAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKLX0KLQotc3Bhbi5jb3B5cmlnaHRsb2dvIHtmb250LXNpemU6IDAuOGVtfQotCi0uZm9vdGVyIHttYXJnaW4tdG9wOiAyZW07Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nLXRvcDoxZW07fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9kY29tbW9uL2h0bWwvY3B5ci5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZGNvbW1vbi9odG1sL2NweXIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODJlYzY3Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9kY29tbW9uL2h0bWwvY3B5ci5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotCi08aGVhZD4KLTwhLS0gIDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7dXJsPS4uLy4uL2xlZ2FsLmh0bSI+IC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBocmVmPSIuLi8uLi9sZWdhbC5odG0iPkxpY2Vuc2UgSW5mb3JtYXRpb248L2E+PC9wPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2dldHRpbmdfc3RhcnRlZC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjZWQ0Yy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+R2V0dGluZyBzdGFydGVkPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSIgR2V0dGluZyBzdGFydGVkIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0ic3RocmVmMiIgbmFtZT0ic3RocmVmMiI+PC9hPjwvcD4KLTxoMT5HZXR0aW5nIHN0YXJ0ZWQ8L2gxPgotPHA+VGhpcyBzZWN0aW9uIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGdldHRpbmcgc3RhcnRlZCB3aXRoIHRoZSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzLjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwMS5odG0jQkFCRUZIQ0QiPlJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQwMDIuaHRtI0JBQklHQ0pBIj5EYWxpIHF1aWNrIHN0YXJ0PC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPHA+Rm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHBsZWFzZSB2aXNpdCB0aGUgRGFsaSBob21lIHBhZ2UgYXQ6PC9wPgotPHA+PGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9kYWxpL21haW4ucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL2RhbGkvbWFpbi5waHA8L2E+PC9jb2RlPi48L3A+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2dldHRpbmdfc3RhcnRlZDAwMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkMDAxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg2MjE5MC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkMDAxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+UmVxdWlyZW1lbnRzIGFuZCBpbnN0YWxsYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCRUZIQ0QiIG5hbWU9IkJBQkVGSENEIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5SZXF1aXJlbWVudHMgYW5kIGluc3RhbGxhdGlvbjxhIGlkPSJzdGhyZWYzIiBuYW1lPSJzdGhyZWYzIj48L2E+PGEgaWQ9InN0aHJlZjQiIG5hbWU9InN0aHJlZjQiPjwvYT48L2gxPgotPHA+QmVmb3JlIGluc3RhbGxpbmcgRGFsaSwgZW5zdXJlIHRoYXQgeW91ciBlbnZpcm9ubWVudCBtZWV0cyB0aGUgZm9sbG93aW5nIDxzcGFuIGNsYXNzPSJpdGFsaWMiPm1pbmltdW08L3NwYW4+IHJlcXVpcmVtZW50czo8L3A+Ci08dWw+Ci08bGk+Ci08cD5FY2xpcHNlIDMuNSAoPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzPC9hPjwvY29kZT4pPC9wPgotPC9saT4KLTxsaT4KLTxwPkphdmEgUnVudGltZSBFbnZpcm9ubWVudCAoSlJFKSAxLjUgKDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLmNvbSI+aHR0cDovL2phdmEuY29tPC9hPjwvY29kZT4pPC9wPgotPC9saT4KLTxsaT4KLTxwPkVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIDMuMSAoPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29sczwvYT48L2NvZGU+KTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5KYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSBmb3IgSmF2YSBFRSA1LiBGb3IgZXhhbXBsZSwgdGhlIEVjbGlwc2VMaW5rIGltcGxlbWVudGF0aW9uIGZvciBKUEEgY2FuIGJlIG9idGFpbmVkIGZyb206IDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZWNsaXBzZWxpbmsvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2VsaW5rLzwvYT48L2NvZGU+PC9wPgotPC9saT4KLTwvdWw+Ci08cD5SZWZlciB0byA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL2RhbGkvZ2V0dGluZ3N0YXJ0ZWRfbWFpbi5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL2RhbGkvZ2V0dGluZ3N0YXJ0ZWRfbWFpbi5odG1sPC9hPjwvY29kZT4gZm9yIGFkZGl0aW9uYWwgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9uLjwvcD4KLTxwPjxhIGlkPSJzdGhyZWY1IiBuYW1lPSJzdGhyZWY1Ij48L2E+RGFsaSBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIFdUUCAzLjEuIE5vIGFkZGl0aW9uYWwgaW5zdGFsbGF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuPC9wPgotPGEgaWQ9InN0aHJlZjYiIG5hbWU9InN0aHJlZjYiPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+QWNjZXNzaWJpbGl0eSBGZWF0dXJlczwvcD4KLTxwPkRhbGkgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMgaW4gRWNsaXBzZSwgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6PC9wPgotPHVsPgotPGxpPgotPHA+TmF2aWdhdGluZyB0aGUgdXNlciBpbnRlcmZhY2UgdXNpbmcgdGhlIGtleWJvYXJkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TcGVjaWZ5aW5nIGdlbmVyYWwgYWNjZXNzaWJpbGl0eSBwcmVmZXJlbmNlcyBmb3IgdGhlIGVkaXRvci48L3A+Ci08L2xpPgotPC91bD4KLTxwPlNlZSA8YSBocmVmPSIuLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9hY2Nlc3NpYmlsaXR5L2FjY2Vzc21haW4uaHRtIj5BY2Nlc3NpYmlsaXR5IEZlYXR1cmVzIGluIEVjbGlwc2U8L2E+IGluIHRoZSA8c3BhbiBjbGFzcz0iaXRhbGljIj5Xb3JrYmVuY2ggVXNlciBHdWlkZTwvc3Bhbj4gZm9yIGRldGFpbHMuPC9wPgotPGEgaWQ9InN0aHJlZjciIG5hbWU9InN0aHJlZjciPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+SGVscCBBY2Nlc3NpYmlsaXR5PC9wPgotPHA+VGhlIGRvY3VtZW50YXRpb24gYW5kIGhlbHAgY29udGFpbnMgbWFya3VwIHRvIGZhY2lsaXRhdGUgYWNjZXNzIGJ5IHRoZSBkaXNhYmxlZCBjb21tdW5pdHkuIFNlZSA8YSBocmVmPSIuLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci90YXNrcy9oZWxwX2FjY2Vzc2liaWxpdHkuaHRtIj5IZWxwIEFjY2Vzc2liaWxpdHk8L2E+IGluIHRoZSA8c3BhbiBjbGFzcz0iaXRhbGljIj5Xb3JrYmVuY2ggVXNlciBHdWlkZTwvc3Bhbj4gZm9yIGRldGFpbHMuPC9wPgotPHA+V2hlbiB1c2luZyB0aGUgaGVscCwgYmUgYXdhcmUgb2YgdGhlIGZvbGxvd2luZzo8L3A+Ci08dWw+Ci08bGk+Ci08cD5TY3JlZW4gcmVhZGVycyBtYXkgbm90IGFsd2F5cyBjb3JyZWN0bHkgcmVhZCB0aGUgY29kZSBleGFtcGxlcyBpbiB0aGlzIGRvY3VtZW50LiBUaGUgY29udmVudGlvbnMgZm9yIHdyaXRpbmcgY29kZSByZXF1aXJlIHRoYXQgY2xvc2luZyBicmFjZXMgc2hvdWxkIGFwcGVhciBvbiBhbiBvdGhlcndpc2UgZW1wdHkgbGluZTsgaG93ZXZlciwgc29tZSBzY3JlZW4gcmVhZGVycyBtYXkgbm90IGFsd2F5cyByZWFkIGEgbGluZSBvZiB0ZXh0IHRoYXQgY29uc2lzdHMgc29sZWx5IG9mIGEgYnJhY2tldCBvciBicmFjZS48L3A+Ci08L2xpPgotPGxpPgotPHA+VGhpcyBkb2N1bWVudGF0aW9uIG1heSBjb250YWluIGxpbmtzIHRvIFdlYiBzaXRlcyBvZiBvdGhlciBjb21wYW5pZXMgb3Igb3JnYW5pemF0aW9ucyB0aGF0IHdlIGRvIG5vdCBjb250cm9sLiBXZSBuZWl0aGVyIGV2YWx1YXRlIG5vciBtYWtlIGFueSByZXByZXNlbnRhdGlvbnMgcmVnYXJkaW5nIHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZXNlIFdlYiBzaXRlcy48L3A+Ci08L2xpPgotPC91bD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9nZXR0aW5nX3N0YXJ0ZWQwMDIuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2dldHRpbmdfc3RhcnRlZDAwMi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDk3OTcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2dldHRpbmdfc3RhcnRlZDAwMi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkRhbGkgcXVpY2sgc3RhcnQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkRhbGkgcXVpY2sgc3RhcnQiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJJR0NKQSIgbmFtZT0iQkFCSUdDSkEiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkRhbGkgcXVpY2sgc3RhcnQ8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjgiIG5hbWU9InN0aHJlZjgiPjwvYT5UaGlzIHNlY3Rpb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gdG8gaGVscCB5b3UgcXVpY2tseSBzdGFydCB1c2luZyBEYWxpIHRvIGNyZWF0ZSByZWxhdGlvbmFsIG1hcHBpbmdzIGJldHdlZW4gSmF2YSBwZXJzaXN0ZW50IGVudGl0aWVzIGFuZCBkYXRhYmFzZSB0YWJsZXMuPC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDAzLmh0bSNCQUJERkhEQSI+Q3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3Q8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwNC5odG0jQkFCRkdEREciPkNyZWF0aW5nIGEgSmF2YSBwZXJzaXN0ZW50IGVudGl0eSB3aXRoIHBlcnNpc3RlbnQgZmllbGRzPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRpcHNfYW5kX3RyaWNrcy5odG0jQ0hESEdIQkYiPlRpcHMgYW5kIHRyaWNrczwvYT48YnIgLz4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkMDAzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9nZXR0aW5nX3N0YXJ0ZWQwMDMuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDlhYTA4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9nZXR0aW5nX3N0YXJ0ZWQwMDMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3Q8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0IiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCREZIREEiIG5hbWU9IkJBQkRGSERBIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5DcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdDwvaDE+Ci08cD48YSBpZD0ic3RocmVmOSIgbmFtZT0ic3RocmVmOSI+PC9hPlRoaXMgcXVpY2sgc3RhcnQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyBKUEEgcHJvamVjdC48L3A+Ci08b2w+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+U2VsZWN0IEZpbGUgJmd0OyBOZXcgJmd0OyBQcm9qZWN0PC9zcGFuPi4gVGhlIFNlbGVjdCBhIFdpemFyZCBkaWFsb2cgYXBwZWFycy48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZWFsc28iPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlQWxzbyBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPlRpcDo8L3A+Ci1Zb3UgY2FuIGFsc28gc2VsZWN0IHRoZSBKUEEgcGVyc3BlY3RpdmUgYW5kIHRoZW4gc2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5GaWxlICZndDsgTmV3ICZndDsgSlBBIFByb2plY3Q8L3NwYW4+LjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGVhbHNvIiAtLT48L2Rpdj4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkpQQSBQcm9qZWN0PC9zcGFuPiBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0Lmh0bSNDQUNCSkFHQyI+TmV3IEpQQSBQcm9qZWN0IHBhZ2U8L2E+IGFwcGVhcnMuPC9wPgotPC9saT4KLTxsaT4KLTxwPkVudGVyIGEgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtYWN0aW9uIj5Qcm9qZWN0IG5hbWU8L3NwYW4+IChzdWNoIGFzIDxjb2RlPlF1aWNrU3RhcnQ8L2NvZGU+KS48L3A+Ci08L2xpPgotPGxpPgotPHA+SWYgbmVlZGVkLCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5UYXJnZXQgUnVudGltZTwvc3Bhbj4gKHN1Y2ggYXMgPGNvZGU+QXBhY2hlIFRvbWNhdDwvY29kZT4pIGFuZCBjb25maWd1cmF0aW9uLCBzdWNoIGFzIDxzcGFuIGNsYXNzPSJib2xkIj5VdGlsaXR5IEpQQSBQcm9qZWN0IHdpdGggSmF2YSA1LjA8L3NwYW4+IGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi4gVGhlIEphdmEgc291cmNlIHBhZ2UgYXBwZWFycy48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoZSBUYXJnZXQgUnVudGltZSBpcyBub3QgcmVxdWlyZWQgZm9yIEphdmEgU0UgZGV2ZWxvcG1lbnQuPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsbm90ZSIgLS0+PC9kaXY+Ci08L2xpPgotPGxpPgotPHA+SWYgeW91IGhhdmUgZXhpc3RpbmcgSmF2YSBzb3VyY2UgZmlsZXMsIGFkZCB0aGVtIHRvIHlvdXIgY2xhc3NwYXRoIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi4gVGhlIDxhIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtI0NBQ0lGRElGIj5KUEEgRmFjZXQgcGFnZTwvYT4gYXBwZWFycy48L3A+Ci08L2xpPgotPGxpPgotPHA+T24gdGhlIEpQQSBGYWNldCBkaWFsb2csIHNlbGVjdCB5b3VyIHZlbmRvci1zcGVjaWZpYyBKUEEgcGxhdGZvcm0gKG9yIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+R2VuZXJpYzwvc3Bhbj4pLCBkYXRhYmFzZSBjb25uZWN0aW9uIChvciBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiksIEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IChzdWNoIGFzIEVjbGlwc2VMaW5rKSwgZGVmaW5lIGhvdyBEYWxpIHNob3VsZCBtYW5hZ2UgcGVyc2lzdGVudCBjbGFzc2VzLCBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+RmluaXNoPC9zcGFuPi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZWFsc28iPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlQWxzbyBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPlRpcDo8L3A+Ci1TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIHRoZSBEZWZhdWx0IFNjaGVtYSBmb3IgQ29ubmVjdGlvbjwvc3Bhbj4gaWYgeW91IHJlcXVpcmUgYSBzY2hlbWEgb3RoZXIgdGhhbiB0aGUgb25lIHRoYXQgRGFsaSBkZXJpdmVzIGZyb20gdGhlIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24sIHdoaWNoIG1heSBiZSBpbmNvcnJlY3QgaW4gc29tZSBjYXNlcy4gVXNpbmcgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IGEgZGV2ZWxvcG1lbnQgdGltZSBzY2hlbWEgZm9yIGRlZmF1bHRzIGFuZCB2YWxpZGF0aW9uLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGVhbHNvIiAtLT48L2Rpdj4KLTwvbGk+Ci08L29sPgotPHA+RWNsaXBzZSBhZGRzIHRoZSBwcm9qZWN0IHRvIHRoZSB3b3JrYmVuY2ggYW5kIG9wZW5zIHRoZSBKUEEgcGVyc3BlY3RpdmUuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTAiIG5hbWU9InN0aHJlZjEwIj48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+SlBBIFByb2plY3QgaW4gUHJvamVjdCBFeHBsb3JlcjwvcD4KLTxpbWcgc3JjPSJpbWcvcXVpY2tzdGFydF9wcm9qZWN0LnBuZyIgYWx0PSJQYWNrYWdlIEV4cGxvcmVyIHNob3dpbmcgdGhlIEpQQSBwcm9qZWN0LiIgdGl0bGU9IlBhY2thZ2UgRXhwbG9yZXIgc2hvd2luZyB0aGUgSlBBIHByb2plY3QuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT4KLTxwPk5vdyB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQgYSBwcm9qZWN0IHdpdGggcGVyc2lzdGVuY2UsIHlvdSBjYW4gY29udGludWUgd2l0aCA8YSBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQwMDQuaHRtI0JBQkZHRERHIj5DcmVhdGluZyBhIEphdmEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aCBwZXJzaXN0ZW50IGZpZWxkczwvYT4uPC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2dldHRpbmdfc3RhcnRlZDAwNC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkMDA0Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyY2I2My4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvZ2V0dGluZ19zdGFydGVkMDA0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSmF2YSBwZXJzaXN0ZW50IGVudGl0eSB3aXRoIHBlcnNpc3RlbnQgZmllbGRzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhIEphdmEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aCBwZXJzaXN0ZW50IGZpZWxkcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkZHRERHIiBuYW1lPSJCQUJGR0RERyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q3JlYXRpbmcgYSBKYXZhIHBlcnNpc3RlbnQgZW50aXR5IHdpdGggcGVyc2lzdGVudCBmaWVsZHM8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjExIiBuYW1lPSJzdGhyZWYxMSI+PC9hPlRoaXMgcXVpY2sgc3RhcnQgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyBwZXJzaXN0ZW50IEphdmEgZW50aXR5LiBXZSB3aWxsIGNyZWF0ZSBhbiBlbnRpdHkgdG8gYXNzb2NpYXRlIHdpdGggYSBkYXRhYmFzZSB0YWJsZS4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgQUREUkVTUyB0YWJsZSB0byB5b3VyIGRhdGFiYXNlLjwvcD4KLTxvbD4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgSlBBIHByb2plY3QgaW4gdGhlIE5hdmlnYXRvciBvciBQcm9qZWN0IEV4cGxvcmVyIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFRoZSBTZWxlY3QgYSBXaXphcmQgZGlhbG9nIGFwcGVhcnMuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+SlBBICZndDsgRW50aXR5PC9zcGFuPiBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSNDSUFGRUlHRiI+RW50aXR5IENsYXNzIHBhZ2U8L2E+IGFwcGVhcnMuPC9wPgotPC9saT4KLTxsaT4KLTxwPkVudGVyIHRoZSBwYWNrYWdlIG5hbWUgKHN1Y2ggYXMgPGNvZGU+cXVpY2tzdGFydC5kZW1vLm1vZGVsPC9jb2RlPiksIHRoZSBjbGFzcyBuYW1lIChzdWNoIGFzIDxjb2RlPkFkZHJlc3M8L2NvZGU+KSBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfRW50aXR5UHJvcGVydGllc1BhZ2UuaHRtI0NJQURFQ0lBIj5FbnRpdHkgUHJvcGVydGllcyBwYWdlPC9hPiBhcHBlYXJzLCB3aGljaCBlbmFibGVzIHlvdSB0byBkZWZpbmUgdGhlIHBlcnNpc3RlbmNlIGZpZWxkcywgd2hpY2ggeW91IHdpbGwgbWFwIHRvIHRoZSBjb2x1bW5zIG9mIGEgZGF0YWJhc2UgdGFibGUuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGlkPSJzdGhyZWYxMiIgbmFtZT0ic3RocmVmMTIiPjwvYT48YSBpZD0ic3RocmVmMTMiIG5hbWU9InN0aHJlZjEzIj48L2E+VXNlIHRoZSBFbnRpdHkgRmllbGRzIGRpYWxvZyAoaW52b2tlZCBieSBjbGlja2luZyA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkPC9zcGFuPikgdG8gYWRkIHBlcnNpc3RlbmNlIGZpZWxkcyB0byB0aGUgQWRkcmVzcyBjbGFzczo8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci1wcml2YXRlIExvbmcgaWQ7Ci1wcml2YXRlIFN0cmluZyBjaXR5OwotcHJpdmF0ZSBTdHJpbmcgY291bnRyeTsKLXByaXZhdGUgU3RyaW5nIHN0YXRlT3JQcm92aW5jZTsKLXByaXZhdGUgU3RyaW5nIHBvc3RhbENvZGU7Ci1wcml2YXRlIFN0cmluZyBzdHJlZXQ7Ci08L3ByZT4KLTxkaXYgYWxpZ249ImNlbnRlciI+Ci08ZGl2IGNsYXNzPSJpbmZ0Ymxub3RlIj48YnIgLz4KLTx0YWJsZSBjbGFzcz0iTm90ZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPk5vdGU6PC9wPgotWW91IHdpbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgZm9sbG93aW5nIGNvbHVtbnMgdG8gdGhlIEFERFJFU1MgZGF0YWJhc2UgdGFibGU6Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci1OVU1CRVIoMTAsMCkgQUREUkVTU19JRCAocHJpbWFyeSBrZXkpCi1WQVJDSEFSMig4MCkgUFJPVklOQ0UKLVZBUkNIQVIyKDgwKSBDT1VOVFJZCi1WQVJDSEFSMigyMCkgUF9DT0RFCi1WQVJDSEFSMig4MCkgU1RSRUVUCi1WQVJDSEFSMig4MCkgQ0lUWQotPC9wcmU+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci08L3ByZT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTwvbGk+Ci08bGk+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+RmluaXNoPC9zcGFuPi4gV2l0aCB0aGUgQ3JlYXRlIEpQQSBFbnRpdHkgY29tcGxldGVkLCBFY2xpcHNlIGRpc3BsYXlzIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkcmVzczwvc3Bhbj4gZW50aXR5IGluIHRoZSBKUEEgU3RydWN0dXJlIHZpZXcuPC9wPgotPHA+QWRkcmVzcy5qYXZhIGluY2x1ZGVzIHRoZSA8Y29kZT5ARW50aXR5PC9jb2RlPiBhbm5vdGF0aW9uLCB0aGUgcGVyc2lzdGVuY2UgZmllbGRzLCBhcyB3ZWxsIGFzIDxjb2RlPmdldHRlcjwvY29kZT4gYW5kIDxjb2RlPnNldHRlcjwvY29kZT4gbWV0aG9kcyBmb3IgZWFjaCBvZiB0aGUgZmllbGRzLjwvcD4KLTwvbGk+Ci08L29sPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTQiIG5hbWU9InN0aHJlZjE0Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+QWRkcmVzcyBFbnRpdHkgaW4gQWRkcmVzcy5qYXZhPC9wPgotPGltZyBzcmM9ImltZy9qYXZhX2VkaXRvcl9hZGRyZXNzLnBuZyIgYWx0PSJKYXZhIGVkaXRvciB3aXRoIHRoZSBBZGRyZXNzIGVudGl0eS4iIHRpdGxlPSJKYXZhIGVkaXRvciB3aXRoIHRoZSBBZGRyZXNzIGVudGl0eS4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPgotPHA+RWNsaXBzZSBhbHNvIGRpc3BsYXlzIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkcmVzczwvc3Bhbj4gZW50aXR5IGluIHRoZSBKUEEgU3RydWN0dXJlIHZpZXc6PC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTUiIG5hbWU9InN0aHJlZjE1Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+QWRkcmVzcyBFbnRpdHkgaW4gdGhlIEpQQSBTdHJ1Y3R1cmUgVmlldzwvcD4KLTxpbWcgc3JjPSJpbWcvYWRkcmVzc19qYXZhX0pQQV9zdHJ1Y3R1cmVfcXVpY2tzdGFydC5wbmciIGFsdD0iQWRkcmVzcy5qYXZhIGluIHRoZSBKUEEgU3RydWN0dXJlIFZpZXcuIiB0aXRsZT0iQWRkcmVzcy5qYXZhIGluIHRoZSBKUEEgU3RydWN0dXJlIFZpZXcuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT4KLTxvbD4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtYWN0aW9uIj5BZGRyZXNzPC9zcGFuPiBjbGFzcyBpbiB0aGUgUHJvamVjdCBFeHBsb3JlciB2aWV3LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LCBub3RpY2UgdGhhdCBEYWxpIGhhcyBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZWQgdGhlIEFERFJFU1MgZGF0YWJhc2UgdGFibGUgd2l0aCB0aGUgZW50aXR5IGJlY2F1c2UgdGhleSBhcmUgbmFtZWQgaWRlbnRpY2FsbHkuPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1EZXBlbmRpbmcgb24geW91ciBkYXRhYmFzZSBjb25uZWN0aW9uIHR5cGUsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+U2NoZW1hPC9zcGFuPi48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjE2IiBuYW1lPSJzdGhyZWYxNiI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPkpQQSBEZXRhaWxzIFZpZXcgZm9yIEFkZHJlc3MgRW50aXR5PC9wPgotPGltZyBzcmM9ImltZy9hZGRyZXNzLmphdmFfanBhX2RldGFpbHMucG5nIiBhbHQ9IkFkZHJlc3MuamF2YSBpbiB0aGUgSlBBIERldGFpbHMgdmlldy4iIHRpdGxlPSJBZGRyZXNzLmphdmEgaW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPC9vbD4KLTxkaXYgYWxpZ249ImNlbnRlciI+Ci08ZGl2IGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGVBbHNvIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+VGlwOjwvcD4KLUFmdGVyIGFzc29jaWF0aW5nIHRoZSBlbnRpdHkgd2l0aCB0aGUgZGF0YWJhc2UgdGFibGUsIHlvdSBzaG91bGQgdXBkYXRlIHRoZSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUgdG8gaW5jbHVkZSB0aGlzIEpQQSBlbnRpdHkuCi08cD5SaWdodC1jbGljayB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkpQQSBUb29scyAmZ3Q7IFN5bmNocm9uaXplIENsYXNzZXM8L3NwYW4+LiBEYWxpIGFkZHMgdGhlIGZvbGxvd2luZyB0byB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlOjwvcD4KLTxwPjxjb2RlPiZsdDtjbGFzcyZndDtxdWlja3N0YXJ0LmRlbW8ubW9kZWwuQWRkcmVzcyZsdDsvY2xhc3MmZ3Q7PC9jb2RlPjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGVhbHNvIiAtLT48L2Rpdj4KLTxwPk5vdyB3ZSBhcmUgcmVhZHkgdG8gbWFwIGVhY2ggZmllbGRzIGluIHRoZSBBZGRyZXNzIGNsYXNzIHRvIGEgY29sdW1uIGluIHRoZSBkYXRhYmFzZSB0YWJsZS48L3A+Ci08b2w+Ci08bGk+Ci08cD5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LWFjdGlvbiI+aWQ8L3NwYW4+IGZpZWxkIGluIHRoZSBKUEEgRGV0YWlscyB2aWV3LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5SaWdodCBjbGljayBpZCBhbmQgdGhlbiBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcCBBcyAmZ3Q7IGlkPC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+SW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcsIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+QUREUkVTU19JRDwvc3Bhbj4gaW4gdGhlIE5hbWUgZmllbGQ6PC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTciIG5hbWU9InN0aHJlZjE3Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+SlBBIERldGFpbHMgVmlldyBmb3IgdGhlIGFkZHJlc3NJZCBGaWVsZDwvcD4KLTxpbWcgc3JjPSJpbWcvYWRkcmVzc19pZF9kZXRhaWxzX3F1aWNrc3RhcnQucG5nIiBhbHQ9IlRoZSBKUEEgRGV0YWlscyB2aWV3IGZvciB0aGUgQWRkcmVzcyBlbnRpdHkmcnNxdW87cyBpZCBhdHRyaWJ1dGUuIiB0aXRsZT0iVGhlIEpQQSBEZXRhaWxzIHZpZXcgZm9yIHRoZSBBZGRyZXNzIGVudGl0eSZyc3F1bztzIGlkIGF0dHJpYnV0ZS4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPgotPHA+RWNsaXBzZSBhZGRzIHRoZSBmb2xsb3dpbmcgYW5ub3RhdGlvbnMgdG8gdGhlIEFkZHJlc3MgZW50aXR5OjwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLUBJZAotQENvbHVtbihuYW1lPSJBRERSRVNTX0lEIikKLTwvcHJlPjwvbGk+Ci08bGk+Ci08cD5NYXAgZWFjaCBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcyAoYXMgPHNwYW4gY2xhc3M9ImJvbGQiPkJhc2ljPC9zcGFuPiBtYXBwaW5ncykgdG8gdGhlIGFwcHJvcHJpYXRlIGRhdGFiYXNlIGNvbHVtbjo8L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxocnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iSFJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBtYXBwaW5ncyBmb3IgZWFjaCBvZiB0aGUgZmllbGRzIGluIHRoZSBBZGRyZXNzIGVudGl0eS4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBtYXBwaW5ncyBmb3IgZWFjaCBvZiB0aGUgZmllbGRzIGluIHRoZSBBZGRyZXNzIGVudGl0eS4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjMzJSIgLz4KLTxjb2wgd2lkdGg9IjMzJSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDgiPkZpZWxkPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQ4Ij5NYXAgQXM8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDgiPkRhdGFiYXNlIENvbHVtbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10OCIgaGVhZGVycz0icjFjMS10OCI+Y2l0eTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDggcjFjMi10OCI+QmFzaWM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQ4IHIxYzMtdDgiPkNJVFk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10OCIgaGVhZGVycz0icjFjMS10OCI+Y291bnRyeTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDggcjFjMi10OCI+QmFzaWM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQ4IHIxYzMtdDgiPkNPVU5UUlk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10OCIgaGVhZGVycz0icjFjMS10OCI+cG9zdGFsQ29kZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDggcjFjMi10OCI+QmFzaWM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQ4IHIxYzMtdDgiPlBfQ09ERTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQ4IiBoZWFkZXJzPSJyMWMxLXQ4Ij5wcm92aW5jZU9yU3RhdGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQ4IHIxYzItdDgiPkJhc2ljPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10OCByMWMzLXQ4Ij5QUk9WSU5DRTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQ4IiBoZWFkZXJzPSJyMWMxLXQ4Ij5zdHJlZXQ8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ4IHIxYzItdDgiPkJhc2ljPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10OCByMWMzLXQ4Ij5TVFJFRVQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxocnVsZWluZm9ybWFsIiAtLT48L2xpPgotPC9vbD4KLTxwPkRhbGkgYXV0b21hdGljYWxseSBtYXBzIHNvbWUgZmllbGRzIHRvIHRoZSBjb3JyZWN0IGRhdGFiYXNlIGNvbHVtbiAoc3VjaCBhcyB0aGUgY2l0eSBmaWVsZCB0byB0aGUgQ2l0eSBjb2x1bW4pIGlmIHRoZSBuYW1lcyBhcmUgaWRlbnRpY2FsLjwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvYWRkcmVzcy5qYXZhX2pwYV9kZXRhaWxzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvYWRkcmVzcy5qYXZhX2pwYV9kZXRhaWxzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjZTgwYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2FkZHJlc3MuamF2YV9qcGFfZGV0YWlscy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2FkZHJlc3NfaWRfZGV0YWlsc19xdWlja3N0YXJ0LnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvYWRkcmVzc19pZF9kZXRhaWxzX3F1aWNrc3RhcnQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWY0MGNmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvYWRkcmVzc19pZF9kZXRhaWxzX3F1aWNrc3RhcnQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9hZGRyZXNzX2phdmFfSlBBX3N0cnVjdHVyZV9xdWlja3N0YXJ0LnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvYWRkcmVzc19qYXZhX0pQQV9zdHJ1Y3R1cmVfcXVpY2tzdGFydC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZjUxYTkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9hZGRyZXNzX2phdmFfSlBBX3N0cnVjdHVyZV9xdWlja3N0YXJ0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2MGUwYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2NyZWF0ZV9qcGFfZmllbGRzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvY3JlYXRlX2pwYV9maWVsZHMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTc5N2E4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvY3JlYXRlX2pwYV9maWVsZHMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9jdXN0b21pemVfZGVmYXVsdF9lbnRpdHlfZ2VuZXJhdGlvbi5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2N1c3RvbWl6ZV9kZWZhdWx0X2VudGl0eV9nZW5lcmF0aW9uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2NzYxNi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2N1c3RvbWl6ZV9kZWZhdWx0X2VudGl0eV9nZW5lcmF0aW9uLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvY3VzdG9taXplX2luZGl2aWR1YWxfZW50aXRpZXMucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9jdXN0b21pemVfaW5kaXZpZHVhbF9lbnRpdGllcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzN2JkZWUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9jdXN0b21pemVfaW5kaXZpZHVhbF9lbnRpdGllcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2RldGFpbHNfZW50aXR5bWFwcGluZ3MucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9kZXRhaWxzX2VudGl0eW1hcHBpbmdzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkNDg4NS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2RldGFpbHNfZW50aXR5bWFwcGluZ3MucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9lcnJvcl9zYW1wbGUucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9lcnJvcl9zYW1wbGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQ5NjQ2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvZXJyb3Jfc2FtcGxlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvZ2VuZXJhdGVfZW50aXRpZXMucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9nZW5lcmF0ZV9lbnRpdGllcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYWEyNWMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9nZW5lcmF0ZV9lbnRpdGllcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2ljb25fYmFzaWNtYXBtYXBwaW5ncy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2ljb25fYmFzaWNtYXBtYXBwaW5ncy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZWVmM2EuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9pY29uX2Jhc2ljbWFwbWFwcGluZ3MucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9pbmhlcml0YW5jZV9qb2luLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvaW5oZXJpdGFuY2Vfam9pbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjY4NzUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9pbmhlcml0YW5jZV9qb2luLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvaW5oZXJpdGFuY2Vfc2luZ2xlLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvaW5oZXJpdGFuY2Vfc2luZ2xlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE0NjQ4Mi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2luaGVyaXRhbmNlX3NpbmdsZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2luaGVyaXRhbmNlX3RhYi5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2luaGVyaXRhbmNlX3RhYi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NmRkOWYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9pbmhlcml0YW5jZV90YWIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9qYXZhX2VkaXRvcl9hZGRyZXNzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvamF2YV9lZGl0b3JfYWRkcmVzcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NDI4OTAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9qYXZhX2VkaXRvcl9hZGRyZXNzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvanBhX3dpemFyZF9jcmVhdGVfZmllbGRzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvanBhX3dpemFyZF9jcmVhdGVfZmllbGRzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA1NTBlYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL2pwYV93aXphcmRfY3JlYXRlX2ZpZWxkcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL21hcHBlZF9lbnRpdHlfdHlwZV9saW5rLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGVkX2VudGl0eV90eXBlX2xpbmsucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjYxNjAzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGVkX2VudGl0eV90eXBlX2xpbmsucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9tYXBwaW5nX2ZpbGVfbmV3LnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ19maWxlX25ldy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNTU3NDEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9tYXBwaW5nX2ZpbGVfbmV3LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ190eXBlX3NlbGVjdGlvbl9lbWJlZC5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL21hcHBpbmdfdHlwZV9zZWxlY3Rpb25fZW1iZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjNkMWIyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ190eXBlX3NlbGVjdGlvbl9lbWJlZC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL21hcHBpbmdfdHlwZV9zZWxlY3Rpb25fZW50aXR5LnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ190eXBlX3NlbGVjdGlvbl9lbnRpdHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTY1M2RiLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ190eXBlX3NlbGVjdGlvbl9lbnRpdHkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9tYXBwaW5nX3R5cGVfc2VsZWN0aW9uX3N1cGVyY2xhc3MucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9tYXBwaW5nX3R5cGVfc2VsZWN0aW9uX3N1cGVyY2xhc3MucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWY1NDM3Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbWFwcGluZ190eXBlX3NlbGVjdGlvbl9zdXBlcmNsYXNzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbW9kaWZ5X2ZhY2V0ZWRfcHJvamVjdC5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL21vZGlmeV9mYWNldGVkX3Byb2plY3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDQ5NGQ1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbW9kaWZ5X2ZhY2V0ZWRfcHJvamVjdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2Jhc2ljbWFwcGluZ3MucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9iYXNpY21hcHBpbmdzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIwYjdmZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2Jhc2ljbWFwcGluZ3MucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9lbWJlZGRhYmxlZW50aXR5bWFwcGluZy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2VtYmVkZGFibGVlbnRpdHltYXBwaW5nLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgyOTRlZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2VtYmVkZGFibGVlbnRpdHltYXBwaW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fZW1iZWRkZWRpZG1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9lbWJlZGRlZGlkbWFwcGluZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTlkYzguLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9lbWJlZGRlZGlkbWFwcGluZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2VtYmVkZGVkbWFwcGluZy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX2VtYmVkZGVkbWFwcGluZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZDUyYjguLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9lbWJlZGRlZG1hcHBpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9pZG1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9pZG1hcHBpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGVmYjVkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25faWRtYXBwaW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fbWFueXRvbWFueW1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9tYW55dG9tYW55bWFwcGluZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViODAyMmUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9tYW55dG9tYW55bWFwcGluZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX21hbnl0b29uZW1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9tYW55dG9vbmVtYXBwaW5nLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NhY2MxOS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX21hbnl0b29uZW1hcHBpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9tYXBwZWRlbnRpdHkucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9tYXBwZWRlbnRpdHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOThlYTJjLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fbWFwcGVkZW50aXR5LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fbWFwcGVkc3VwZXJjbGFzcy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX21hcHBlZHN1cGVyY2xhc3MucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzk3Y2ViLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fbWFwcGVkc3VwZXJjbGFzcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX29uZXRvbWFueW1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9vbmV0b21hbnltYXBwaW5nLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRkYzk4OS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX29uZXRvbWFueW1hcHBpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9vbmV0b29uZW1hcHBpbmcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfaWNvbl9vbmV0b29uZW1hcHBpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGQ5YmJkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fb25ldG9vbmVtYXBwaW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fdHJhbnNpZW50bWFwcGluZy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX3RyYW5zaWVudG1hcHBpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTA0ODhmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fdHJhbnNpZW50bWFwcGluZy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19pY29uX3ZlcnNpb25tYXBwaW5nLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fdmVyc2lvbm1hcHBpbmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODczNzEyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2ljb25fdmVyc2lvbm1hcHBpbmcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfanBhX2ZhY2V0X3Rhc2sucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfanBhX2ZhY2V0X3Rhc2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjA3ODA4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2pwYV9mYWNldF90YXNrLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2pwYV9wZXJzcGVjdGl2ZV9idXR0b24ucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfanBhX3BlcnNwZWN0aXZlX2J1dHRvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDI1YWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZXdfanBhX3BlcnNwZWN0aXZlX2J1dHRvbi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ld19qcGFfcHJvamVjdF90YXNrLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2pwYV9wcm9qZWN0X3Rhc2sucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzJmOTFkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmV3X2pwYV9wcm9qZWN0X3Rhc2sucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZ3JlbGMucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZ3JlbGMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM4MWE1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmdyZWxjLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmdyZWxyLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvbmdyZWxyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiYzc0NC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ncmVsci5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ncmVsdC5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL25ncmVsdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYWYyMWYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9uZ3JlbHQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9wZXJzaXN0ZW5jZV9vdXRsaW5lX3ZpZXcucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9wZXJzaXN0ZW5jZV9vdXRsaW5lX3ZpZXcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjlhYTgyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvcGVyc2lzdGVuY2Vfb3V0bGluZV92aWV3LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvcHJvamVjdF9wcm9wZXJ0aWVzX3Rhc2tzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvcHJvamVjdF9wcm9wZXJ0aWVzX3Rhc2tzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQwYTg4OC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3Byb2plY3RfcHJvcGVydGllc190YXNrcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3F1aWNrc3RhcnRfcHJvamVjdC5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3F1aWNrc3RhcnRfcHJvamVjdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Y2EwNTAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9xdWlja3N0YXJ0X3Byb2plY3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9zZWNvbmRhcnlfdGFibGVzLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvc2Vjb25kYXJ5X3RhYmxlcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MWY5ZjUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9zZWNvbmRhcnlfdGFibGVzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvc2VsZWN0X2Ffd2l6YXJkX2VudGl0eS5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF9hX3dpemFyZF9lbnRpdHkucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2ViZTkwLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvc2VsZWN0X2Ffd2l6YXJkX2VudGl0eS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF9hX3dpemFyZF9qcGFfcHJvamVjdC5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF9hX3dpemFyZF9qcGFfcHJvamVjdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjM1MDIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9zZWxlY3RfYV93aXphcmRfanBhX3Byb2plY3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9zZWxlY3RfYV93aXphcmRfbWFwcGluZy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF9hX3dpemFyZF9tYXBwaW5nLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5YzlkMS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF9hX3dpemFyZF9tYXBwaW5nLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvc2VsZWN0X3RhYmxlcy5wbmcgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3NlbGVjdF90YWJsZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTdjOTMxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvc2VsZWN0X3RhYmxlcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3N5bmNob3JuaXplX2NsYXNzZXMucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy9zeW5jaG9ybml6ZV9jbGFzc2VzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1OWY2NC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3N5bmNob3JuaXplX2NsYXNzZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy90YWJsZV9hc3NvY2lhdGlvbnMucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy90YWJsZV9hc3NvY2lhdGlvbnMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWI0MGJlLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvdGFibGVfYXNzb2NpYXRpb25zLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvdGFibGVfZW50aXR5LnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbWcvdGFibGVfZW50aXR5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFhMWRiZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3RhYmxlX2VudGl0eS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3Rhc2tfZW50ZXJpbmdfcXVlcnkucG5nIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2ltZy90YXNrX2VudGVyaW5nX3F1ZXJ5LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA3YmZiMC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvaW1nL3Rhc2tfZW50ZXJpbmdfcXVlcnkucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2luZGV4LnhtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9pbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjdkMTAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2luZGV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+Ci08aW5kZXggdmVyc2lvbj0iMS4wIj4KLTxlbnRyeSBrZXl3b3JkPSJAQmFzaWMsIEJhc2ljIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAwOS5odG0jc3RocmVmMTE1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQENvbHVtbiwgR2VuZXJhbCBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI3N0aHJlZjIzMCIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iQERpc2NyaW1pbmF0b3JDb2x1bW4iPgotPGVudHJ5IGtleXdvcmQ9IlNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlIj48dG9waWMgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jc3RocmVmOTUiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJJbmhlcml0YW5jZSBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZmVyZW5jZTAwOS5odG0jc3RocmVmMjI0IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJARGlzY3JpbWluYXRvclZhbHVlIj4KLTxlbnRyeSBrZXl3b3JkPSJTcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZSI+PHRvcGljIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI3N0aHJlZjk3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSW5oZXJpdGFuY2UgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDkuaHRtI3N0aHJlZjIyMiIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBFbWJlZGRhYmxlLCBFbWJlZGRhYmxlIj48dG9waWMgaHJlZj0idGFza3MwMDYuaHRtI3N0aHJlZjgwIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQEVtYmVkZGVkLCBFbWJlZGRlZCBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTAuaHRtI3N0aHJlZjExOSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBFbWJlZGRlZElkLCBFbWJlZGRlZCBJRCBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTEuaHRtI3N0aHJlZjEyMyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBFbnRpdHksIEVudGl0eSI+PHRvcGljIGhyZWY9InRhc2tzMDA1Lmh0bSNzdGhyZWY3MyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBFbnVtZXJhdGVkLCBHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjQwIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQEdlbmVyYXRlZFZhbHVlLCBQcmltYXJ5IEtleSBHZW5lcmF0aW9uIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX3ByaW1hcnlfa2V5Lmh0bSNzdGhyZWYyNDkiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJASWQsIElEIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMi5odG0jc3RocmVmMTI3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQEluaGVyaXRhbmNlLCBTcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZSI+PHRvcGljIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI3N0aHJlZjkzIiAvPjwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJASm9pbkNvbHVtbiI+Ci08ZW50cnkga2V5d29yZD0iTWFueS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE0Lmh0bSNzdGhyZWYxMzgiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJPbmUtdG8tb25lIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNi5odG0jc3RocmVmMTQ4IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSm9pbiBUYWJsZSBJbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZmVyZW5jZTAxMS5odG0jc3RocmVmMjQ1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSm9pbiBDb2x1bW5zIEluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDEyLmh0bSNzdGhyZWYyNDgiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJATG9iLCBHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjM1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQE1hbnlUb01hbnksIE1hbnktdG8tbWFueSBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTMuaHRtI3N0aHJlZjEzMSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBNYW55VG9PbmUsIE1hbnktdG8tb25lIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNC5odG0jc3RocmVmMTM2IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQE1hcHBlZFN1cGVyY2xhc3MsIE1hcHBlZCBzdXBlcmNsYXNzIj48dG9waWMgaHJlZj0idGFza3MwMDcuaHRtI3N0aHJlZjg3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQE5hbWVkUXVlcnksIENyZWF0aW5nIE5hbWVkIFF1ZXJpZXMiPjx0b3BpYyBocmVmPSJ0YXNrczAwOC5odG0jc3RocmVmMTA3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQE9uZVRvTWFueSwgT25lLXRvLW1hbnkgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE1Lmh0bSNzdGhyZWYxNDEiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJAT25lVG9PbmUsIE9uZS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE2Lmh0bSNzdGhyZWYxNDUiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJAT3JkZXJCeSwgR2VuZXJhbCBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI3N0aHJlZjI0MyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkBTZXF1ZW5jZUdlbmVyYXRvciwgUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9wcmltYXJ5X2tleS5odG0jc3RocmVmMjUxIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQFRlbXBvcmFsLCBHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjM3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQFRyYW5zaWVudCwgVHJhbnNpZW50IG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNy5odG0jc3RocmVmMTUxIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQFZlcnNpb24sIFZlcnNpb24gbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE4Lmh0bSNzdGhyZWYxNTUiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhcmNoaXRlY3R1cmUgb2YgRGFsaSBmZWF0dXJlLCBEYWxpIERldmVsb3BlciBEb2N1bWVudGF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDMyLmh0bSNzdGhyZWYyODMiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhc3NvY2lhdGlvbiB0YWJsZXMsIENyZWF0ZSBOZXcgQXNzb2NpYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtI3N0aHJlZjIwNiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImF0dHJpYnV0ZSBvdmVycmlkZXMsIEF0dHJpYnV0ZSBvdmVycmlkZXMiPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDcuaHRtI3N0aHJlZjIxMyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkF0dHJpYnV0ZSBPdmVycmlkZXMgLSBpbiBKYXZhIERldGFpbHMgdmlldywgQXR0cmlidXRlIG92ZXJyaWRlcyI+PHRvcGljIGhyZWY9InJlZmVyZW5jZTAwNy5odG0jc3RocmVmMjE1IiAvPjwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJhdHRyaWJ1dGVzIj4KLTxlbnRyeSBrZXl3b3JkPSJKUEEgRGV0YWlscyB2aWV3LCBKUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcykiPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI3N0aHJlZjIyOSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9Im1hcHBpbmcsIFVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiPjx0b3BpYyBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI3N0aHJlZjIxIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJiYXNpYyBtYXBwaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJAQmFzaWMsIEJhc2ljIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAwOS5odG0jc3RocmVmMTE2IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIEJhc2ljIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAwOS5odG0jc3RocmVmMTE0IiAvPjwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IihTZWUgYWxzbyBtYXBwaW5ncykiPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iY2FjaGluZywgQ2FjaGluZyI+PHRvcGljIGhyZWY9InJlZmVyZW5jZTAyMC5odG0jc3RocmVmMjYyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iY2FyZGluYWxpdHkgLSBhc3NvY2lhdGlvbiB0YWJsZXMsIEFzc29jaWF0aW9uIENhcmRpbmFsaXR5Ij48dG9waWMgaHJlZj0icmVmX2Fzc29jaWF0aW9uX2NhcmRpbmFsaXR5Lmh0bSNzdGhyZWYyMDkiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImNsYXNzZXMiPgotPGVudHJ5IGtleXdvcmQ9ImFkZGluZyBwZXJzaXN0ZW5jZSB0bywgQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiPjx0b3BpYyBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jc3RocmVmNjgiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJlbWJlZGRhYmxlLCBFbWJlZGRhYmxlIj48dG9waWMgaHJlZj0idGFza3MwMDYuaHRtI3N0aHJlZjc5IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iZW50aXR5LCBFbnRpdHkiPjx0b3BpYyBocmVmPSJ0YXNrczAwNS5odG0jc3RocmVmNzEiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJtYW5hZ2VkLCBNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiPjx0b3BpYyBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jc3RocmVmNTAiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZyBwZXJzaXN0ZW50IGNsYXNzZXMsIEpQQSBGYWNldCBwYWdlIj48dG9waWMgaHJlZj0icmVmX2pwYV9mYWNldC5odG0jc3RocmVmMTkyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ibWFwcGVkIHN1cGVyY2xhc3MsIE1hcHBlZCBzdXBlcmNsYXNzIj48dG9waWMgaHJlZj0idGFza3MwMDcuaHRtI3N0aHJlZjg1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic3luY2hyb25pemluZywgU3luY2hyb25pemluZyBjbGFzc2VzIj48dG9waWMgaHJlZj0idGFza3MwMDIuaHRtI3N0aHJlZjUzIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJjb2x1bW5zIj4KLSAgICA8ZW50cnkga2V5d29yZD0iZGlzY3JpbWluYXRvciI+Ci08ZW50cnkga2V5d29yZD0iU3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2UiPjx0b3BpYyBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNzdGhyZWY5NiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkluaGVyaXRhbmNlIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDA5Lmh0bSNzdGhyZWYyMjUiIC8+PC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJqb2luIj4KLTxlbnRyeSBrZXl3b3JkPSJNYW55LXRvLW9uZSBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTQuaHRtI3N0aHJlZjEzNyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9Ik9uZS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE2Lmh0bSNzdGhyZWYxNDciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJKb2luIFRhYmxlIEluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDExLmh0bSNzdGhyZWYyNDQiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJKb2luIENvbHVtbnMgSW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTIuaHRtI3N0aHJlZjI0NyIgLz48L2VudHJ5PgotICAgIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ibWFwcGluZyB0bywgR2VuZXJhbCBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI3N0aHJlZjIzMSIgLz48L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJ2YWx1ZSI+Ci08ZW50cnkga2V5d29yZD0iU3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2UiPjx0b3BpYyBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNzdGhyZWY5OCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkluaGVyaXRhbmNlIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDA5Lmh0bSNzdGhyZWYyMjMiIC8+PC9lbnRyeT4KLSAgICA8L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImNvbm5lY3Rpb24gcG9vbCwgTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIj48dG9waWMgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtI3N0aHJlZjUyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iY29udmVydGluZyBKYXZhIHByb2plY3QgdG8gSlBBLCBDb252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3QiPjx0b3BpYyBocmVmPSJ0YXNrczAwMS5odG0jc3RocmVmMzciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJDcmVhdGUgYSBKUEEgUHJvamVjdCBXaXphcmQsIENyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0Ij48dG9waWMgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI3N0aHJlZjI5IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iQ3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQsIENyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkIj48dG9waWMgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdF93aXphcmQuaHRtI3N0aHJlZjE4OSIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iZGF0YWJhc2UgdGFibGVzIj4KLTxlbnRyeSBrZXl3b3JkPSJnZW5lcmF0aW5nIGVudGl0aWVzIGZyb20sIEdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXMiPjx0b3BpYyBocmVmPSJ0YXNrczAxOS5odG0jc3RocmVmMTYwIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJkYXRhYmFzZSAtIHBlcnNpc3RlbmNlIj4KLTxlbnRyeSBrZXl3b3JkPSJjb25uZWN0aW9uLCBQcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAtIEphdmEgUGVyc2lzdGVuY2UgT3B0aW9ucyI+PHRvcGljIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI3N0aHJlZjI3NSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InNjaGVtYSwgUHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgLSBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnMiPjx0b3BpYyBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSNzdGhyZWYyNzciIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiAtIERhbGksIERhbGkgRGV2ZWxvcGVyIERvY3VtZW50YXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMzIuaHRtI3N0aHJlZjI4MiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImVhZ2VyIGZldGNoLCBHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjMzIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iRWNsaXBzZUxpbmsgWE1MIG1hcHBpbmcgZmlsZSwgTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIj48dG9waWMgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtI3N0aHJlZjUxIiAvPjwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJlbWJlZGRhYmxlIGNsYXNzIj4KLTxlbnRyeSBrZXl3b3JkPSJARW1iZWRkYWJsZSwgRW1iZWRkYWJsZSI+PHRvcGljIGhyZWY9InRhc2tzMDA2Lmh0bSNzdGhyZWY4MSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImFib3V0LCBFbWJlZGRhYmxlIj48dG9waWMgaHJlZj0idGFza3MwMDYuaHRtI3N0aHJlZjc4IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJlbWJlZGRlZCBJRCBtYXBwaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJARW1iZWRkZWRJZCwgRW1iZWRkZWQgSUQgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDExLmh0bSNzdGhyZWYxMjQiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhYm91dCwgRW1iZWRkZWQgSUQgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDExLmh0bSNzdGhyZWYxMjIiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImVtYmVkZGVkIG1hcHBpbmciPgotPGVudHJ5IGtleXdvcmQ9IkBFbWJlZGRlZCwgRW1iZWRkZWQgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDEwLmh0bSNzdGhyZWYxMjAiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhYm91dCwgRW1iZWRkZWQgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDEwLmh0bSNzdGhyZWYxMTgiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImVudGl0aWVzIj4KLTxlbnRyeSBrZXl3b3JkPSJARW50aXR5IGFubm90YXRpb24sIEVudGl0eSI+PHRvcGljIGhyZWY9InRhc2tzMDA1Lmh0bSNzdGhyZWY3NCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImFib3V0LCBVbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2UiPjx0b3BpYyBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSNzdGhyZWYyMCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nLCBDcmVhdGluZyBhIEpQQSBFbnRpdHkiPjx0b3BpYyBocmVmPSJ0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bSNzdGhyZWY0MCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImN1c3RvbWl6aW5nLCBDdXN0b21pemUgSW5kaXZpZHVhbCBFbnRpdGllcyI+PHRvcGljIGhyZWY9InJlZl9jdXN0b21pekluZGl2aWR1YWxFbnRpdGllcy5odG0jc3RocmVmMjA1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iZW1iZWRkYWJsZSwgRW1iZWRkYWJsZSI+PHRvcGljIGhyZWY9InRhc2tzMDA2Lmh0bSNzdGhyZWY4MiIgLz48L2VudHJ5PgotICAgIDxlbnRyeSBrZXl3b3JkPSJmcm9tIHRhYmxlcyI+Ci08ZW50cnkga2V5d29yZD0iR2VuZXJhdGluZyBlbnRpdGllcyBmcm9tIHRhYmxlcyI+PHRvcGljIGhyZWY9InRhc2tzMDE5Lmh0bSNzdGhyZWYxNTciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJTZWxlY3QgVGFibGVzIj48dG9waWMgaHJlZj0icmVmX3NlbGVjdFRhYmxlcy5odG0jc3RocmVmMjAxIiAvPjwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJnZW5lcmF0aW5nLCBDdXN0b21pemUgRGVmYXVsdCBFbnRpdHkgR2VuZXJhdGlvbiI+PHRvcGljIGhyZWY9InJlZl9jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbi5odG0jc3RocmVmMjA0IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSlBBIERldGFpbHMgdmlldywgSlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKSI+PHRvcGljIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI3N0aHJlZjIxMiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9Im1hcHBlZCBzdXBlcmNsYXNzLCBNYXBwZWQgc3VwZXJjbGFzcyI+PHRvcGljIGhyZWY9InRhc2tzMDA3Lmh0bSNzdGhyZWY4OCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9Im1hcHBpbmcsIENyZWF0aW5nIGEgSmF2YSBwZXJzaXN0ZW50IGVudGl0eSB3aXRoIHBlcnNpc3RlbnQgZmllbGRzIj48dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDA0Lmh0bSNzdGhyZWYxMyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InBlcnNpc3RlbmNlLCBDcmVhdGluZyBhIEphdmEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aCBwZXJzaXN0ZW50IGZpZWxkcyI+PHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwNC5odG0jc3RocmVmMTEiIC8+PC9lbnRyeT4KLSAgICA8ZW50cnkga2V5d29yZD0icGVyc2lzdGVudCI+Ci08ZW50cnkga2V5d29yZD0iRW50aXR5Ij48dG9waWMgaHJlZj0idGFza3MwMDUuaHRtI3N0aHJlZjY5IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iRW50aXR5Ij48dG9waWMgaHJlZj0idGFza3MwMDUuaHRtI3N0aHJlZjc1IiAvPjwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJzZWNvbmRhcnkgdGFibGVzLCBTZWNvbmRhcnkgdGFibGUgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDguaHRtI3N0aHJlZjIxOCIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkVudGl0eSBDbGFzcyBwYWdlLCBTZWxlY3RpbmcgdGhlIENyZWF0ZSBhIEpQQSBFbnRpdHkgV2l6YXJkIj48dG9waWMgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jc3RocmVmNDMiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJFbnRpdHkgUHJvcGVydGllcyBwYWdlLCAmbHQ7YSBpZD0mcXVvdDtzdGhyZWY0MyZxdW90OyBuYW1lPSZxdW90O3N0aHJlZjQzJnF1b3Q7Jmd0OyZsdDsvYSZndDtUaGUgRW50aXR5IENsYXNzIFBhZ2UiPjx0b3BpYyBocmVmPSJ0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bSNzdGhyZWY0NSIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iZW51bWVyYXRlZCI+Ci08ZW50cnkga2V5d29yZD0iR2VuZXJhbCBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI3N0aHJlZjIzOSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkdlbmVyYWwgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNzdGhyZWYyNDEiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9ImVycm9yIG1lc3NhZ2VzIC0gRGFsaSI+Ci08ZW50cnkga2V5d29yZD0iVmFsaWRhdGluZyBtYXBwaW5ncyBhbmQgcmVwb3J0aW5nIHByb2JsZW1zIj48dG9waWMgaHJlZj0idGFza3MwMjEuaHRtI3N0aHJlZjE2NiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkVycm9yIG1lc3NhZ2VzIj48dG9waWMgaHJlZj0idGFza3MwMjIuaHRtI3N0aHJlZjE3MSIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImV4dGVuc2lvbiBwb2ludHMgLSBEYWxpIGZlYXR1cmUsIERhbGkgRGV2ZWxvcGVyIERvY3VtZW50YXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMzIuaHRtI3N0aHJlZjI4NCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImZldGNoIHR5cGUsIEdlbmVyYWwgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNzdGhyZWYyMzIiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9IkdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIGRpYWxvZyI+Ci08ZW50cnkga2V5d29yZD0iR2VuZXJhdGluZyBlbnRpdGllcyBmcm9tIHRhYmxlcyI+PHRvcGljIGhyZWY9InRhc2tzMDE5Lmh0bSNzdGhyZWYxNTkiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJTZWxlY3QgVGFibGVzIj48dG9waWMgaHJlZj0icmVmX3NlbGVjdFRhYmxlcy5odG0jc3RocmVmMjAwIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJnZW5lcmF0ZWQgdmFsdWVzIj4KLTxlbnRyeSBrZXl3b3JkPSJJRCBtYXBwaW5ncywgUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZl9wcmltYXJ5X2tleS5odG0jc3RocmVmMjUwIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2VxdWVuY2UsIFByaW1hcnkgS2V5IEdlbmVyYXRpb24gaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtI3N0aHJlZjI1MiIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImhpbnRzIC0gcXVlcnksIENyZWF0aW5nIE5hbWVkIFF1ZXJpZXMiPjx0b3BpYyBocmVmPSJ0YXNrczAwOC5odG0jc3RocmVmMTA5IiAvPjwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJJRCBtYXBwaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJASWQsIElEIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMi5odG0jc3RocmVmMTI4IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIElEIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMi5odG0jc3RocmVmMTI2IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJpbmhlcml0YW5jZSI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImVudGl0eSI+Ci08ZW50cnkga2V5d29yZD0iU3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2UiPjx0b3BpYyBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNzdGhyZWY5MiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkVudGl0eSBDbGFzcyBwYWdlIj48dG9waWMgaHJlZj0icmVmX0VudGl0eUNsYXNzUGFnZS5odG0jc3RocmVmMTk0IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSW5oZXJpdGFuY2UgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDkuaHRtI3N0aHJlZjIyMSIgLz48L2VudHJ5PgotICAgIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iam9pbmVkIHRhYmxlcywgU2luZ2xlIFRhYmxlIEluaGVyaXRhbmNlIj48dG9waWMgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jc3RocmVmMTA0IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2luZ2xlIHRhYmxlLCBTcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZSI+PHRvcGljIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI3N0aHJlZjk5IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSW5oZXJpdGFuY2UgLSBpbiBKYXZhIERldGFpbHMgdmlldywgSW5oZXJpdGFuY2UgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDkuaHRtI3N0aHJlZjIyMCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9Imluc3RhbGxhdGlvbiAtIERhbGksIFJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uIj48dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDAxLmh0bSNzdGhyZWYzIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSmF2YSBwcm9qZWN0IC0gY29udmVydGluZyB0byBKUEEsIENvbnZlcnRpbmcgYSBKYXZhIFByb2plY3QgdG8gYSBKUEEgUHJvamVjdCI+PHRvcGljIGhyZWY9InRhc2tzMDAxLmh0bSNzdGhyZWYzNSIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iam9pbiBjb2x1bW5zIj4KLTxlbnRyeSBrZXl3b3JkPSJKb2luIENvbHVtbnMiPjx0b3BpYyBocmVmPSJyZWZfam9pbl9jb2x1bW5zLmh0bSNzdGhyZWYyMDgiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJKb2luIENvbHVtbnMgSW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTIuaHRtI3N0aHJlZjI0NiIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImpvaW5lZCB0YWJsZXMgLSBpbmhlcml0YW5jZSwgU2luZ2xlIFRhYmxlIEluaGVyaXRhbmNlIj48dG9waWMgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jc3RocmVmMTA1IiAvPjwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJKUEEgRGV0YWlscyB2aWV3Ij4KLTxlbnRyeSBrZXl3b3JkPSJhdHRyaWJ1dGVzLCBKUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcykiPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI3N0aHJlZjIyNyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImVudGl0aWVzLCBKUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpIj48dG9waWMgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jc3RocmVmMjEwIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlLCBKUEEgRGV2ZWxvcG1lbnQgcGVyc3BlY3RpdmUiPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcGVyc3BlY3RpdmUuaHRtI3N0aHJlZjI4MCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkpQQSBGYWNldCBwYWdlLCBUaGUgSmF2YSBTb3VyY2UgUGFnZSI+PHRvcGljIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSNzdGhyZWYzNCIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0iSlBBIHByb2plY3QiPgotPGVudHJ5IGtleXdvcmQ9ImNvbnZlcnRpbmcgZnJvbSBKYXZhLCBDb252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3QiPjx0b3BpYyBocmVmPSJ0YXNrczAwMS5odG0jc3RocmVmMzYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZyBuZXcsIENyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0Ij48dG9waWMgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI3N0aHJlZjI3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iaW1wbGVtZW50YXRpb24sIEpQQSBGYWNldCBwYWdlIj48dG9waWMgaHJlZj0icmVmX2pwYV9mYWNldC5odG0jc3RocmVmMTkwIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icGFnZSwgJmx0O2EgaWQ9JnF1b3Q7c3RocmVmMjkmcXVvdDsgbmFtZT0mcXVvdDtzdGhyZWYyOSZxdW90OyZndDsmbHQ7L2EmZ3Q7U2VsZWN0aW5nIHRoZSBDcmVhdGUgYSBKUEEgUHJvamVjdCB3aXphcmQiPjx0b3BpYyBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jc3RocmVmMzEiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJwbGF0Zm9ybSwgUHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgLSBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnMiPjx0b3BpYyBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSNzdGhyZWYyNzQiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJKUEEgU3RydWN0dXJlIHZpZXcsIEpQQSBTdHJ1Y3R1cmUgdmlldyI+PHRvcGljIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNzdGhyZWYyNTQiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJsYXp5IGZldGNoLCBHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjM0IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ibGlicmFyeSAtIEpQQSwgSlBBIEZhY2V0IHBhZ2UiPjx0b3BpYyBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNzdGhyZWYxOTEiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im1hbnktdG8tbWFueSBtYXBwaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJATWFueVRvTWFueSwgTWFueS10by1tYW55IG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMy5odG0jc3RocmVmMTMyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIE1hbnktdG8tbWFueSBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTMuaHRtI3N0aHJlZjEzMCIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0ibWFueS10by1vbmUgbWFwcGluZyI+Ci08ZW50cnkga2V5d29yZD0iQE1hbnlUb09uZSwgTWFueS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE0Lmh0bSNzdGhyZWYxMzUiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhYm91dCwgTWFueS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE0Lmh0bSNzdGhyZWYxMzQiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im1hcHBlZCBzdXBlcmNsYXNzIj4KLTxlbnRyeSBrZXl3b3JkPSJATWFwcGVkU3VwZXJjbGFzcywgTWFwcGVkIHN1cGVyY2xhc3MiPjx0b3BpYyBocmVmPSJ0YXNrczAwNy5odG0jc3RocmVmODYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJhYm91dCwgTWFwcGVkIHN1cGVyY2xhc3MiPjx0b3BpYyBocmVmPSJ0YXNrczAwNy5odG0jc3RocmVmODQiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJtYXBwaW5nIGVudGl0aWVzLCBDcmVhdGluZyBhIEphdmEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aCBwZXJzaXN0ZW50IGZpZWxkcyI+PHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwNC5odG0jc3RocmVmMTIiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im1hcHBpbmcgZmlsZSI+Ci08ZW50cnkga2V5d29yZD0iJmx0O2EgaWQ9JnF1b3Q7c3RocmVmNTcmcXVvdDsgbmFtZT0mcXVvdDtzdGhyZWY1NyZxdW90OyZndDsmbHQ7L2EmZ3Q7TWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSI+PHRvcGljIGhyZWY9InRhc2tzMDAzLmh0bSNzdGhyZWY2MCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkVudGl0eSBDbGFzcyBwYWdlIj48dG9waWMgaHJlZj0icmVmX0VudGl0eUNsYXNzUGFnZS5odG0jc3RocmVmMTk1IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJtYXBwaW5ncyI+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIFVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3MiPjx0b3BpYyBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI3N0aHJlZjIyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYmFzaWMsIEJhc2ljIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAwOS5odG0jc3RocmVmMTEzIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iZW1iZWRkZWQsIEVtYmVkZGVkIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMC5odG0jc3RocmVmMTE3IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iZW1iZWRkZWQgSUQsIEVtYmVkZGVkIElEIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMS5odG0jc3RocmVmMTIxIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSUQsIElEIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxMi5odG0jc3RocmVmMTI1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ibWFueS10by1tYW55LCBNYW55LXRvLW1hbnkgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDEzLmh0bSNzdGhyZWYxMjkiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJtYW55LXRvLW9uZSwgTWFueS10by1vbmUgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE0Lmh0bSNzdGhyZWYxMzMiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJvbmUtdG8tbWFueSwgT25lLXRvLW1hbnkgbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE1Lmh0bSNzdGhyZWYxMzkiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJvbmUtdG8tb25lLCBPbmUtdG8tb25lIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNi5odG0jc3RocmVmMTQzIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icHJvYmxlbXMsIFZhbGlkYXRpbmcgbWFwcGluZ3MgYW5kIHJlcG9ydGluZyBwcm9ibGVtcyI+PHRvcGljIGhyZWY9InRhc2tzMDIxLmh0bSNzdGhyZWYxNjkiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJ0cmFuc2llbnQsIFRyYW5zaWVudCBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTcuaHRtI3N0aHJlZjE0OSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InZlcnNpb24sIFZlcnNpb24gbWFwcGluZyI+PHRvcGljIGhyZWY9InRhc2tzMDE4Lmh0bSNzdGhyZWYxNTMiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im5hbWVkIHF1ZXJpZXMiPgotPGVudHJ5IGtleXdvcmQ9ImVudGl0eSwgQ3JlYXRpbmcgTmFtZWQgUXVlcmllcyI+PHRvcGljIGhyZWY9InRhc2tzMDA4Lmh0bSNzdGhyZWYxMDYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJoaW50cywgQ3JlYXRpbmcgTmFtZWQgUXVlcmllcyI+PHRvcGljIGhyZWY9InRhc2tzMDA4Lmh0bSNzdGhyZWYxMTAiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJuYXRpdmUgcXVlcmllcywgQ3JlYXRpbmcgTmFtZWQgUXVlcmllcyI+PHRvcGljIGhyZWY9InRhc2tzMDA4Lmh0bSNzdGhyZWYxMTEiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im5vbnBlcnNpc3RlbnQiPgotPGVudHJ5IGtleXdvcmQ9ImNsYXNzZXMsIEFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIj48dG9waWMgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtI3N0aHJlZjY3IiAvPjwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImZpZWxkcy4gU2VlIHRyYW5zaWVudCI+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im9uZS10by1tYW55IG1hcHBpbmciPgotPGVudHJ5IGtleXdvcmQ9IkBPbmVUb01hbnksIE9uZS10by1tYW55IG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNS5odG0jc3RocmVmMTQyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIE9uZS10by1tYW55IG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNS5odG0jc3RocmVmMTQwIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJvbmUtdG8tb25lIG1hcHBpbmciPgotPGVudHJ5IGtleXdvcmQ9IkBPbmVUb09uZSwgT25lLXRvLW9uZSBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTYuaHRtI3N0aHJlZjE0NiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImFib3V0LCBPbmUtdG8tb25lIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNi5odG0jc3RocmVmMTQ0IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ib3JkZXJpbmcsIEdlbmVyYWwgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNzdGhyZWYyNDIiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9Im9ybS54bWwgZmlsZSI+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIFRoZSBvcm0ueG1sIGZpbGUiPjx0b3BpYyBocmVmPSJjb25jZXB0czAwMy5odG0jc3RocmVmMjQiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJjcmVhdGluZywgSlBBIEZhY2V0IHBhZ2UiPjx0b3BpYyBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNzdGhyZWYxOTMiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJtYW5hZ2luZywgTWFuYWdpbmcgdGhlIG9ybS54bWwgZmlsZSI+PHRvcGljIGhyZWY9InRhc2tfbWFuYWdlX29ybS5odG0jc3RocmVmNTciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJzYW1wbGUsIE1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiPjx0b3BpYyBocmVmPSJ0YXNrX21hbmFnZV9vcm0uaHRtI3N0aHJlZjU4IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ib3ZlcnJpZGVzIC0gSlBBIGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZSBvdmVycmlkZXMiPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDcuaHRtI3N0aHJlZjIxNCIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0icGVyc2lzdGVuY2UiPgotPGVudHJ5IGtleXdvcmQ9ImFib3V0LCBVbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2UiPjx0b3BpYyBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSNzdGhyZWYxOSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImRhdGFiYXNlIGNvbm5lY3Rpb24sIFByb2plY3QgUHJvcGVydGllcyBwYWdlIC0gSmF2YSBQZXJzaXN0ZW5jZSBPcHRpb25zIj48dG9waWMgaHJlZj0icmVmX3Byb2plY3RfcHJvcGVydGllcy5odG0jc3RocmVmMjc2IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iZGF0YWJhc2Ugc2NoZW1hLCBQcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAtIEphdmEgUGVyc2lzdGVuY2UgT3B0aW9ucyI+PHRvcGljIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI3N0aHJlZjI3OSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImVudGl0eSBjbGFzcywgQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiPjx0b3BpYyBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jc3RocmVmNjYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJvcHRpb25zLCBQcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAtIEphdmEgUGVyc2lzdGVuY2UgT3B0aW9ucyI+PHRvcGljIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI3N0aHJlZjI3MSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InByb3ZpZGVyLCBNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiPjx0b3BpYyBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jc3RocmVmNDkiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InBlcnNpc3RlbmNlLnhtbCBmaWxlIj4KLTxlbnRyeSBrZXl3b3JkPSJhYm91dCwgVGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIj48dG9waWMgaHJlZj0iY29uY2VwdHMwMDIuaHRtI3N0aHJlZjIzIiAvPjwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9Im1hbmFnaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiPjx0b3BpYyBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jc3RocmVmNDciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJXb3JraW5nIHdpdGggb3JtLnhtbCBmaWxlIj48dG9waWMgaHJlZj0idGFza3MwMDQuaHRtI3N0aHJlZjY0IiAvPjwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJzYW1wbGUsIE1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSI+PHRvcGljIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNzdGhyZWY0OCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InN5bmNocm9uaXppbmcgd2l0aCBjbGFzc2VzLCBTeW5jaHJvbml6aW5nIGNsYXNzZXMiPjx0b3BpYyBocmVmPSJ0YXNrczAwMi5odG0jc3RocmVmNTQiIC8+PC9lbnRyeT4KLSAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJwZXJzaXN0ZW50IGVudGl0eSwgRW50aXR5Ij48dG9waWMgaHJlZj0idGFza3MwMDUuaHRtI3N0aHJlZjcwIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icGVyc3BlY3RpdmUgLSBKUEEgRGV2ZWxvcG1lbnQsIEpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZSI+PHRvcGljIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wZXJzcGVjdGl2ZS5odG0jc3RocmVmMjgxIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icGxhdGZvcm0gLSBKUEEsIFByb2plY3QgUHJvcGVydGllcyBwYWdlIC0gSmF2YSBQZXJzaXN0ZW5jZSBPcHRpb25zIj48dG9waWMgaHJlZj0icmVmX3Byb2plY3RfcHJvcGVydGllcy5odG0jc3RocmVmMjczIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icHJvYmxlbXMsIFZhbGlkYXRpbmcgbWFwcGluZ3MgYW5kIHJlcG9ydGluZyBwcm9ibGVtcyI+PHRvcGljIGhyZWY9InRhc2tzMDIxLmh0bSNzdGhyZWYxNjgiIC8+PC9lbnRyeT4KLSAgPGVudHJ5IGtleXdvcmQ9InByb2plY3RzIC0gSlBBIj4KLSAgICA8ZW50cnkga2V5d29yZD0iY3JlYXRpbmcgbmV3Ij4KLTxlbnRyeSBrZXl3b3JkPSJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCI+PHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwMy5odG0jc3RocmVmOSIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0Ij48dG9waWMgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI3N0aHJlZjI2IiAvPjwvZW50cnk+Ci0gICAgPC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJvcHRpb25zLCBQcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAtIEphdmEgUGVyc2lzdGVuY2UgT3B0aW9ucyI+PHRvcGljIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI3N0aHJlZjI3MiIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InF1ZXJ5IGhpbnRzLCBDcmVhdGluZyBOYW1lZCBRdWVyaWVzIj48dG9waWMgaHJlZj0idGFza3MwMDguaHRtI3N0aHJlZjEwOCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InF1aWNrIHN0YXJ0IC0gRGFsaSwgRGFsaSBxdWljayBzdGFydCI+PHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwMi5odG0jc3RocmVmOCIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0icmVxdWlyZW1lbnRzIj4KLTxlbnRyeSBrZXl3b3JkPSJEYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMsIFJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uIj48dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDAxLmh0bSNzdGhyZWY0IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0icGVyc2lzdGVudCBlbnRpdGllcywgRW50aXR5Ij48dG9waWMgaHJlZj0idGFza3MwMDUuaHRtI3N0aHJlZjcyIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2NoZW1hIC0gZGF0YWJhc2UsIFByb2plY3QgUHJvcGVydGllcyBwYWdlIC0gSmF2YSBQZXJzaXN0ZW5jZSBPcHRpb25zIj48dG9waWMgaHJlZj0icmVmX3Byb2plY3RfcHJvcGVydGllcy5odG0jc3RocmVmMjc4IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2Vjb25kYXJ5IHRhYmxlcywgU2Vjb25kYXJ5IHRhYmxlIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmZXJlbmNlMDA4Lmh0bSNzdGhyZWYyMTYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJTZWNvbmRhcnkgVGFibGVzIC0gaW4gSmF2YSBEZXRhaWxzIHZpZXcsIFNlY29uZGFyeSB0YWJsZSBpbmZvcm1hdGlvbiI+PHRvcGljIGhyZWY9InJlZmVyZW5jZTAwOC5odG0jc3RocmVmMjE5IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2luZ2xlIHRhYmxlIGluaGVyaXRhbmNlLCBTcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZSI+PHRvcGljIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI3N0aHJlZjEwMCIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9InN1cGVyY2xhc3MsIE1hcHBlZCBzdXBlcmNsYXNzIj48dG9waWMgaHJlZj0idGFza3MwMDcuaHRtI3N0aHJlZjg5IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic3luY2hyb25pemluZyBjbGFzc2VzIHdpdGggcGVyc2lzdGVuY2UueG1sIGZpbGUsIFN5bmNocm9uaXppbmcgY2xhc3NlcyI+PHRvcGljIGhyZWY9InRhc2tzMDAyLmh0bSNzdGhyZWY1NSIgLz48L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0idGFibGVzIj4KLSAgICA8ZW50cnkga2V5d29yZD0iYXNzb2NpYXRpb25zIj4KLTxlbnRyeSBrZXl3b3JkPSJUYWJsZSBBc3NvY2lhdGlvbnMiPjx0b3BpYyBocmVmPSJyZWZfdGFibGVBc3NvY2lhdGlvbnMuaHRtI3N0aHJlZjIwMyIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9IkNyZWF0ZSBOZXcgQXNzb2NpYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtI3N0aHJlZjIwNyIgLz48L2VudHJ5PgotICAgIDwvZW50cnk+Ci0gICAgPGVudHJ5IGtleXdvcmQ9ImNyZWF0aW5nIGVudGl0aWVzIGZyb20iPgotPGVudHJ5IGtleXdvcmQ9IkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXMiPjx0b3BpYyBocmVmPSJ0YXNrczAxOS5odG0jc3RocmVmMTU4IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iU2VsZWN0IFRhYmxlcyI+PHRvcGljIGhyZWY9InJlZl9zZWxlY3RUYWJsZXMuaHRtI3N0aHJlZjIwMiIgLz48L2VudHJ5PgotICAgIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iaW5oZXJpdGFuY2UsIFNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlIj48dG9waWMgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jc3RocmVmMTAxIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0ic2Vjb25kYXJ5LCBTZWNvbmRhcnkgdGFibGUgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDguaHRtI3N0aHJlZjIxNyIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0idGVtcG9yYWwiPgotPGVudHJ5IGtleXdvcmQ9IkdlbmVyYWwgaW5mb3JtYXRpb24iPjx0b3BpYyBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNzdGhyZWYyMzYiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJHZW5lcmFsIGluZm9ybWF0aW9uIj48dG9waWMgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jc3RocmVmMjM4IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ0cmFuc2llbnQgbWFwcGluZyI+Ci08ZW50cnkga2V5d29yZD0iQFRyYW5zaWVudCwgVHJhbnNpZW50IG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxNy5odG0jc3RocmVmMTUyIiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iYWJvdXQsIFRyYW5zaWVudCBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTcuaHRtI3N0aHJlZjE1MCIgLz48L2VudHJ5PgotICA8L2VudHJ5PgotICA8ZW50cnkga2V5d29yZD0idmVyc2lvbiBtYXBwaW5nIj4KLTxlbnRyeSBrZXl3b3JkPSJAVmVyc2lvbiwgVmVyc2lvbiBtYXBwaW5nIj48dG9waWMgaHJlZj0idGFza3MwMTguaHRtI3N0aHJlZjE1NiIgLz48L2VudHJ5PgotPGVudHJ5IGtleXdvcmQ9ImFib3V0LCBWZXJzaW9uIG1hcHBpbmciPjx0b3BpYyBocmVmPSJ0YXNrczAxOC5odG0jc3RocmVmMTU0IiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci0gIDxlbnRyeSBrZXl3b3JkPSJ2aWV3cyI+Ci0gICAgPGVudHJ5IGtleXdvcmQ9IkpQQSBEZXRhaWxzIHZpZXciPgotPGVudHJ5IGtleXdvcmQ9IkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcykiPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNzdGhyZWYyMTEiIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJKUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcykiPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI3N0aHJlZjIyOCIgLz48L2VudHJ5PgotICAgIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iSlBBIFN0cnVjdHVyZSB2aWV3LCBKUEEgU3RydWN0dXJlIHZpZXciPjx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jc3RocmVmMjUzIiAvPjwvZW50cnk+Ci0gIDwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0id2FybmluZyBtZXNzYWdlcyAtIERhbGksIFZhbGlkYXRpbmcgbWFwcGluZ3MgYW5kIHJlcG9ydGluZyBwcm9ibGVtcyI+PHRvcGljIGhyZWY9InRhc2tzMDIxLmh0bSNzdGhyZWYxNjciIC8+PC9lbnRyeT4KLTxlbnRyeSBrZXl3b3JkPSJXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCksIFJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uIj48dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDAxLmh0bSNzdGhyZWY1IiAvPjwvZW50cnk+Ci08ZW50cnkga2V5d29yZD0iWE1MIGVkaXRvciwgV29ya2luZyB3aXRoIG9ybS54bWwgZmlsZSI+PHRvcGljIGhyZWY9InRhc2tzMDA0Lmh0bSNzdGhyZWY2MyIgLz48L2VudHJ5PgotPC9pbmRleD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvbGVnYWwuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL2xlZ2FsLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGViZGJhMS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvbGVnYWwuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5MZWdhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iIExlZ2FsIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0ic3RocmVmMjg3IiBuYW1lPSJzdGhyZWYyODciPjwvYT48L3A+Ci08aDE+TGVnYWw8L2gxPgotPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCAyMDA5LCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgotPHA+VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQ6PC9wPgotPHA+PGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPjwvY29kZT48L3A+Ci08cD48YSBocmVmPSJhYm91dC5odG0iPlRlcm1zIGFuZCBjb25kaXRpb25zIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHRoaXMgZ3VpZGUuPC9hPjwvcD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NWMwODIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gSmF2YSBQZXJzaXN0ZW5jZSBEb2N1bWVudGF0aW9uIC0gRG9jCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwotCi1qcGFEZXZlbG9wbWVudD1KUEEgRGV2ZWxvcG1lbnQKLWNyZWF0ZUFKcGFQcm9qZWN0PUNyZWF0ZSBhIEpQQSBwcm9qZWN0Ci1jcmVhdGVBSnBhUHJvamVjdERlc2NyaXB0aW9uPVRoaXMgY2hlYXQgc2hlZXQgaGVscHMgeW91IGNyZWF0ZSBhIEpQQSBwcm9qZWN0LgotY3JlYXRlQVBlcnNpc3RlbnRFbnRpdHk9Q3JlYXRlIGEgcGVyc2lzdGVudCBlbnRpdHkKLWNyZWF0ZUFQZXJzaXN0ZW50RW50aXR5RGVzY3JpcHRpb249VGhpcyBjaGVhdCBzaGVldCBoZWxwcyB5b3UgY3JlYXRlIGEgSmF2YSBwZXJzaXN0ZW50IGVudGl0eS4KLU1hcEFQZXJzaXN0ZW50RW50aXR5PU1hcCBhIHBlcnNpc3RlbnQgZW50aXR5Ci1NYXBBUGVyc2lzdGVudEVudGl0eURlc2NyaXB0aW9uPVRoaXMgY2hlYXQgc2hlZXQgaGVscHMgeW91IG1hcCB0aGUgYSBKYXZhIHBlcnNpc3RlbnQgZW50aXR5IHRvIGEgZGF0YWJhc2UgdGFibGUuCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcGx1Z2luLnhtbCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTZkM2UxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPCEtLSA9PT09PT09PT09PSAtLT4KLQk8IS0tIERlZmluZSBUT0MgIC0tPgotCTwhLS0gPT09PT09PT09PT0gLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgotCQk8dG9jIGZpbGU9InRvYy54bWwiIHByaW1hcnk9InRydWUiLz4KLQk8L2V4dGVuc2lvbj4KLQk8IS0tID09PT09PT09PT09IC0tPgotCTwhLS0gRGVmaW5lIEYxICAgLS0+Ci0JPCEtLSA9PT09PT09PT09PSAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmNvbnRleHRzIj4KLQkJPGNvbnRleHRzIGZpbGU9ImNvbnRleHRzLnhtbCIgcGx1Z2luPSJvcmcuZWNsaXBzZS5qcHQudWkiLz4KLQk8L2V4dGVuc2lvbj4KLQk8IS0tID09PT09PT09PT09PT09PT09PT09IC0tPgotCTwhLS0gRGVmaW5lIEtleXdvcmQgSW5kZXggLS0+Ci0JPCEtLSA9PT09PT09PT09PT09PT09PT09PSAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLmluZGV4Ij4KLQkJPGluZGV4IGZpbGU9ImluZGV4LnhtbCIvPgotCTwvZXh0ZW5zaW9uPgotCTwhLS0gPT09PT09PT09PT0gLS0+Ci0JPCEtLSBDaGVhdHNoZWV0cyAtLT4KLQk8IS0tID09PT09PT09PT09IC0tPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNoZWF0c2hlZXRzLmNoZWF0U2hlZXRDb250ZW50Ij4KLQkJPGNhdGVnb3J5IG5hbWU9IkpQQSBEZXZlbG9wbWVudCIgaWQ9ImNvbS5qcGEuY2F0ZWdvcnkiLz4KLQkJPGNoZWF0c2hlZXQgbmFtZT0iJWNyZWF0ZUFKcGFQcm9qZWN0IiBjYXRlZ29yeT0iY29tLmpwYS5jYXRlZ29yeSIgY29udGVudEZpbGU9IiRubCQvY2hlYXRzaGVldHMvYWRkX3BlcnNpc3RlbmNlLnhtbCIgaWQ9Im9yZy5lY2xpcHNlLmpwYS5jaGVhdHNoZWV0LmNyZWF0ZXByb2plY3QxIj4KLQkJCTxkZXNjcmlwdGlvbj4lY3JlYXRlQUpwYVByb2plY3REZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+Ci0JCTwvY2hlYXRzaGVldD4KLQkJPGNoZWF0c2hlZXQgbmFtZT0iJWNyZWF0ZUFQZXJzaXN0ZW50RW50aXR5IiBjYXRlZ29yeT0iY29tLmpwYS5jYXRlZ29yeSIgY29udGVudEZpbGU9IiRubCQvY2hlYXRzaGVldHMvY3JlYXRlX2VudGl0eS54bWwiIGlkPSJvcmcuZWNsaXBzZS5qcGEuY2hlYXRzaGVldC5hZGRlbnRpdHkiPgotCQkJPGRlc2NyaXB0aW9uPiVjcmVhdGVBUGVyc2lzdGVudEVudGl0eURlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KLQkJPC9jaGVhdHNoZWV0PgotCQk8Y2hlYXRzaGVldCBuYW1lPSIlTWFwQVBlcnNpc3RlbnRFbnRpdHkiIGNhdGVnb3J5PSJjb20uanBhLmNhdGVnb3J5IiBjb250ZW50RmlsZT0iJG5sJC9jaGVhdHNoZWV0cy9tYXBfZW50aXR5LnhtbCIgaWQ9Im9yZy5lY2xpcHNlLmpwYS5jaGVhdHNoZWV0Lm1hcGVudGl0eSI+Ci0JCQk8ZGVzY3JpcHRpb24+JU1hcEFQZXJzaXN0ZW50RW50aXR5RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgotCQk8L2NoZWF0c2hlZXQ+Ci0JPC9leHRlbnNpb24+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfRW50aXR5Q2xhc3NQYWdlLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFhMjJjZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX0VudGl0eUNsYXNzUGFnZS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5FbnRpdHkgQ2xhc3MgcGFnZTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDlaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRW50aXR5IENsYXNzIHBhZ2UiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFGRUlHRiIgbmFtZT0iQ0lBRkVJR0YiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkVudGl0eSBDbGFzcyBwYWdlPC9oMT4KLTxwPlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEVudGl0eSBDbGFzcyBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLmh0bSNDSUFHR0dERiI+Q3JlYXRlIEpQQSBFbnRpdHkgd2l6YXJkPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJSdWxlSW5mb3JtYWwiIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEVudGl0eSBDbGFzcyBwYWdlIG9mIHRoZSBDcmVhdGUgSlBBIEVudGl0eSB3aXphcmQuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjIyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIxNyUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQ1Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10NSI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDUiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDUiIGhlYWRlcnM9InIxYzEtdDUiPlByb2plY3Q8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQ1IHIxYzItdDUiPlRoZSBuYW1lIG9mIHRoZSBKUEEgcHJvamVjdC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQ1IHIxYzMtdDUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQ1IiBoZWFkZXJzPSJyMWMxLXQ1Ij5Tb3VyY2UgRm9sZGVyPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10NSByMWMyLXQ1Ij5UaGUgbG9jYXRpb24gb2YgdGhlIEpQQSBwcm9qZWN0J3Mgc3JjIGZvbGRlci48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQ1IHIxYzMtdDUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQ1IiBoZWFkZXJzPSJyMWMxLXQ1Ij5KYXZhIFBhY2thZ2U8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQ1IHIxYzItdDUiPlRoZSBuYW1lIG9mIHRoZSBjbGFzcyBwYWNrYWdlLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDUgcjFjMy10NSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDUiIGhlYWRlcnM9InIxYzEtdDUiPkNsYXNzIG5hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQ1IHIxYzItdDUiPlRoZSBuYW1lIG9mIHRoZSBKYXZhIGNsYXNzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDUgcjFjMy10NSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDUiIGhlYWRlcnM9InIxYzEtdDUiPlN1cGVyY2xhc3M8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ1IHIxYzItdDUiPlNlbGVjdCB0aGUgc3VwZXJjbGFzcy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ1IHIxYzMtdDUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyN2MxLXQ1IiBoZWFkZXJzPSJyMWMxLXQ1Ij48YSBpZD0ic3RocmVmMTk0IiBuYW1lPSJzdGhyZWYxOTQiPjwvYT5Jbmhlcml0YW5jZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDUgcjFjMi10NSI+QmVjYXVzZSB0aGUgd2l6YXJkIGNyZWF0ZXMgYSBKYXZhIGNsYXNzIHdpdGggYW4gPGNvZGU+QEVudGl0eTwvY29kZT4gbm90YXRpb24sIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+RW50aXR5PC9zcGFuPiBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwcGVkIFN1cGVyY2xhc3M8L3NwYW4+IGlmIHlvdSBkZWZpbmVkIGEgc3VwZXJjbGFzcy48L3A+Ci08cD5UbyBhZGQgYW4gPGNvZGU+QEluaGVyaXRhbmNlPC9jb2RlPiBub3RhdGlvbiB0byB0aGUgZW50aXR5LCBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkluaGVyaXRhbmNlPC9zcGFuPiBhbmQgdGhlbiBzZWxlY3Qgb25lIG9mIHRoZSBpbmhlcml0YW5jZSBtYXBwaW5nIHN0cmF0ZWdpZXMgKGRlc2NyaWJlZCBpbiBKU1IgMjIwKTo8L3A+Ci08dWw+Ci08bGk+Ci08cD5TSU5HTEVfVEFCTEUgLS0gQWxsIGNsYXNzZXMgaW4gYSBoaWVyYXJjaHkgYXMgbWFwcGVkIHRvIGEgc2luZ2xlIHRhYmxlLiBUaGlzIGFubm90YXRpb24gaXMgd2l0aG91dCBhbiBhdHRyaWJ1dGUgZm9yIHRoZSBpbmhlcml0YW5jZSBzdHJhdGVneS48L3A+Ci08L2xpPgotPGxpPgotPHA+VEFCTEVfUEVSX0NMQVNTIC0tIEVhY2ggY2xhc3MgaXMgbWFwcGVkIHRvIGEgc2VwYXJhdGUgdGFibGUuPC9wPgotPC9saT4KLTxsaT4KLTxwPkpPSU5FRCAtLSBUaGUgcm9vdCBvZiB0aGUgY2xhc3MgaGllcmFyY2h5IGlzIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIHRhYmxlLiBFYWNoIHN1YmNsYXNzIGlzIHJlcHJlc2VudGVkIGJ5IGEgc2VwYXJhdGUgdGFibGUgdGhhdCBjb250YWlucyB0aG9zZSBmaWVsZHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHN1YmNsYXNzIChub3QgaW5oZXJpdGVkIGZyb20gaXRzIHN1cGVyY2xhc3MpLCBhcyB3ZWxsIGFzIHRoZSBjb2x1bW4ocykgdGhhdCByZXByZXNlbnQgaXRzIHByaW1hcnkga2V5LiBUaGUgcHJpbWFyeSBrZXkgY29sdW1uKHMpIG9mIHRoZSBzdWJjbGFzcyB0YWJsZSBzZXJ2ZXMgYXMgYSBmb3JlaWduIGtleSB0byB0aGUgcHJpbWFyeSBrZXkgb2YgdGhlIHN1cGVyY2xhc3MgdGFibGUuPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQ1IHIxYzMtdDUiPkVudGl0eTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQ1IiBoZWFkZXJzPSJyMWMxLXQ1Ij48YSBpZD0ic3RocmVmMTk1IiBuYW1lPSJzdGhyZWYxOTUiPjwvYT5YTUwgRW50aXR5IE1hcHBpbmdzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10NSByMWMyLXQ1Ij5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCB0byBlbnRpdHkgbWFwcGluZ3MgaW4gWE1MPC9zcGFuPiB0byBjcmVhdGUgWE1MIG1hcHBpbmdzIGluIDxjb2RlPm9ybS54bWw8L2NvZGU+LCByYXRoZXIgdGhhbiBhbm5vdGF0aW9ucy4KLTxwPlVzZSB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcHBpbmcgZmlsZTwvc3Bhbj4gZmllbGQgdG8gc3BlY2lmeSB0aGUgZmlsZSB0byB1c2UuIEJ5IGRlZmF1bHQsIG1hcHBpbmdzIGFyZSBzdG9yZWQgaW4gdGhlIDxjb2RlPk1FVEEtSU5GL29ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10NSByMWMzLXQ1Ij48YnIgLz48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfanBhX2VudGl0eV93aXphcmQuaHRtI0NJQUdHR0RGIj5DcmVhdGUgSlBBIEVudGl0eSB3aXphcmQ8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9FbnRpdHlQcm9wZXJ0aWVzUGFnZS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX0VudGl0eVByb3BlcnRpZXNQYWdlLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhY2NhZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX0VudGl0eVByb3BlcnRpZXNQYWdlLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkVudGl0eSBQcm9wZXJ0aWVzIHBhZ2U8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkVudGl0eSBQcm9wZXJ0aWVzIHBhZ2UiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFERUNJQSIgbmFtZT0iQ0lBREVDSUEiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkVudGl0eSBQcm9wZXJ0aWVzIHBhZ2U8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgRW50aXR5IFByb3BlcnRpZXMgcGFnZSBvZiB0aGUgPGEgaHJlZj0icmVmX2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5odG0jQ0lBR0dHREYiPkNyZWF0ZSBKUEEgRW50aXR5IHdpemFyZDwvYT4uPC9wPgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMTk2IiBuYW1lPSJzdGhyZWYxOTYiPjwvYT48YSBpZD0ic3RocmVmMTk3IiBuYW1lPSJzdGhyZWYxOTciPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPiZuYnNwOzwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIHRvIGJlIGNvbnZlcnRlZCB0byBpbmZvcm1hbC4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iaHNpZGVzIiBydWxlcz0iZ3JvdXBzIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDYiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQ2Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10NiI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10NiIgaGVhZGVycz0icjFjMS10NiI+Ci08cD5FbnRpdHkgTmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDYgcjFjMi10NiI+Ci08cD5UaGUgbmFtZSBvZiB0aGUgZW50aXR5LiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgZW50ZXJlZCBhcyB0aGUgY2xhc3MgbmFtZS4gSWYgdGhlIGVudGl0eSBuYW1lIGRpZmZlcnMgZnJvbSB0aGUgY2xhc3MgbmFtZSwgdGhlbiB0aGUgZW50aXR5IG5hbWUgaXMgYWRkZWQgYXMgYW4gYXR0cmlidXRlLiBGb3IgZXhhbXBsZTogPGNvZGU+QEVudGl0eShuYW1lPSJFbnRpdHlOYW1lIik8L2NvZGU+LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDYgcjFjMy10NiI+Ci08cD5EZXRlcm1pbmVkIGJ5IHNlcnZlci48L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10NiIgaGVhZGVycz0icjFjMS10NiI+Ci08cD5UYWJsZSBOYW1lPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10NiByMWMyLXQ2Ij4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+VXNlIGRlZmF1bHQ8L3NwYW4+IHRvIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBtYXBwZWQgdGFibGUgbmFtZSB0byB0aGUgZW50aXR5IG5hbWUuIE90aGVyd2lzZSwgY2xlYXIgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5Vc2UgZGVmYXVsdDwvc3Bhbj4gb3B0aW9uIGFuZCBlbnRlciB0aGUgbmFtZSBpbiB0aGUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+VGFibGUgTmFtZTwvc3Bhbj4gZmllbGQuIFRoZXNlIG9wdGlvbnMgcmVzdWx0IGluIHRoZSBhZGRpdGlvbiBvZiB0aGUgPGNvZGU+QFRhYmxlPC9jb2RlPiBvcHRpb24gdG8gdGhlIEphdmEgY2xhc3MgZmlsZS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQ2IHIxYzMtdDYiPgotPHA+VXNlIGRlZmF1bHQuPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDYiIGhlYWRlcnM9InIxYzEtdDYiPgotPHA+RW50aXR5IEZpZWxkczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDYgcjFjMi10NiI+Ci08cD5DbGljayB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZDwvc3Bhbj4gYnV0dG9uIHRvIGFkZCBwZXJzaXN0ZW5jZSBmaWVsZHMgdXNpbmcgdGhlIEVudGl0eSBGaWVsZHMgZGlhbG9nLiBUaGlzIGRpYWxvZyBlbmFibGUgeW91IHRvIGJ1aWxkIGEgZmllbGQgYnkgZW50ZXJpbmcgYSBmaWVsZCBuYW1lIGFuZCBzZWxlY3RpbmcgYW1vbmcgcGVyc2lzdGVuY2UgdHlwZXMuIFRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+S2V5PC9zcGFuPiBvcHRpb24gZW5hYmxlcyB5b3UgdG8gbWFyayBhIGZpZWxkIGFzIGEgcHJpbWFyeSBrZXkuIFRoZSBkaWFsb2cncyA8c3BhbiBjbGFzcz0iYm9sZCI+QnJvd3NlPC9zcGFuPiBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBhZGQgb3RoZXIgcGVyc2lzdGVuY2UgdHlwZXMgZGVzY3JpYmVkIGluIHRoZSBKUEEgc3BlY2lmaWNhdGlvbi4gVGhlIDxzcGFuIGNsYXNzPSJib2xkIj5FZGl0PC9zcGFuPiBidXR0b24gZW5hYmxlcyB5b3UgdG8gY2hhbmdlIHRoZSBuYW1lIG9yIHR5cGUgc2V0IGZvciBhIHBlcnNpc3RlbnQgZmllbGQuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10NiByMWMzLXQ2Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10NiIgaGVhZGVycz0icjFjMS10NiI+Ci08cD5BY2Nlc3MgVHlwZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDYgcjFjMi10NiI+Ci08cD5TZWxlY3Qgd2hldGhlciB0aGUgZW50aXR5J3MgYWNjZXNzIHRvIGluc3RhbmNlIHZhcmlhYmxlcyBpcyBmaWVsZC1iYXNlZCBvciBwcm9wZXJ0eS1iYXNlZCwgYXMgZGVmaW5lZCBpbiB0aGUgSlBBIHNwZWNpZmljYXRpb24uPC9wPgotPHVsPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkZpZWxkPC9zcGFuPiAmbmRhc2g7IEluc3RhbmNlIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgZGlyZWN0bHkuIEFsbCBub24tdHJhbnNpZW50IGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgcGVyc2lzdGVudC48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPlByb3BlcnR5PC9zcGFuPiAmbmRhc2g7IFBlcnNpc3RlbnQgc3RhdGUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgcHJvcGVydHkgYWNjZXNzb3IgbWV0aG9kcy4gVGhlIHByb3BlcnR5IGFjY2Vzc29yIG1ldGhvZHMgbXVzdCBiZSA8c3BhbiBjbGFzcz0iYm9sZCI+cHVibGljPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iYm9sZCI+cHJpdmF0ZTwvc3Bhbj4uPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQ2IHIxYzMtdDYiPgotPHA+RmllbGQ8L3A+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJ0Ymxmb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcyk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9hZGRfY29udmVydGVyLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfYWRkX2NvbnZlcnRlci5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDhmZWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9hZGRfY29udmVydGVyLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+QWRkIENvbnZlcnRlciBkaWFsb2c8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkFkZCBDb252ZXJ0ZXIgZGlhbG9nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBR0NHSUoiIG5hbWU9IkNJQUdDR0lKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5BZGQgQ29udmVydGVyIGRpYWxvZzwvaDE+Ci08cD5Vc2UgdGhpcyBkaWFsb2cgdG8gY3JlYXRlIGEgbmV3IEVjbGlwc2VMaW5rIGNvbnZlcnRlci48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxocnVsZWluZm9ybWFsbWF4Ij4KLTx0YWJsZSBjbGFzcz0iSFJ1bGVJbmZvcm1hbE1heCIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgb3B0aW9ucyBvbiB0aGUgTmV3IEVjbGlwc2VMaW5rIE1hcHBpbmcgRmlsZSBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9InJvd3MiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MzkiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQzOSI+RGVzY3JpcHRpb248L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDM5IiBoZWFkZXJzPSJyMWMxLXQzOSI+TmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDM5IHIxYzItdDM5Ij5FbnRlciB0aGUgbmFtZSBmb3IgdGhpcyBjb252ZXJ0ZXI8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MzkiIGhlYWRlcnM9InIxYzEtdDM5Ij5UeXBlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MzkgcjFjMi10MzkiPlNlbGVjdCB0aGUgY29udmVydGVyIHR5cGU6Ci08dWw+Ci08bGk+Ci08cD5DdXN0b208L3A+Ci08L2xpPgotPGxpPgotPHA+T2JqZWN0IHR5cGU8L3A+Ci08L2xpPgotPGxpPgotPHA+U3RydWN0PC9wPgotPC9saT4KLTxsaT4KLTxwPlR5cGU8L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGhydWxlaW5mb3JtYWxtYXgiIC0tPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfYXNzb2NpYXRpb25fY2FyZGluYWxpdHkuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9hc3NvY2lhdGlvbl9jYXJkaW5hbGl0eS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTYzOWMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9hc3NvY2lhdGlvbl9jYXJkaW5hbGl0eS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkFzc29jaWF0aW9uIENhcmRpbmFsaXR5PC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJBc3NvY2lhdGlvbiBDYXJkaW5hbGl0eSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUZJSUZIIiBuYW1lPSJDSUFGSUlGSCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+QXNzb2NpYXRpb24gQ2FyZGluYWxpdHk8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjIwOSIgbmFtZT0ic3RocmVmMjA5Ij48L2E+VXNlIHRoaXMgZGlhbG9nIHRvIHNwZWNpZnkgY2FyZGluYWxpdHkgb2YgYW4gYXNzb2NpYXRpb24gdGFibGUuIERlcGVuZGluZyBvbiB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkFzc29jaWF0aW9uIEtpbmQ8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+Sm9pbiBDb2x1bW5zPC9zcGFuPiB0aGF0IHlvdSBzZWxlY3RlZCBwcmV2aW91c2x5LCBzb21lIGFzc29jaWF0aW9ucyBtYXkgbm90IGJlIGF2YWlsYWJsZS48L3A+Ci08dWw+Ci08bGk+Ci08cD5NYW55IHRvIG9uZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5PbmUgdG8gbWFueTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5PbmUgdG8gb25lPC9wPgotPC9saT4KLTxsaT4KLTxwPk1hbnkgdG8gbWFueTwvcD4KLTwvbGk+Ci08L3VsPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2NyZWF0ZV9uZXdfYXNzb2NpYXRpb25fd2l6YXJkLmh0bSNDSUFGR0hJRiI+Q3JlYXRlIE5ldyBBc3NvY2lhdGlvbjwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tzMDE5Lmh0bSNCQUJCQUdGSSI+R2VuZXJhdGluZyBlbnRpdGllcyBmcm9tIHRhYmxlczwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0jQ0lBR0JGSkUiPkdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIFdpemFyZDwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2Fzc29jaWF0aW9uX3RhYmxlLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfYXNzb2NpYXRpb25fdGFibGUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODhjOTk4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfYXNzb2NpYXRpb25fdGFibGUuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Bc3NvY2lhdGlvbiBUYWJsZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUwWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkFzc29jaWF0aW9uIFRhYmxlcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUdKSERDIiBuYW1lPSJDSUFHSkhEQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+QXNzb2NpYXRpb24gVGFibGVzPC9oMT4KLTxwPlVzZSB0aGlzIHBhZ2UgdG8gc3BlY2lmeSB0aGUgYXNzb2NpYXRpb24gdGFibGVzIGZvciBhbiBlbnRpdHkuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBBc3NvY2lhdGlvbiBUYWJsZXMgZGlhbG9nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEFzc29jaWF0aW9uIFRhYmxlcyBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxMiI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDEyIj5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTIiIGhlYWRlcnM9InIxYzEtdDEyIj5Bc3NvY2lhdGlvbiBraW5kPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTIgcjFjMi10MTIiPlNwZWNpZnkgaWYgdGhlIGFzc29jaWF0aW9uIGlzIDxzcGFuIGNsYXNzPSJib2xkIj5TaW1wbGU8L3NwYW4+ICgxOk0pIG9yIDxzcGFuIGNsYXNzPSJib2xkIj5NYW55IHRvIE1hbnk8L3NwYW4+IChNOk0pLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxMiIgaGVhZGVycz0icjFjMS10MTIiPkFzc29jaWF0aW9uIHRhYmxlczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDEyIHIxYzItdDEyIj5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+VGFibGUgU2VsZWN0aW9uPC9zcGFuPiwgdGhlbiBzZWxlY3QgdGhlIHR3byB0YWJsZXMgdG8gYXNzb2NpYXRlLgotPHA+V2hlbiBjcmVhdGluZyBhIDxzcGFuIGNsYXNzPSJib2xkIj5NYW55IHRvIE1hbnk8L3NwYW4+IGFzc29jaWF0aW9uLCB5b3UgY2FuIHNlbGVjdCBhIDxzcGFuIGNsYXNzPSJib2xkIj5Kb2luIFRhYmxlPC9zcGFuPiBmb3IgdGhlIGFzc29jaWF0aW9uLjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0jQ0lBRkdISUYiPkNyZWF0ZSBOZXcgQXNzb2NpYXRpb248L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrczAxOS5odG0jQkFCQkFHRkkiPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfY3JlYXRlX2N1c3RvbV9lbnRpdGllc193aXphcmQuaHRtI0NJQUdCRkpFIj5HZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlcyBXaXphcmQ8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2ZTgxOS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+R2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJHZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlcyBXaXphcmQiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFHQkZKRSIgbmFtZT0iQ0lBR0JGSkUiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIFdpemFyZDwvaDE+Ci08cD5Vc2UgdGhlIEdlbmVyYXRlIEN1c3RvbSBFbnRpdGllcyBXaXphcmQgdG8gY3JlYXRlIGVudGl0aWVzIGZyb20geW91ciBkYXRhYmFzZSB0YWJsZXMuPC9wPgotPHA+VGhlIHdpemFyZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHBhZ2VzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9zZWxlY3RUYWJsZXMuaHRtI0NJQUhDR0VFIj5TZWxlY3QgVGFibGVzPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfdGFibGVBc3NvY2lhdGlvbnMuaHRtI0NJQUNESUNCIj5UYWJsZSBBc3NvY2lhdGlvbnM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbi5odG0jQ0lBRUpEQkUiPkN1c3RvbWl6ZSBEZWZhdWx0IEVudGl0eSBHZW5lcmF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfY3VzdG9taXpJbmRpdmlkdWFsRW50aXRpZXMuaHRtI0NJQUNJR0VFIj5DdXN0b21pemUgSW5kaXZpZHVhbCBFbnRpdGllczwvYT48L3A+Ci08L2xpPgotPC91bD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNWJlZmQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jcmVhdGVfanBhX2VudGl0eV93aXphcmQuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5DcmVhdGUgSlBBIEVudGl0eSB3aXphcmQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNyZWF0ZSBKUEEgRW50aXR5IHdpemFyZCIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUdHR0RGIiBuYW1lPSJDSUFHR0dERiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q3JlYXRlIEpQQSBFbnRpdHkgd2l6YXJkPC9oMT4KLTxwPlRoZSBDcmVhdGUgSlBBIHdpemFyZCBlbmFibGVzIHlvdSB0byBxdWlja2x5IGFkZCBhbiBlbnRpdHkgYW5kIGFsc28gYWRkIHBlcnNpc3RlbmNlIGZpZWxkcyB0byB0aGF0IGVudGl0eS4gSW4gYWRkaXRpb24sIHRoaXMgd2l6YXJkIGFkZHMgdGhlIGFjY2Vzc29yIG1ldGhvZHMgKDxjb2RlPmdldHRlcjwvY29kZT4gYW5kIDxjb2RlPnNldHRlcjwvY29kZT4pIGluIHRoZSBjbGFzcyBmaWxlLiBUaGUgd2l6YXJkIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgcGFnZXM6PC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX0VudGl0eUNsYXNzUGFnZS5odG0jQ0lBRkVJR0YiPkVudGl0eSBDbGFzcyBwYWdlPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfRW50aXR5UHJvcGVydGllc1BhZ2UuaHRtI0NJQURFQ0lBIj5FbnRpdHkgUHJvcGVydGllcyBwYWdlPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMWQxMTYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNyZWF0ZSBOZXcgQXNzb2NpYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUwWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNyZWF0ZSBOZXcgQXNzb2NpYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFGR0hJRiIgbmFtZT0iQ0lBRkdISUYiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkNyZWF0ZSBOZXcgQXNzb2NpYXRpb248L2gxPgotPHA+PGEgaWQ9InN0aHJlZjIwNiIgbmFtZT0ic3RocmVmMjA2Ij48L2E+PGEgaWQ9InN0aHJlZjIwNyIgbmFtZT0ic3RocmVmMjA3Ij48L2E+VXNlIHRoZSBDcmVhdGUgTmV3IEFzc29jaWF0aW9uIHdpemFyZCB0byBzcGVjaWZ5IGFzc29jaWF0aW9uIHRhYmxlcyB3aGVuIGdlbmVyYXRpbmcgYW4gZW50aXR5LjwvcD4KLTxwPlRoZSB3aXphcmQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBwYWdlczo8L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfYXNzb2NpYXRpb25fdGFibGUuaHRtI0NJQUdKSERDIj5Bc3NvY2lhdGlvbiBUYWJsZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9qb2luX2NvbHVtbnMuaHRtI0NJQUVHRUVHIj5Kb2luIENvbHVtbnM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9hc3NvY2lhdGlvbl9jYXJkaW5hbGl0eS5odG0jQ0lBRklJRkgiPkFzc29jaWF0aW9uIENhcmRpbmFsaXR5PC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfY3VzdG9taXpJbmRpdmlkdWFsRW50aXRpZXMuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jdXN0b21pekluZGl2aWR1YWxFbnRpdGllcy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzBlNDIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jdXN0b21pekluZGl2aWR1YWxFbnRpdGllcy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkN1c3RvbWl6ZSBJbmRpdmlkdWFsIEVudGl0aWVzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJDdXN0b21pemUgSW5kaXZpZHVhbCBFbnRpdGllcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUNJR0VFIiBuYW1lPSJDSUFDSUdFRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q3VzdG9taXplIEluZGl2aWR1YWwgRW50aXRpZXM8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjIwNSIgbmFtZT0ic3RocmVmMjA1Ij48L2E+VXNlIHRoaXMgcGFnZSB0byBjdXN0b21pemUgZWFjaCBnZW5lcmF0ZWQgZW50aXR5LiBTZWxlY3QgYW4gaXRlbSBpbiB0aGUgVGFibGUgYW5kIGNvbHVtbnMgYXJlYSwgdGhlbiBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIGZpZWxkcyBmb3IgZWFjaCBpdGVtLjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibGluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgSW5kaXZpZHVhbCBFbnRpdGllcyBkaWFsb2cuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgSW5kaXZpZHVhbCBFbnRpdGllcyBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxMSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDExIj5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTEiIGhlYWRlcnM9InIxYzEtdDExIj5UYWJsZSBNYXBwaW5nPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTEgcjFjMi10MTEiPlVzZSB0aGVzZSBvcHRpb25zIHRvIGRlZmluZSB0aGUgdGFibGUgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGVudGl0eS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MTEiIGhlYWRlcnM9InIxYzEtdDExIj4mbmJzcDsmbmJzcDtLZXkmbmJzcDtnZW5lcmF0b3I8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxMSByMWMyLXQxMSI+U2VsZWN0IHRoZSBnZW5lcmF0b3IgdXNlZCBmb3IgdGhpcyBtYXBwaW5nLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQxMSIgaGVhZGVycz0icjFjMS10MTEiPiZuYnNwOyZuYnNwO1NlcXVlbmNlJm5ic3A7bmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDExIHIxYzItdDExIj5FbnRlciBhIG5hbWUgZm9yIHRoZSBzZXF1ZW5jZS4KLTxwPllvdSBjYW4gdXNlIDxzcGFuIGNsYXNzPSJib2xkIj4kdGFibGU8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+JHBrPC9zcGFuPiBhcyB2YXJpYWJsZXMgaW4gdGhlIG5hbWUuIFRoZXNlIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHRhYmxlIG5hbWUgYW5kIHByaW1hcnkga2V5IGNvbHVtbiBuYW1lIChyZXNwZWN0aXZlbHkpIHdoZW4gRGFsaSBnZW5lcmF0ZXMgYSB0YWJsZSBtYXBwaW5nLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQxMSIgaGVhZGVycz0icjFjMS10MTEiPiZuYnNwOyZuYnNwO0VudGl0eSZuYnNwO2FjY2VzczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDExIHIxYzItdDExIj5TcGVjaWZ5IHRoZSBkZWZhdWx0IGVudGl0eSBhY2Nlc3MgbWV0aG9kOiA8c3BhbiBjbGFzcz0iYm9sZCI+RmllbGQ8L3NwYW4+IChkZWZhdWx0KSBvciA8c3BhbiBjbGFzcz0iYm9sZCI+UHJvcGVydHk8L3NwYW4+LjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQxMSIgaGVhZGVycz0icjFjMS10MTEiPkRvbWFpbiBKYXZhIENsYXNzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTEgcjFjMi10MTEiPlVzZSB0aGVzZSBvcHRpb25zIHRvIGRlZmluZSB0aGUgY2xhc3MgaW5mb3JtYXRpb24gKDxzcGFuIGNsYXNzPSJib2xkIj5TdXBlcmNsYXNzPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPkludGVyZmFjZXM8L3NwYW4+KSBmb3IgdGhlIGVudGl0eS48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bSNCQUJGQkpCRyI+Q3JlYXRpbmcgYSBKUEEgRW50aXR5PC9hPjxiciAvPgotPGEgaHJlZj0idGFza3MwMTkuaHRtI0JBQkJBR0ZJIj5HZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzPC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcyk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSNDSUFHQkZKRSI+R2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC9hPgotPHA+Jm5ic3A7PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2N1c3RvbWl6ZURlZmF1bHRFbnRpdHlHZW5lcmF0aW9uLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxNjQ2Ni4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2N1c3RvbWl6ZURlZmF1bHRFbnRpdHlHZW5lcmF0aW9uLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q3VzdG9taXplIERlZmF1bHQgRW50aXR5IEdlbmVyYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUwWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkN1c3RvbWl6ZSBEZWZhdWx0IEVudGl0eSBHZW5lcmF0aW9uIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBRUpEQkUiIG5hbWU9IkNJQUVKREJFIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5DdXN0b21pemUgRGVmYXVsdCBFbnRpdHkgR2VuZXJhdGlvbjwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjA0IiBuYW1lPSJzdGhyZWYyMDQiPjwvYT5Vc2UgdGhpcyBwYWdlIHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgaW5mb3JtYXRpb24gRGFsaSB3aWxsIHVzZSB3aGVuIGdlbmVyYXRpbmcgdGhlIGVudGl0aWVzIGZyb20gdGhlIGRhdGFiYXNlIHRhYmxlcy4gWW91IHdpbGwgYmUgYWJsZSB0byBvdmVycmlkZSB0aGlzIGluZm9ybWF0aW9uIGZvciBzcGVjaWZpYyBlbnRpdGllcy48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEdlbmVyYXRlIEVudGl0aWVzIGRpYWxvZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBDdXN0b20gRGVmYXVsdCBFbnRpdHkgR2VuZXJhdGlvbiBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxMCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDEwIj5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTAiIGhlYWRlcnM9InIxYzEtdDEwIj5UYWJsZSBNYXBwaW5nPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTAgcjFjMi10MTAiPlVzZSB0aGVzZSBvcHRpb25zIHRvIGRlZmluZSB0aGUgdGFibGUgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGVudGl0eS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MTAiIGhlYWRlcnM9InIxYzEtdDEwIj4mbmJzcDsmbmJzcDtLZXkmbmJzcDtnZW5lcmF0b3I8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxMCByMWMyLXQxMCI+U2VsZWN0IHRoZSBnZW5lcmF0b3IgdXNlZCBmb3IgdGhpcyBtYXBwaW5nLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQxMCIgaGVhZGVycz0icjFjMS10MTAiPiZuYnNwOyZuYnNwO1NlcXVlbmNlJm5ic3A7bmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDEwIHIxYzItdDEwIj5FbnRlciBhIG5hbWUgZm9yIHRoZSBzZXF1ZW5jZS4KLTxwPllvdSBjYW4gdXNlIDxzcGFuIGNsYXNzPSJib2xkIj4kdGFibGU8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+JHBrPC9zcGFuPiBhcyB2YXJpYWJsZXMgaW4gdGhlIG5hbWUuIFRoZXNlIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHRhYmxlIG5hbWUgYW5kIHByaW1hcnkga2V5IGNvbHVtbiBuYW1lIChyZXNwZWN0aXZlbHkpIHdoZW4gRGFsaSBnZW5lcmF0ZXMgYSB0YWJsZSBtYXBwaW5nLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQxMCIgaGVhZGVycz0icjFjMS10MTAiPiZuYnNwOyZuYnNwO0VudGl0eSZuYnNwO2FjY2VzczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDEwIHIxYzItdDEwIj5TcGVjaWZ5IHRoZSBkZWZhdWx0IGVudGl0eSBhY2Nlc3MgbWV0aG9kOiA8c3BhbiBjbGFzcz0iYm9sZCI+RmllbGQ8L3NwYW4+IChkZWZhdWx0KSBvciA8c3BhbiBjbGFzcz0iYm9sZCI+UHJvcGVydHk8L3NwYW4+LjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQxMCIgaGVhZGVycz0icjFjMS10MTAiPiZuYnNwOyZuYnNwO0Fzc29jaWF0aW9ucyZuYnNwO2ZldGNoPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTAgcjFjMi10MTAiPlNwZWNpZnkgdGhlIGRlZmF1bHQgZmV0Y2ggbW9kZSBmb3IgYXNzb2NpYXRpb25zOiA8c3BhbiBjbGFzcz0iYm9sZCI+RGVmYXVsdDwvc3Bhbj4sIGFzIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uIChkZWZhdWx0KSwgb3IgPHNwYW4gY2xhc3M9ImJvbGQiPkxhenk8L3NwYW4+LjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyN2MxLXQxMCIgaGVhZGVycz0icjFjMS10MTAiPiZuYnNwOyZuYnNwO0NvbGxlY3Rpb24mbmJzcDt0eXBlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTAgcjFjMi10MTAiPlNwZWNpZnkgaWYgdGhlIGNvbGxlY3Rpb24gcHJvcGVydGllcyBhcmUgYSA8c3BhbiBjbGFzcz0iYm9sZCI+U2V0PC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iYm9sZCI+TGlzdDwvc3Bhbj4uCi08cD5FbmFibGUgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5BbHdheXMgZ2VuZXJhdGUgb3B0aW9uYWwgSlBBIGFubm90YXRpb25zIGFuZCBEREwgcGFyYW1ldGVyczwvc3Bhbj4gb3B0aW9uIHRvIGhhdmUgRGFsaSBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIGVudGl0eS48L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjhjMS10MTAiIGhlYWRlcnM9InIxYzEtdDEwIj5Eb21haW4gSmF2YSBDbGFzczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDEwIHIxYzItdDEwIj5Vc2UgdGhlc2Ugb3B0aW9ucyB0byBkZWZpbmUgdGhlIGNsYXNzIGluZm9ybWF0aW9uICg8c3BhbiBjbGFzcz0iYm9sZCI+UGFja2FnZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJib2xkIj5TdXBlcmNsYXNzPC9zcGFuPiwgYW5kIDxzcGFuIGNsYXNzPSJib2xkIj5JbnRlcmZhY2VzPC9zcGFuPikgZm9yIHRoZSBlbnRpdHkuPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tzMDE5Lmh0bSNCQUJCQUdGSSI+R2VuZXJhdGluZyBlbnRpdGllcyBmcm9tIHRhYmxlczwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0jQ0lBR0JGSkUiPkdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIFdpemFyZDwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2RldGFpbHNfb3JtLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfZGV0YWlsc19vcm0uaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzBiODU3Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfZGV0YWlsc19vcm0uaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5KUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCk8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkpQQSBEZXRhaWxzIHZpZXcgKGZvciBvcm0ueG1sKSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0dER0hDIiBuYW1lPSJDQUNHREdIQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+SlBBIERldGFpbHMgdmlldyAoZm9yIG9ybS54bWwpPC9oMT4KLTxwPlRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcgZGlzcGxheXMgdGhlIGRlZmF1bHQgbWFwcGluZyBhbmQgcGVyc2lzdGVuY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBwcm9qZWN0IGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGFyZWFzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxMy5odG0jQ0FDQ0FDR0giPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxNC5odG0jQ0FDRUFHQkciPlBlcnNpc3RlbmNlIFVuaXQgaW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxNS5odG0jQ0lBRkdBSUoiPkdlbmVyYXRvcnM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxNi5odG0jQ0lBSUJBQUoiPlF1ZXJpZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxNy5odG0jQ0lBREdDSUQiPkNvbnZlcnRlcnM8L2E+ICh3aGVuIHVzaW5nIEVjbGlwc2VMaW5rKTwvcD4KLTwvbGk+Ci08L3VsPgotPHA+VGhlc2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHNldHRpbmdzIG9uIGEgc3BlY2lmaWMgZW50aXR5IG9yIG1hcHBpbmcuPC9wPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfZWNsaXBzZWxpbmtfbWFwcGluZ19maWxlLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfZWNsaXBzZWxpbmtfbWFwcGluZ19maWxlLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU5MzliMC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2VjbGlwc2VsaW5rX21hcHBpbmdfZmlsZS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk5ldyBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGUgZGlhbG9nPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJOZXcgRWNsaXBzZUxpbmsgTWFwcGluZyBGaWxlIGRpYWxvZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUVERUpGIiBuYW1lPSJDSUFFREVKRiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+TmV3IEVjbGlwc2VMaW5rIE1hcHBpbmcgRmlsZSBkaWFsb2c8L2gxPgotPHA+U3BlY2lmeSB0aGUgbG9jYXRpb24gYW5kIHByb3BlcnRpZXMgb2YgdGhlIEVjbGlwc2VMaW5rIG1hcHBpbmcgZmlsZSAoPGNvZGU+ZWNsaXNwZWxpbmstb3JtLnhtbDwvY29kZT4pLjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibGhydWxlaW5mb3JtYWxtYXgiPgotPHRhYmxlIGNsYXNzPSJIUnVsZUluZm9ybWFsTWF4IiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBvcHRpb25zIG9uIHRoZSBOZXcgRWNsaXBzZUxpbmsgTWFwcGluZyBGaWxlIGRpYWxvZy4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iaHNpZGVzIiBydWxlcz0icm93cyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQzOCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDM4Ij5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MzgiIGhlYWRlcnM9InIxYzEtdDM4Ij5Qcm9qZWN0PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzggcjFjMi10MzgiPlNlbGVjdCB0aGUgcHJvamVjdCBpbiB3aGljaCB0byBhZGQgdGhlIG1hcHBpbmcgZmlsZS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MzgiIGhlYWRlcnM9InIxYzEtdDM4Ij5Tb3VyY2UgZm9sZGVyPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MzggcjFjMi10MzgiPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5Ccm93c2U8L3NwYW4+IGFuZCBzZWxlY3QgdGhlIHNvdXJjZSBmaWxlIGluIHdoaWNoIHRvIGFkZCB0aGUgbWFwcGluZyBmaWxlLiBUaGUgZGVmYXVsdCBpcyA8Y29kZT4uLi88L2NvZGU+PGNvZGU+PHNwYW4gY2xhc3M9ImNvZGVpbmxpbmVpdGFsaWMiPiZsdDtQUk9KRUNUJmd0Ozwvc3Bhbj48L2NvZGU+PGNvZGU+L3NyYzwvY29kZT4uPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDM4IiBoZWFkZXJzPSJyMWMxLXQzOCI+RmlsZSBwYXRoPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MzggcjFjMi10MzgiPkVudGVyIHRoZSBmaWxlbmFtZSBhbmQgcGF0aCBvZiB0aGUgbWFwcGluZyBmaWxlLiBUaGUgZGVmYXVsdCBpcyA8Y29kZT5NRVRBLUlORi9lY2xpcHNlbGluay1vcm0ueG1sPC9jb2RlPi48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MzgiIGhlYWRlcnM9InIxYzEtdDM4Ij5EZWZhdWx0IGFjY2VzczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDM4IHIxYzItdDM4Ij5TZWxlY3Qgd2hldGhlciB0aGUgZW50aXR5J3MgYWNjZXNzIHRvIGluc3RhbmNlIHZhcmlhYmxlcyBpcyA8c3BhbiBjbGFzcz0iYm9sZCI+ZmllbGQ8L3NwYW4+LWJhc2VkIG9yIDxzcGFuIGNsYXNzPSJib2xkIj5wcm9wZXJ0eTwvc3Bhbj4tYmFzZWQsIGFzIGRlZmluZWQgaW4gdGhlIEpQQSBzcGVjaWZpY2F0aW9uLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQzOCIgaGVhZGVycz0icjFjMS10MzgiPkFkZCB0byBwZXJzaXN0ZW5jZSB1bml0PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MzggcjFjMi10MzgiPlNwZWNpZnkgaWYgdGhpcyBtYXBwaW5nIGZpbGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBwZXJzaXN0ZW5jZSB1bml0ICg8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+KS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjdjMS10MzgiIGhlYWRlcnM9InIxYzEtdDM4Ij4mbmJzcDsmbmJzcDtQZXJzaXN0ZW5jZSZuYnNwO1VuaXQ8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQzOCByMWMyLXQzOCI+U2VsZWN0IHRoZSBwZXJzaXN0ZW5jZSB1bml0IGluIHdoaWNoIHRvIGFkZCB0aGUgbWFwcGluZyBmaWxlLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGhydWxlaW5mb3JtYWxtYXgiIC0tPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZmVyZW5jZTAwMy5odG0jQ0lBSkVJREoiPk1hcHBpbmcgRmlsZTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2phdmFfcGFnZS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2phdmFfcGFnZS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NGU0ZmMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9qYXZhX3BhZ2UuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5KYXZhIFBhZ2U8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkphdmEgUGFnZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUdFQkFBIiBuYW1lPSJDSUFHRUJBQSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+SmF2YSBQYWdlPC9oMT4KLTxwPlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgYXZhaWxhYmxlIG9uIHRoZSBKYXZhIHBhZ2Ugb2YgdGhlIDxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSNDQUNCSkdCRyI+Q3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQ8L2E+LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibGluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgR2VuZXJhdGUgRERMIC0gT2JqZWN0cyBwYWdlLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEdlbmVyYXRlIERETCAtIE9iamVjdHMgcGFnZS4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjI1JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDMiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQzIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MyI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MyIgaGVhZGVycz0icjFjMS10MyI+U291cmNlIGZvbGRlcnMgb24gYnVpbGQgcGF0aDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDMgcjFjMi10MyI+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCBGb2xkZXI8L3NwYW4+IHRvIHNlbGVjdCBhbiBleGlzdGluZyBKYXZhIHNvdXJjZSBmb2xkZXIgdG8gYWRkIHRvIHRoaXMgcHJvamVjdC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQzIHIxYzMtdDMiPkVjbGlwc2VMaW5rPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDMiIGhlYWRlcnM9InIxYzEtdDMiPkRlZmF1bHQgb3V0cHV0IGZvbGRlcjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDMgcjFjMi10MyI+U3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlJm5ic3A7PGNvZGU+LmNsYXNzPC9jb2RlPiBmaWxlcy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQzIHIxYzMtdDMiPmJ1aWxkXGNsYXNzZXM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdF93aXphcmQuaHRtI0NBQ0JKR0JHIj5DcmVhdGUgTmV3IEpQQSBQcm9qZWN0IHdpemFyZDwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2pvaW5fY29sdW1ucy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX2pvaW5fY29sdW1ucy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNGFlOGQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9qb2luX2NvbHVtbnMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Kb2luIENvbHVtbnM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUwWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkpvaW4gQ29sdW1ucyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUVHRUVHIiBuYW1lPSJDSUFFR0VFRyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Sm9pbiBDb2x1bW5zPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyMDgiIG5hbWU9InN0aHJlZjIwOCI+PC9hPlVzZSB0aGlzIGRpYWxvZyB0byBzcGVjaWZ5IHRoZSBqb2luIGNvbHVtbnMgb2YgYW4gYXNzb2NpYXRpb24gdGFibGUuPC9wPgotPHA+Q2xpY2sgQWRkIHRvIHNwZWNpZnkgdGhlIGpvaW4gY29sdW1ucyBiZXR3ZWVuIHRoZSB0d28gdGFibGVzLjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0jQ0lBRkdISUYiPkNyZWF0ZSBOZXcgQXNzb2NpYXRpb248L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrczAxOS5odG0jQkFCQkFHRkkiPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfY3JlYXRlX2N1c3RvbV9lbnRpdGllc193aXphcmQuaHRtI0NJQUdCRkpFIj5HZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlcyBXaXphcmQ8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9qcGFfZmFjZXQuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9qcGFfZmFjZXQuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmIxNTJmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfanBhX2ZhY2V0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkpQQSBGYWNldCBwYWdlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJKUEEgRmFjZXQgcGFnZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0lGRElGIiBuYW1lPSJDQUNJRkRJRiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+SlBBIEZhY2V0IHBhZ2U8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgcHJvcGVydGllcyBhdmFpbGFibGUgb24gdGhlIEpQQSBGYWNldCBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0jQ0FDQkpHQkciPkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEdlbmVyYXRlIERETCAtIE9iamVjdHMgcGFnZS4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBHZW5lcmF0ZSBEREwgLSBPYmplY3RzIHBhZ2UuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyNSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQ0Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10NCI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDQiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDQiIGhlYWRlcnM9InIxYzEtdDQiPlBsYXRmb3JtPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10NCByMWMyLXQ0Ij5WZW5kb3Itc3BlY2lmaWMgSlBBIGltcGxlbWVudGF0aW9uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDQgcjFjMy10NCI+RWNsaXBzZUxpbms8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10NCIgaGVhZGVycz0icjFjMS10NCI+PGEgaWQ9InN0aHJlZjE5MCIgbmFtZT0ic3RocmVmMTkwIj48L2E+PGEgaWQ9InN0aHJlZjE5MSIgbmFtZT0ic3RocmVmMTkxIj48L2E+SlBBIEltcGxlbWVudGF0aW9uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10NCByMWMyLXQ0Ij5TZWxlY3QgYSBzcGVjaWZpYyBKUEEgbGlicmFyeSBjb25maWd1cmF0aW9uLgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk1hbmFnZSBsaWJyYXJpZXM8L3NwYW4+IHRvIGNyZWF0ZSBvciB1cGRhdGUgYSB1c2VyIGxpYnJhcnkuPC9wPgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkRvd25sb2FkIGxpYnJhcmllczwvc3Bhbj4gdG8gZG93bmxvYWQgYSBzcGVjaWZpYyBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10NCByMWMzLXQ0Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10NCIgaGVhZGVycz0icjFjMS10NCI+Jm5ic3A7Jm5ic3A7VHlwZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDQgcjFjMi10NCI+U2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5Vc2VyIExpYnJhcnk8L3NwYW4+IHRvIHNlbGVjdCBmcm9tIHRoZSBhdmFpbGFibGUgdXNlci1kZWZpbmVkIG9yIGRvd25sb2FkZWQgbGlicmFyaWVzLgotPHA+SWYgeW91IHNlbGVjdCBEaXNhYmxlLCB5b3UgbXVzdCBtYW51YWxseSBpbmNsdWRlIHRoZSBKUEEgaW1wbGVtZW50YXRpb24gbGlicmFyeSBvbiB0aGUgcHJvamVjdCBjbGFzc3BhdGguPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10NCByMWMzLXQ0Ij5Vc2VyIExpYnJhcnk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10NCIgaGVhZGVycz0icjFjMS10NCI+Jm5ic3A7Jm5ic3A7SW5jbHVkZSBsaWJyYXJpZXMgd2l0aCB0aGlzIGFwcGxpY2F0aW9uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10NCByMWMyLXQ0Ij5TcGVjaWZ5IGlmIHRoZSBzZWxlY3RlZCBsaWJyYXJpZXMgYXJlIGluY2x1ZGVkIHdoZW4gZGVwbG95aW5nIHRoZSBhcHBsaWNhdGlvbi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQ0IHIxYzMtdDQiPlNlbGVjdGVkPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDQiIGhlYWRlcnM9InIxYzEtdDQiPkNvbm5lY3Rpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ0IHIxYzItdDQiPlNlbGVjdCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB1c2Ugd2l0aCB0aGUgcHJvamVjdC4gRGFsaSByZXF1aXJlcyBhbiBhY3RpdmUgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB1c2UgYW5kIHZhbGlkYXRlIHRoZSBwZXJzaXN0ZW50IGVudGl0aWVzIGFuZCBtYXBwaW5ncy4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQgY29ubmVjdGlvbjwvc3Bhbj4gdG8gY3JlYXRlIGEgbmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10NCByMWMzLXQ0Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjdjMS10NCIgaGVhZGVycz0icjFjMS10NCI+Jm5ic3A7Jm5ic3A7T3ZlcnJpZGUmbmJzcDtkZWZhdWx0IHNjaGVtYSBmcm9tIGNvbm5lY3Rpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQ0IHIxYzItdDQiPlNlbGVjdCBhIHNjaGVtYSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IG9uZSB0aGF0IGlzIGRlcml2ZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbi4gVXNlIHRoaXMgb3B0aW9uIGlmIHRoZSBkZWZhdWx0IHNjaGVtYSBjYW5ub3QgYmUgdXNlZC4gRm9yIGV4YW1wbGUsIHVzZSB0aGlzIG9wdGlvbiB3aGVuIHRoZSBkZXBsb3ltZW50IGxvZ2luIGRpZmZlcnMgZnJvbSB0aGUgZGVzaWduLXRpbWUgbG9naW4uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10NCByMWMzLXQ0Ij5UaGUgdmFsdWUgY2FsY3VsYXRlZCBieSBEYWxpLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQ0IiBoZWFkZXJzPSJyMWMxLXQ0Ij5KUEEgSW1wbGVtZW50YXRpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQ0IHIxYzItdDQiPlNlbGVjdCB0byB1c2UgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5KUEEgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIHNlcnZlciBhdCBydW50aW1lPC9zcGFuPiwgb3Igc2VsZWN0IGEgc3BlY2lmaWMgPHNwYW4gY2xhc3M9ImJvbGQiPmltcGxlbWVudGF0aW9uIGxpYnJhcnk8L3NwYW4+IHRoYXQgY29udGFpbiB0aGUgSmF2YSBQZXJzaXN0ZW5jZSBBUEkgKEpQQSkgYW5kIGVudGl0aWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBwcm9qZWN0J3MgSmF2YSBCdWlsZCBQYXRoLgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkNvbmZpZ3VyZSBkZWZhdWx0IEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5PC9zcGFuPiB0byBjcmVhdGUgYSBkZWZhdWx0IGxpYnJhcnkgZm9yIHRoZSBwcm9qZWN0IG9yIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5Db25maWd1cmUgdXNlciBsaWJyYXJpZXM8L3NwYW4+IHRvIGRlZmluZSBhZGRpdGlvbmFsIGxpYnJhcmllcy48L3A+Ci08cD5EZXBlbmRpbmcgb24geW91ciBKUEEgaW1wbGVtZW50YXRpb24gKGZvciBleGFtcGxlLCBHZW5lcmljIG9yIEVjbGlwc2VMaW5rKSwgZGlmZmVyZW50IG9wdGlvbnMgbWF5IGJlIGF2YWlsYWJsZSB3aGVuIHdvcmtpbmcgd2l0aCBKUEEgcHJvamVjdHMuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10NCByMWMzLXQ0Ij5EZXRlcm1pbmVkIGJ5IHNlcnZlci48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjljMS10NCIgaGVhZGVycz0icjFjMS10NCI+PGEgaWQ9InN0aHJlZjE5MiIgbmFtZT0ic3RocmVmMTkyIj48L2E+UGVyc2lzdGVudCBjbGFzcyBtYW5hZ2VtZW50PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjljMS10NCByMWMyLXQ0Ij5TcGVjaWZ5IGlmIERhbGkgd2lsbCA8c3BhbiBjbGFzcz0iYm9sZCI+ZGlzY292ZXIgYW5ub3RhdGVkIGNsYXNzZXMgYXV0b21hdGljYWxseTwvc3Bhbj4sIG9yIGlmIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+YW5ub3RhdGVkIGNsYXNzZXMgbXVzdCBiZSBsaXN0ZWQgaW4gdGhlIHBlcnNpc3RlbmNlLnhtbDwvc3Bhbj4gZmlsZS4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5Ob3RlPC9zcGFuPjogVG8gaW5zdXJlIGFwcGxpY2F0aW9uIHBvcnRhYmlsaXR5LCB5b3Ugc2hvdWxkIGV4cGxpY2l0bHkgbGlzdCB0aGUgbWFuYWdlZCBwZXJzaXN0ZW5jZSBjbGFzc2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDQgcjFjMy10NCI+RGV0ZXJtaW5lZCBieSBzZXJ2ZXIuPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMGMxLXQ0IiBoZWFkZXJzPSJyMWMxLXQ0Ij48YSBpZD0ic3RocmVmMTkzIiBuYW1lPSJzdGhyZWYxOTMiPjwvYT5DcmVhdGUgPGNvZGU+b3JtLnhtbDwvY29kZT48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTBjMS10NCByMWMyLXQ0Ij5TcGVjaWZ5IGlmIERhbGkgc2hvdWxkIGNyZWF0ZSBhIGRlZmF1bHQgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZSBmb3IgeW91ciBlbnRpdHkgbWFwcGluZ3MgYW5kIHBlcnNpc3RlbmNlIHVuaXQgZGVmYXVsdHMuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEwYzEtdDQgcjFjMy10NCI+U2VsZWN0ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdF93aXphcmQuaHRtI0NBQ0JKR0JHIj5DcmVhdGUgTmV3IEpQQSBQcm9qZWN0IHdpemFyZDwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX21hcHBpbmdfZ2VuZXJhbC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX21hcHBpbmdfZ2VuZXJhbC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOTdjMzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9tYXBwaW5nX2dlbmVyYWwuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+R2VuZXJhbCBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iR2VuZXJhbCBpbmZvcm1hdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0JIRklKIiBuYW1lPSJDQUNCSEZJSiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+R2VuZXJhbCBpbmZvcm1hdGlvbjwvaDE+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBHZW5lcmFsIHByb3BlcnRpZXMgYXZhaWxhYmxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SmF2YSBEZXRhaWxzIHZpZXc8L3NwYW4+IGZvciBlYWNoIG1hcHBpbmcgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJSdWxlSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldy4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjElIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjI3JSIgLz4KLTxjb2wgd2lkdGg9IjIxJSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDE2Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTYiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxNiI+RGVmYXVsdDwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjNC10MTYiPkF2YWlsYWJsZSBmb3IgTWFwcGluZyBUeXBlPC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxNiIgaGVhZGVycz0icjFjMS10MTYiPk1hcHBpbmcgVHlwZSBIeXBlcmxpbms8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxNiByMWMyLXQxNiI+Q2xpY2tpbmcgdGhlIG5hbWUgb2YgdGhlIG1hcHBpbmcgdHlwZSwgd2hpY2ggaXMgcmVwcmVzZW50ZWQgYXMgYSBoeXBlcmxpbmssIGludm9rZXMgdGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nLiBVc2UgdGhpcyBkaWFsb2cgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBhdHRyaWJ1dGUuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTYgcjFjMy10MTYiPkJhc2ljPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTYgcjFjNC10MTYiPkFsbCBtYXBwaW5nIHR5cGVzPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDE2IiBoZWFkZXJzPSJyMWMxLXQxNiI+PGEgaWQ9IkNBQ0dDQkhCIiBuYW1lPSJDQUNHQ0JIQiI+PC9hPkNvbHVtbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE2IHIxYzItdDE2Ij48YSBpZD0ic3RocmVmMjMwIiBuYW1lPSJzdGhyZWYyMzAiPjwvYT48YSBpZD0ic3RocmVmMjMxIiBuYW1lPSJzdGhyZWYyMzEiPjwvYT5UaGUgZGF0YWJhc2UgY29sdW1uIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlLiBUaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5AQ29sdW1uPC9jb2RlPiBhbm5vdGF0aW9uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE2IHIxYzMtdDE2Ij5CeSBkZWZhdWx0LCB0aGUgQ29sdW1uIGlzIGFzc3VtZWQgdG8gYmUgbmFtZWQgaWRlbnRpY2FsbHkgdG8gdGhlIGF0dHJpYnV0ZS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTAuaHRtI0JBQkNCSERGIj5FbWJlZGRlZCBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTguaHRtI0JBQkhJQklJIj5WZXJzaW9uIG1hcHBpbmc8L2E+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDE2IiBoZWFkZXJzPSJyMWMxLXQxNiI+Jm5ic3A7Jm5ic3A7TmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE2IHIxYzItdDE2Ij5OYW1lIG9mIHRoZSBkYXRhYmFzZSBjb2x1bW4uCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5AQ29sdW1uPC9jb2RlPiBhbm5vdGF0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE2IHIxYzMtdDE2Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTAuaHRtI0JBQkNCSERGIj5FbWJlZGRlZCBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQxNiIgaGVhZGVycz0icjFjMS10MTYiPiZuYnNwOyZuYnNwO1RhYmxlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTYgcjFjMi10MTYiPk5hbWUgb2YgdGhlIGRhdGFiYXNlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIGNvbHVtbi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQxNiByMWMzLXQxNiI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyI+SUQgbWFwcGluZzwvYT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjZjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij4mbmJzcDsmbmJzcDtJbnNlcnRhYmxlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTYgcjFjMi10MTYiPlNwZWNpZmllcyBpZiB0aGUgY29sdW1uIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiA8Y29kZT5TUUwgSU5TRVJUPC9jb2RlPiBzdGF0ZW1lbnRzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDE2IHIxYzMtdDE2Ij5UcnVlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyI+SUQgbWFwcGluZzwvYT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjdjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij4mbmJzcDsmbmJzcDtVcGRhdGFibGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQxNiByMWMyLXQxNiI+U3BlY2lmaWVzIGlmIHRoaXMgY29sdW1uIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiA8Y29kZT5TUUwgVVBEQVRFPC9jb2RlPiBzdGF0ZW1lbnRzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDE2IHIxYzMtdDE2Ij5UcnVlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyI+SUQgbWFwcGluZzwvYT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjhjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij4mbmJzcDsmbmJzcDtVbmlxdWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQxNiByMWMyLXQxNiI+U2V0cyB0aGUgPGNvZGU+VU5JUVVFPC9jb2RlPiBjb25zdHJhaW50IGZvciB0aGUgY29sdW1uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE2IHIxYzMtdDE2Ij5GYWxzZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE2IHIxYzQtdDE2Ij48YSBocmVmPSJ0YXNrczAwOS5odG0jQkFCQkFCQ0UiPkJhc2ljIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMC5odG0jQkFCQ0JIREYiPkVtYmVkZGVkIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMi5odG0jQkFCR0NCSEciPklEIG1hcHBpbmc8L2E+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI5YzEtdDE2IiBoZWFkZXJzPSJyMWMxLXQxNiI+Jm5ic3A7Jm5ic3A7TnVsbGFibGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOWMxLXQxNiByMWMyLXQxNiI+U3BlY2lmaWVzIGlmIHRoZSBjb2x1bW4gYWxsb3dzIG51bGwgdmFsdWVzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDE2IHIxYzMtdDE2Ij5UcnVlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjljMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyI+SUQgbWFwcGluZzwvYT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEwYzEtdDE2IiBoZWFkZXJzPSJyMWMxLXQxNiI+Jm5ic3A7Jm5ic3A7TGVuZ3RoPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEwYzEtdDE2IHIxYzItdDE2Ij5TZXRzIHRoZSBjb2x1bW4gbGVuZ3RoLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMGMxLXQxNiByMWMzLXQxNiI+MjU1PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEwYzEtdDE2IHIxYzQtdDE2Ij48YSBocmVmPSJ0YXNrczAwOS5odG0jQkFCQkFCQ0UiPkJhc2ljIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMC5odG0jQkFCQ0JIREYiPkVtYmVkZGVkIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMi5odG0jQkFCR0NCSEciPklEIG1hcHBpbmc8L2E+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMWMxLXQxNiIgaGVhZGVycz0icjFjMS10MTYiPiZuYnNwOyZuYnNwO1ByZWNpc2lvbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMWMxLXQxNiByMWMyLXQxNiI+U2V0cyB0aGUgcHJlY2lzaW9uIGZvciB0aGUgY29sdW1uIHZhbHVlcy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTFjMS10MTYgcjFjMy10MTYiPjA8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTFjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyI+SUQgbWFwcGluZzwvYT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEyYzEtdDE2IiBoZWFkZXJzPSJyMWMxLXQxNiI+Jm5ic3A7Jm5ic3A7U2NhbGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTJjMS10MTYgcjFjMi10MTYiPlNldHMgdGhlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBkZWNpbWFsIHBvaW50LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMmMxLXQxNiByMWMzLXQxNiI+MDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMmMxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTAuaHRtI0JBQkNCSERGIj5FbWJlZGRlZCBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTNjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij4mbmJzcDsmbmJzcDtDb2x1bW4gRGVmaW5pdGlvbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxM2MxLXQxNiByMWMyLXQxNiI+RGVmaW5lIHRoZSBEREwgZm9yIGEgY29sdW1uLiBUaGlzIGlzIHVzZWQgd2hlbiBhIHRhYmxlIGlzIGJlaW5nIGdlbmVyYXRlZC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTNjMS10MTYgcjFjMy10MTYiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxM2MxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTAuaHRtI0JBQkNCSERGIj5FbWJlZGRlZCBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTRjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0iQ0FDR0dHSEIiIG5hbWU9IkNBQ0dHR0hCIj48L2E+PGEgaWQ9InN0aHJlZjIzMiIgbmFtZT0ic3RocmVmMjMyIj48L2E+PGEgaWQ9InN0aHJlZjIzMyIgbmFtZT0ic3RocmVmMjMzIj48L2E+PGEgaWQ9InN0aHJlZjIzNCIgbmFtZT0ic3RocmVmMjM0Ij48L2E+RmV0Y2ggVHlwZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxNGMxLXQxNiByMWMyLXQxNiI+RGVmaW5lcyBob3cgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2U6Ci08dWw+Ci08bGk+Ci08cD5FYWdlciAmbmRhc2g7IERhdGEgaXMgbG9hZGVkIGluIGJlZm9yZSBpdCBpcyBhY3R1YWxseSBuZWVkZWQuPC9wPgotPC9saT4KLTxsaT4KLTxwPkxhenkgJm5kYXNoOyBEYXRhIGlzIGxvYWRlZCBvbmx5IHdoZW4gcmVxdWlyZWQgYnkgdGhlIHRyYW5zYWN0aW9uLjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE0YzEtdDE2IHIxYzMtdDE2Ij5FYWdlcjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxNGMxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTYuaHRtI0JBQkZIQkNKIj5PbmUtdG8tb25lIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiPk1hbnktdG8tbWFueSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTVjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij5PcHRpb25hbDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxNWMxLXQxNiByMWMyLXQxNiI+U3BlY2lmaWVzIGlmIHRoaXMgZmllbGQgaXMgY2FuIGJlIG51bGwuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE1YzEtdDE2IHIxYzMtdDE2Ij5ZZXM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTVjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSI+QmFzaWMgbWFwcGluZzwvYT4sIDxhIGhyZWY9InRhc2tzMDE2Lmh0bSNCQUJGSEJDSiI+T25lLXRvLW9uZSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTZjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0iQ0FDQkJJQkkiIG5hbWU9IkNBQ0JCSUJJIj48L2E+PGEgaWQ9InN0aHJlZjIzNSIgbmFtZT0ic3RocmVmMjM1Ij48L2E+TG9iPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE2YzEtdDE2IHIxYzItdDE2Ij5TcGVjaWZ5IGlmIHRoZSBmaWVsZCBpcyBtYXBwZWQgdG8gPGNvZGU+amF2YS5zcWwuQ2xvYjwvY29kZT4gb3IgPGNvZGU+amF2YS5zcWwuQmxvYjwvY29kZT4uCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ATG9iPC9jb2RlPiBhbm5vdGF0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxNmMxLXQxNiByMWMzLXQxNiI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE2YzEtdDE2IHIxYzQtdDE2Ij48YSBocmVmPSJ0YXNrczAwOS5odG0jQkFCQkFCQ0UiPkJhc2ljIG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxN2MxLXQxNiIgaGVhZGVycz0icjFjMS10MTYiPjxhIGlkPSJDQUNFQUpHRCIgbmFtZT0iQ0FDRUFKR0QiPjwvYT48YSBpZD0ic3RocmVmMjM2IiBuYW1lPSJzdGhyZWYyMzYiPjwvYT48YSBpZD0ic3RocmVmMjM3IiBuYW1lPSJzdGhyZWYyMzciPjwvYT48YSBpZD0ic3RocmVmMjM4IiBuYW1lPSJzdGhyZWYyMzgiPjwvYT5UZW1wb3JhbDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxN2MxLXQxNiByMWMyLXQxNiI+U3BlY2lmaWVzIGlmIHRoaXMgZmllbGQgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci08dWw+Ci08bGk+Ci08cD5EYXRlICZuZGFzaDsgPGNvZGU+amF2YS5zcWwuRGF0ZTwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+VGltZSAmbmRhc2g7IDxjb2RlPmphdmEuc3FsLlRpbWU8L2NvZGU+PC9wPgotPC9saT4KLTxsaT4KLTxwPlRpbWVzdGFtcCAmbmRhc2g7IDxjb2RlPmphdmEuc3FsLlRpbWVzdGFtcDwvY29kZT48L3A+Ci08L2xpPgotPC91bD4KLTxwPlRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBUZW1wb3JhbDwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTdjMS10MTYgcjFjMy10MTYiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxN2MxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMThjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0ic3RocmVmMjM5IiBuYW1lPSJzdGhyZWYyMzkiPjwvYT48YSBpZD0ic3RocmVmMjQwIiBuYW1lPSJzdGhyZWYyNDAiPjwvYT48YSBpZD0ic3RocmVmMjQxIiBuYW1lPSJzdGhyZWYyNDEiPjwvYT5FbnVtZXJhdGVkPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE4YzEtdDE2IHIxYzItdDE2Ij5TcGVjaWZ5IGhvdyB0byBwZXJzaXN0IGVudW1lcmF0ZWQgY29uc3RyYWludHMgaWYgdGhlIDxjb2RlPlN0cmluZzwvY29kZT4gdmFsdWUgc3VpdHMgeW91ciBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMgb3IgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgZGF0YWJhc2Ugc2NoZW1hLgotPHVsPgotPGxpPgotPHA+b3JkaW5hbDwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5TdHJpbmc8L2NvZGU+PC9wPgotPC9saT4KLTwvdWw+Ci08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ARW51bWVyYXRlZDwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMThjMS10MTYgcjFjMy10MTYiPk9yZGluYWw8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMThjMS10MTYgcjFjNC10MTYiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTljMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij5UYXJnZXQgRW50aXR5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE5YzEtdDE2IHIxYzItdDE2Ij5UaGUgcGVyc2lzdGVudCBlbnRpdHkgdG8gd2hpY2ggdGhlIGF0dHJpYnV0ZSBpcyBtYXBwZWQuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE5YzEtdDE2IHIxYzMtdDE2Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTljMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDE2Lmh0bSNCQUJGSEJDSiI+T25lLXRvLW9uZSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTUuaHRtI0JBQkhHRUJEIj5PbmUtdG8tbWFueSBtYXBwaW5nPC9hPiA8YSBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiPk1hbnktdG8tbWFueSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMjBjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0iQ0FDSkFJSEIiIG5hbWU9IkNBQ0pBSUhCIj48L2E+Q2FzY2FkZSBUeXBlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIwYzEtdDE2IHIxYzItdDE2Ij5TcGVjaWZ5IHdoaWNoIG9wZXJhdGlvbnMgYXJlIHByb3BhZ2F0ZWQgdGhyb3VnaG91dCB0aGUgZW50aXR5LgotPHVsPgotPGxpPgotPHA+QWxsICZuZGFzaDsgQWxsIG9wZXJhdGlvbnM8L3A+Ci08L2xpPgotPGxpPgotPHA+UGVyc2lzdDwvcD4KLTwvbGk+Ci08bGk+Ci08cD5NZXJnZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Nb3ZlPC9wPgotPC9saT4KLTxsaT4KLTxwPlJlbW92ZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5SZWZyZXNoPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMjBjMS10MTYgcjFjMy10MTYiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyMGMxLXQxNiByMWM0LXQxNiI+PGEgaHJlZj0idGFza3MwMTYuaHRtI0JBQkZIQkNKIj5PbmUtdG8tb25lIG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxNS5odG0jQkFCSEdFQkQiPk9uZS10by1tYW55IG1hcHBpbmc8L2E+LCA8YSBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiPk1hbnktdG8tbWFueSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMjFjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0iQ0FDSkRKSkEiIG5hbWU9IkNBQ0pESkpBIj48L2E+TWFwcGVkIEJ5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIxYzEtdDE2IHIxYzItdDE2Ij5UaGUgZmllbGQgaW4gdGhlIGRhdGFiYXNlIHRhYmxlIHRoYXQgIm93bnMiIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQgb25seSBvbiB0aGUgbm9uLW93bmluZyBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIxYzEtdDE2IHIxYzMtdDE2Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMjFjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDE2Lmh0bSNCQUJGSEJDSiI+T25lLXRvLW9uZSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTUuaHRtI0JBQkhHRUJEIj5PbmUtdG8tbWFueSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMjJjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij48YSBpZD0iQ0FDREFESUgiIG5hbWU9IkNBQ0RBRElIIj48L2E+PGEgaWQ9InN0aHJlZjI0MiIgbmFtZT0ic3RocmVmMjQyIj48L2E+PGEgaWQ9InN0aHJlZjI0MyIgbmFtZT0ic3RocmVmMjQzIj48L2E+T3JkZXIgQnk8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMjJjMS10MTYgcjFjMi10MTYiPlNwZWNpZnkgdGhlIGRlZmF1bHQgb3JkZXIgZm9yIG9iamVjdHMgcmV0dXJuZWQgZnJvbSBhIHF1ZXJ5OgotPHVsPgotPGxpPgotPHA+Tm8gb3JkZXJpbmc8L3A+Ci08L2xpPgotPGxpPgotPHA+UHJpbWFyeSBrZXk8L3A+Ci08L2xpPgotPGxpPgotPHA+Q3VzdG9tIG9yZGVyaW5nPC9wPgotPC9saT4KLTwvdWw+Ci08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5AT3JkZXJCeTwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMjJjMS10MTYgcjFjMy10MTYiPlByaW1hcnkga2V5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIyYzEtdDE2IHIxYzQtdDE2Ij48YSBocmVmPSJ0YXNrczAxNS5odG0jQkFCSEdFQkQiPk9uZS10by1tYW55IG1hcHBpbmc8L2E+LiA8YSBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiPk1hbnktdG8tbWFueSBtYXBwaW5nPC9hPiwgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMjNjMS10MTYiIGhlYWRlcnM9InIxYzEtdDE2Ij5BdHRyaWJ1dGUgT3ZlcnJpZGVzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIzYzEtdDE2IHIxYzItdDE2Ij5PdmVycmlkZXMgPHNwYW4gY2xhc3M9ImJvbGQiPkJhc2ljPC9zcGFuPiBtYXBwaW5ncyBvZiBhIG1hcHBlZCBzdXBlcmNsYXNzIChmb3IgZXhhbXBsZSwgaWYgdGhlIGluaGVyaXRlZCBjb2x1bW4gbmFtZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBhIHByZS1leGlzdGluZyBkYXRhIG1vZGVsLCBvciBpbnZhbGlkIGFzIGEgY29sdW1uIG5hbWUgaW4geW91ciBkYXRhYmFzZSkuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjIzYzEtdDE2IHIxYzMtdDE2Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMjNjMS10MTYgcjFjNC10MTYiPjxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT4KLTxwPjxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT48L3A+Ci08YnIgLz48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9uZXdfanBhX3Byb2plY3QuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9uZXdfanBhX3Byb2plY3QuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJlNGEyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfbmV3X2pwYV9wcm9qZWN0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk5ldyBKUEEgUHJvamVjdCBwYWdlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJOZXcgSlBBIFByb2plY3QgcGFnZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0JKQUdDIiBuYW1lPSJDQUNCSkFHQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+TmV3IEpQQSBQcm9qZWN0IHBhZ2U8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgcHJvcGVydGllcyBhdmFpbGFibGUgb24gdGhlIE5ldyBKUEEgUHJvamVjdCBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0jQ0FDQkpHQkciPkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEdlbmVyYXRlIERETCAtIE9iamVjdHMgcGFnZS4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBHZW5lcmF0ZSBEREwgLSBPYmplY3RzIHBhZ2UuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyNSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MiI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDIiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIiIGhlYWRlcnM9InIxYzEtdDIiPlByb2plY3QgbmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIgcjFjMi10MiI+TmFtZSBvZiB0aGUgRWNsaXBzZSBKUEEgcHJvamVjdC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyIHIxYzMtdDIiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQyIiBoZWFkZXJzPSJyMWMxLXQyIj5Qcm9qZWN0IGNvbnRlbnRzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MiByMWMyLXQyIj5Mb2NhdGlvbiBvZiB0aGUgd29ya3NwYWNlIGluIHdoaWNoIHRvIHNhdmUgdGhlIHByb2plY3QuCi08cD5VbnNlbGVjdCBUaGUgPHNwYW4gY2xhc3M9ImJvbGQiPlVzZSBEZWZhdWx0PC9zcGFuPiBvcHRpb24gYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5Ccm93c2U8L3NwYW4+IHRvIHNlbGVjdCBhIG5ldyBsb2NhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyIHIxYzMtdDIiPkN1cnJlbnQgd29ya3NwYWNlPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDIiIGhlYWRlcnM9InIxYzEtdDIiPlRhcmdldCBydW50aW1lPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MiByMWMyLXQyIj5TZWxlY3QgYSBwcmUtZGVmaW5lZCB0YXJnZXQgZm9yIHRoZSBwcm9qZWN0LgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk5ldzwvc3Bhbj4gdG8gY3JlYXRlIGEgbmV3IGVudmlyb25tZW50IHdpdGggdGhlIE5ldyBTZXJ2ZXIgUnVudGltZSB3aXphcmQuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MiByMWMzLXQyIj48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MiIgaGVhZGVycz0icjFjMS10MiI+Q29uZmlndXJhdGlvbnM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyIHIxYzItdDIiPlNlbGVjdCBhIHByb2plY3QgY29uZmlndXJhdGlvbiB3aXRoIHByZS1kZWZpbmVkIGZhY2V0cy4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+Jmx0O2N1c3RvbSZndDs8L3NwYW4+IHRvIG1hbnVhbGx5IHNlbGVjdCB0aGUgZmFjZXRzIGZvciB0aGlzIHByb2plY3QuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MiByMWMzLXQyIj5VdGlsaXR5IEpQQSBwcm9qZWN0IHdpdGggSmF2YSA1LjA8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjZjMS10MiIgaGVhZGVycz0icjFjMS10MiI+RUFSIG1lbWJlcnNoaXA8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQyIHIxYzItdDIiPlNwZWNpZnkgaWYgdGhpcyBwcm9qZWN0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiBhbiBFQVIgZmlsZSBmb3IgZGVwbG95bWVudC4KLTxwPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkVBUiBQcm9qZWN0IE5hbWU8L3NwYW4+LCBvciBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV3PC9zcGFuPiB0byBjcmVhdGUgYSBuZXcgRUFSIHByb2plY3QuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MiByMWMzLXQyIj48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjdjMS10MiIgaGVhZGVycz0icjFjMS10MiI+V29ya2luZyBzZXRzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MiByMWMyLXQyIj5TcGVjaWZ5IGlmIHRoaXMgcHJvamVjdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYW4gZXhpc3Rpbmcgd29ya2luZyBzZXQuIFRoZSBkcm9wIGRvd24gZmllbGQgc2hvd3MgYSBsaXN0IG9mIHByZXZpb3VzIHNlbGVjdGVkIHdvcmtpbmcgc2V0cy4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkIHByb2plY3QgdG8gd29ya2luZyBzZXRzPC9zcGFuPiwgdGhlbiBzZWxlY3QgYSB3b3JraW5nIHNldCBpbiB3aGljaCB0byBhZGQgdGhpcyBwcm9qZWN0LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDIgcjFjMy10MiI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI0NJSEhFSkNKIj5DcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdDwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSNDQUNCSkdCRyI+Q3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQ8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOTJjODMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0FDQkpHQkciIG5hbWU9IkNBQ0JKR0JHIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5DcmVhdGUgTmV3IEpQQSBQcm9qZWN0IHdpemFyZDwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTg5IiBuYW1lPSJzdGhyZWYxODkiPjwvYT5UaGUgQ3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBuZXcgSmF2YSBwcm9qZWN0IHVzaW5nIEpQQS4gVGhlIHdpemFyZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHBhZ2VzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3QuaHRtI0NBQ0JKQUdDIj5OZXcgSlBBIFByb2plY3QgcGFnZTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX2phdmFfcGFnZS5odG0jQ0lBR0VCQUEiPkphdmEgUGFnZTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX2pwYV9mYWNldC5odG0jQ0FDSUZESUYiPkpQQSBGYWNldCBwYWdlPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX2dlbmVyYWwuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGJmYjQwLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJHZW5lcmFsIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBQ0lGR0oiIG5hbWU9IkNJQUNJRkdKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5HZW5lcmFsPC9oMT4KLTxwPlRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgcHJvcGVydGllcyBhdmFpbGFibGUgaW4gdGhlIEdlbmVyYWwgcGFnZSBvZiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bSNDSUFDQ0hJRCI+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvYT4uPC9wPgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMjU2IiBuYW1lPSJzdGhyZWYyNTYiPjwvYT48YSBpZD0ic3RocmVmMjU3IiBuYW1lPSJzdGhyZWYyNTciPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPlByb3BlcnRpZXMgb2YgdGhlIEdlbmVyYWwgUGFnZTwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iUHJvcGVydGllcyBvZiB0aGUgR2VuZXJhbCBQYWdlIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgcGVyc2lzdGVuY2UueG1sJnJzcXVvO3MgR2VuZXJhbCBwYWdlLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJoc2lkZXMiIHJ1bGVzPSJncm91cHMiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MjQiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQyNCI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDI0Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQyNCIgaGVhZGVycz0icjFjMS10MjQiPgotPHA+TmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI0IHIxYzItdDI0Ij4KLTxwPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI0IHIxYzMtdDI0Ij4KLTxwPlRoZSBwcm9qZWN0IG5hbWUuPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+Ci08cD5QZXJzaXN0ZW5jZSBQcm92aWRlcjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDI0IHIxYzItdDI0Ij4KLTxwPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBwZXJzaXN0ZW5jZSBwcm92aWRlci48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNCByMWMzLXQyNCI+Ci08cD5EZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXIuPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+Ci08cD5EZXNjcmlwdGlvbjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDI0IHIxYzItdDI0Ij4KLTxwPkVudGVyIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcGVyc2lzdGVuY2UgdW5pdC4gVGhpcyBpcyBhbiBvcHRpb25hbCBwcm9wZXJ0eS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyNCByMWMzLXQyNCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+Ci08cD5NYW5hZ2VkIENsYXNzZXM8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyNCByMWMyLXQyNCI+Ci08cD5BZGQgb3IgcmVtb3ZlIHRoZSBjbGFzc2VzIG1hbmFnZWQgdGhyb3VnaCB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyNCByMWMzLXQyNCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+Ci08cD5FeGNsdWRlIFVubGlzdGVkIENsYXNzZXM8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQyNCByMWMyLXQyNCI+Ci08cD5TZWxlY3QgdG8gaW5jbHVkZSBhbGwgYW5ub3RhdGVkIGVudGl0eSBjbGFzc2VzIGluIHRoZSByb290IG9mIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDI0IHIxYzMtdDI0Ij4KLTxwPkZhbHNlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+Ci08cD5YTUwgTWFwcGluZyBGaWxlczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDI0IHIxYzItdDI0Ij4KLTxwPkFkZCBvciByZW1vdmUgdGhlIG9iamVjdC9yZWxhdGlvbmFsIG1hcHBpbmcgWE1MIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBjbGFzc2VzIHRvIGJlIG1hbmFnZWQgYnkgdGhlIHBlcnNpc3RlbmNlIHVuaXQuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MjQgcjFjMy10MjQiPgotPHA+TWV0YS1JTkZcb3JtLnhtbDwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9InRibGZvcm1hbCIgLS0+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmNTc1Zi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJKUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcykiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJJRkJBRiIgbmFtZT0iQkFCSUZCQUYiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjI3IiBuYW1lPSJzdGhyZWYyMjciPjwvYT48YSBpZD0ic3RocmVmMjI4IiBuYW1lPSJzdGhyZWYyMjgiPjwvYT48YSBpZD0ic3RocmVmMjI5IiBuYW1lPSJzdGhyZWYyMjkiPjwvYT5UaGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3IGRpc3BsYXlzIHRoZSBwZXJzaXN0ZW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXBwZWQgYXR0cmlidXRlIGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGFyZWFzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0JIRklKIj5HZW5lcmFsIGluZm9ybWF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMTEuaHRtI0NBQ0JBRUJDIj5Kb2luIFRhYmxlIEluZm9ybWF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMTIuaHRtI0NBQ0ZDRUpDIj5Kb2luIENvbHVtbnMgSW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9wcmltYXJ5X2tleS5odG0jQ0FDRkNDQUIiPlByaW1hcnkgS2V5IEdlbmVyYXRpb24gaW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNDI2ZjMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+SlBBIFN0cnVjdHVyZSB2aWV3PC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJKUEEgU3RydWN0dXJlIHZpZXciIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJFR0dGRSIgbmFtZT0iQkFCRUdHRkUiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkpQQSBTdHJ1Y3R1cmUgdmlldzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjUzIiBuYW1lPSJzdGhyZWYyNTMiPjwvYT48YSBpZD0ic3RocmVmMjU0IiBuYW1lPSJzdGhyZWYyNTQiPjwvYT5UaGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBTdHJ1Y3R1cmU8L3NwYW4+IHZpZXcgZGlzcGxheXMgYW4gb3V0bGluZSBvZiB0aGUgc3RydWN0dXJlIChpdHMgYXR0cmlidXRlcyBhbmQgbWFwcGluZ3MpIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgb3Igb3BlbmVkIGluIHRoZSBlZGl0b3IuIFRoZSBzdHJ1Y3R1cmFsIGVsZW1lbnRzIHNob3duIGluIHRoZSBvdXRsaW5lIGFyZSB0aGUgZW50aXR5IGFuZCBpdHMgZmllbGRzLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjI1NSIgbmFtZT0ic3RocmVmMjU1Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+U2FtcGxlIEpQQSBTdHJ1Y3R1cmUgVmlldzwvcD4KLTxpbWcgc3JjPSJpbWcvcGVyc2lzdGVuY2Vfb3V0bGluZV92aWV3LnBuZyIgYWx0PSJTYW1wbGUgSlBBIFN0cnVjdHVyZSB2aWV3IGZvciBhbiBlbnRpdHkuIiB0aXRsZT0iU2FtcGxlIEpQQSBTdHJ1Y3R1cmUgdmlldyBmb3IgYW4gZW50aXR5LiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSNCQUJJRkJEQiI+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC9hPgotPHA+Jm5ic3A7PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9wZXJzcGVjdGl2ZS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY0M2FjMy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJKUEEgRGV2ZWxvcG1lbnQgcGVyc3BlY3RpdmUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJJRkJEQiIgbmFtZT0iQkFCSUZCREIiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZTwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjgwIiBuYW1lPSJzdGhyZWYyODAiPjwvYT48YSBpZD0ic3RocmVmMjgxIiBuYW1lPSJzdGhyZWYyODEiPjwvYT5UaGUgPHNwYW4gY2xhc3M9ImJvbGQiPkpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZTwvc3Bhbj4gZGVmaW5lcyB0aGUgaW5pdGlhbCBzZXQgYW5kIGxheW91dCBvZiB2aWV3cyBpbiB0aGUgV29ya2JlbmNoIHdpbmRvdyB3aGVuIHVzaW5nIERhbGkuIEJ5IGRlZmF1bHQsIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC9zcGFuPiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHZpZXdzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtI0NBQ0dER0hDIj5KUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCk8L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPHA+PGEgaHJlZj0iLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvY29uY2VwdHMvY29uY2VwdHMtNC5odG0iPlBlcnNwZWN0aXZlczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNzk3NzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJKUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCRkFFQkIiIG5hbWU9IkJBQkZBRUJCIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyMTAiIG5hbWU9InN0aHJlZjIxMCI+PC9hPjxhIGlkPSJzdGhyZWYyMTEiIG5hbWU9InN0aHJlZjIxMSI+PC9hPjxhIGlkPSJzdGhyZWYyMTIiIG5hbWU9InN0aHJlZjIxMiI+PC9hPlRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcgZGlzcGxheXMgdGhlIHBlcnNpc3RlbmNlIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVudGl0eSBhbmQgY29udGFpbnMgdGhlIGZvbGxvd2luZyB0YWJzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAwNi5odG0jQ0FDQ0FHR0MiPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAwNy5odG0jQ0FDSUpCR0giPkF0dHJpYnV0ZSBvdmVycmlkZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAwOC5odG0jQ0FDQkhJREEiPlNlY29uZGFyeSB0YWJsZSBpbmZvcm1hdGlvbjwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDA5Lmh0bSNDQUNGSEdIRSI+SW5oZXJpdGFuY2UgaW5mb3JtYXRpb248L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl9wZXJzaXN0ZW5jZV94bWxsX2VkaXRvci5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlNmVlMC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0icGVyc2lzdGVuY2UueG1sIEVkaXRvciIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUNDSElEIiBuYW1lPSJDSUFDQ0hJRCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvaDE+Ci08cD5UaGUgcGVyc2lzdGVuY2UueG1sIEVkaXRvciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdGhhdCBlbmFibGVzIHlvdSB0byB1cGRhdGUgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlLiBGb3IgcHJvamVjdHMgdXNpbmcgdGhlIEVjbGlwc2VMaW5rIHBsYXRmb3JtLCB0aGUgcGVyaXNpc3RlbmNlLnhtbCBFZGl0b3IgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBwYWdlczo8L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0jQ0lBQ0lGR0oiPkdlbmVyYWw8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxOC5odG0jQ0lBRkZKSUUiPkNvbm5lY3Rpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxOS5odG0jQ0lBSkFGRUciPkN1c3RvbWl6YXRpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyMC5odG0jQ0lBQkVEQ0giPkNhY2hpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyMS5odG0jQ0lBQkdISEkiPkxvZ2dpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyMi5odG0jQ0lBRkpDSEUiPk9wdGlvbnM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyMy5odG0jQ0lBQ0NGQ0IiPlNjaGVtYSBHZW5lcmF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMjQuaHRtI0NJQUhKREZGIj5Qcm9wZXJ0aWVzPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMjUuaHRtI0NJQUhDSkFIIj5Tb3VyY2U8L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08cD5Gb3IgcHJvamVjdHMgdXNpbmcgdGhlIEdlbmVyaWMgcGxhdGZvcm0sIHRoZSBmb2xsb3dpbmcgc3Vic2V0IG9mIHRoZXNlIHBhZ2VzIGlzIGF2YWlsYWJsZTo8L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0jQ0lBQ0lGR0oiPkdlbmVyYWw8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAxOC5odG0jQ0lBRkZKSUUiPkNvbm5lY3Rpb248L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyNC5odG0jQ0lBSEpERkYiPlByb3BlcnRpZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyNS5odG0jQ0lBSENKQUgiPlNvdXJjZTwvYT48L3A+Ci08L2xpPgotPC91bD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3ByaW1hcnlfa2V5Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcHJpbWFyeV9rZXkuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk4MzU0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcHJpbWFyeV9rZXkuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+UHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0ZDQ0FCIiBuYW1lPSJDQUNGQ0NBQiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+UHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbjwvaDE+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgYXZhaWxhYmxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+UHJpbWFyeSBLZXkgR2VuZXJhdGlvbjwvc3Bhbj4gYXJlYSBpbiBKUEEgRGV0YWlscyB2aWV3IGZvciA8YSBocmVmPSJ0YXNrczAxMi5odG0jQkFCR0NCSEciPklEIG1hcHBpbmc8L2E+IHR5cGVzLjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBKb2luIENvbHVtbnMgdGFiLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEpvaW4gQ29sdW1ucyB0YWIuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIzNCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxOSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDE5Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MTkiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDE5IiBoZWFkZXJzPSJyMWMxLXQxOSI+PGEgaWQ9IkNBQ0JBSkJDIiBuYW1lPSJDQUNCQUpCQyI+PC9hPlByaW1hcnkgS2V5IEdlbmVyYXRpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxOSByMWMyLXQxOSI+PGEgaWQ9InN0aHJlZjI0OSIgbmFtZT0ic3RocmVmMjQ5Ij48L2E+PGEgaWQ9InN0aHJlZjI1MCIgbmFtZT0ic3RocmVmMjUwIj48L2E+VGhlc2UgZmllbGRzIGRlZmluZSBob3cgdGhlIHByaW1hcnkga2V5IGlzIGdlbmVyYXRlZC4gVGhlc2UgZmllbGRzIGNvcnJlc3BvbmQgdG8gdGhlIDxjb2RlPkBHZW5lcmF0ZWRWYWx1ZTwvY29kZT4gYW5ub3RhdGlvbi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxOSByMWMzLXQxOSI+R2VuZXJhdGVkIFZhbHVlPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDE5IiBoZWFkZXJzPSJyMWMxLXQxOSI+PGEgaWQ9IkNBQ0pFRUVDIiBuYW1lPSJDQUNKRUVFQyI+PC9hPiZuYnNwOyZuYnNwOyZuYnNwO1N0cmF0ZWd5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTkgcjFjMi10MTkiPgotPHVsPgotPGxpPkF1dG88L2xpPgotPGxpPgotPHA+SWRlbnRpdHkgJm5kYXNoOyBWYWx1ZXMgYXJlIGFzc2lnbmVkIGJ5IHRoZSBkYXRhYmFzZSdzIDxzcGFuIGNsYXNzPSJib2xkIj5JZGVudGl0eTwvc3Bhbj4gY29sdW1uLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZXF1ZW5jZSAmbmRhc2g7IFZhbHVlcyBhcmUgYXNzaWduZWQgYnkgYSBzZXF1ZW5jZSB0YWJsZSAoc2VlIDxhIGhyZWY9IiNDQUNGRkhFSCI+U2VxdWVuY2UmbmJzcDtHZW5lcmF0b3I8L2E+KS48L3A+Ci08L2xpPgotPGxpPgotPHA+VGFibGUgJm5kYXNoOyBWYWx1ZXMgYXJlIGFzc2lnbmVkIGJ5IGEgZGF0YWJhc2UgdGFibGUgKHNlZSA8YSBocmVmPSIjQ0FDR0ZFQUgiPlRhYmxlIEdlbmVyYXRvcjwvYT4pLjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTkgcjFjMy10MTkiPkF1dG88L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij48YSBpZD0iQkFCRUVBSEoiIG5hbWU9IkJBQkVFQUhKIj48L2E+Jm5ic3A7Jm5ic3A7R2VuZXJhdG9yIE5hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxOSByMWMyLXQxOSI+VW5pcXVlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZCB2YWx1ZS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxOSByMWMzLXQxOSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDE5IiBoZWFkZXJzPSJyMWMxLXQxOSI+PGEgaWQ9IkNBQ0dGRUFIIiBuYW1lPSJDQUNHRkVBSCI+PC9hPlRhYmxlIEdlbmVyYXRvcjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDE5IHIxYzItdDE5Ij5UaGVzZSBmaWVsZHMgZGVmaW5lIHRoZSBkYXRhYmFzZSB0YWJsZSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBwcmltYXJ5IGtleSBhbmQgY29ycmVzcG9uZCB0byB0aGUgPGNvZGU+QFRhYmxlR2VuZXJhdG9yPC9jb2RlPiBhbm5vdGF0aW9uLgotPHA+VGhlc2UgZmllbGRzIGFwcGx5IG9ubHkgd2hlbiA8c3BhbiBjbGFzcz0iYm9sZCI+U3RyYXRlZ3k8L3NwYW4+Jm5ic3A7PSZuYnNwOzxzcGFuIGNsYXNzPSJib2xkIj5UYWJsZTwvc3Bhbj4uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTkgcjFjMy10MTkiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQxOSIgaGVhZGVycz0icjFjMS10MTkiPiZuYnNwOyZuYnNwO05hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxOSByMWMyLXQxOSI+VW5pcXVlIG5hbWUgb2YgdGhlIGdlbmVyYXRvci48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxOSByMWMzLXQxOSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDE5IiBoZWFkZXJzPSJyMWMxLXQxOSI+Jm5ic3A7Jm5ic3A7VGFibGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQxOSByMWMyLXQxOSI+RGF0YWJhc2UgdGFibGUgdGhhdCBzdG9yZXMgdGhlIGdlbmVyYXRlZCBJRCB2YWx1ZXMuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTkgcjFjMy10MTkiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQxOSIgaGVhZGVycz0icjFjMS10MTkiPiZuYnNwOyZuYnNwO1ByaW1hcnkgS2V5IENvbHVtbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE5IHIxYzItdDE5Ij5UaGUgY29sdW1uIGluIHRoZSB0YWJsZSBnZW5lcmF0b3IncyA8c3BhbiBjbGFzcz0iYm9sZCI+VGFibGU8L3NwYW4+IHRoYXQgY29udGFpbnMgdGhlIHByaW1hcnkga2V5LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE5IHIxYzMtdDE5Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjljMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij4mbmJzcDsmbmJzcDtWYWx1ZSBDb2x1bW48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOWMxLXQxOSByMWMyLXQxOSI+VGhlIGNvbHVtbiB0aGF0IHN0b3JlcyB0aGUgZ2VuZXJhdGVkIElEIHZhbHVlcy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOWMxLXQxOSByMWMzLXQxOSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMGMxLXQxOSIgaGVhZGVycz0icjFjMS10MTkiPiZuYnNwOyZuYnNwO1ByaW1hcnkgS2V5IENvbHVtbiBWYWx1ZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMGMxLXQxOSByMWMyLXQxOSI+VGhlIHZhbHVlIGZvciB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlByaW1hcnkgS2V5IENvbHVtbjwvc3Bhbj4gaW4gdGhlIGdlbmVyYXRvciB0YWJsZS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTBjMS10MTkgcjFjMy10MTkiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTFjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij48YSBpZD0iQ0FDRkZIRUgiIG5hbWU9IkNBQ0ZGSEVIIj48L2E+U2VxdWVuY2UmbmJzcDtHZW5lcmF0b3I8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTFjMS10MTkgcjFjMi10MTkiPjxhIGlkPSJzdGhyZWYyNTEiIG5hbWU9InN0aHJlZjI1MSI+PC9hPjxhIGlkPSJzdGhyZWYyNTIiIG5hbWU9InN0aHJlZjI1MiI+PC9hPlRoZXNlIGZpZWxkcyBkZWZpbmUgdGhlIHNwZWNpZmljIHNlcXVlbmNlIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIHByaW1hcnkga2V5IGFuZCBjb3JyZXNwb25kIHRvIHRoZSA8Y29kZT5AU2VxdWVuY2VHZW5lcmF0b3I8L2NvZGU+IGFubm90YXRpb24uCi08cD5UaGVzZSBmaWVsZHMgYXBwbHkgb25seSB3aGVuIDxzcGFuIGNsYXNzPSJib2xkIj5TdHJhdGVneTwvc3Bhbj4gPSA8c3BhbiBjbGFzcz0iYm9sZCI+U2VxdWVuY2U8L3NwYW4+LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMWMxLXQxOSByMWMzLXQxOSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMmMxLXQxOSIgaGVhZGVycz0icjFjMS10MTkiPiZuYnNwOyZuYnNwO05hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTJjMS10MTkgcjFjMi10MTkiPk5hbWUgb2YgdGhlIHNlcXVlbmNlIHRhYmxlIHRvIHVzZSBmb3IgZGVmaW5pbmcgcHJpbWFyeSBrZXkgdmFsdWVzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMmMxLXQxOSByMWMzLXQxOSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxM2MxLXQxOSIgaGVhZGVycz0icjFjMS10MTkiPiZuYnNwOyZuYnNwO1NlcXVlbmNlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEzYzEtdDE5IHIxYzItdDE5Ij5VbmlxdWUgbmFtZSBvZiB0aGUgc2VxdWVuY2UuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEzYzEtdDE5IHIxYzMtdDE5Ij48YnIgLz48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBjNWRhZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3Byb2plY3RfcHJvcGVydGllcy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Qcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAmbmRhc2g7IEphdmEgUGVyc2lzdGVuY2UgT3B0aW9uczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iUHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgJm5kYXNoOyBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJKSEJDSSIgbmFtZT0iQkFCSkhCQ0kiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlByb2plY3QgUHJvcGVydGllcyBwYWdlICZuZGFzaDsgSmF2YSBQZXJzaXN0ZW5jZSBPcHRpb25zPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyNzEiIG5hbWU9InN0aHJlZjI3MSI+PC9hPjxhIGlkPSJzdGhyZWYyNzIiIG5hbWU9InN0aHJlZjI3MiI+PC9hPlVzZSB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkphdmEgUGVyc2lzdGVuY2U8L3NwYW4+IG9wdGlvbnMgb24gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Qcm9wZXJ0aWVzPC9zcGFuPiBwYWdlIHRvIHNlbGVjdCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB1c2Ugd2l0aCB0aGUgcHJvamVjdC48L3A+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzIHBhZ2U8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibGluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyBwYWdlLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgcGFnZS4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMzIlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDM2Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MzYiPkRlc2NyaXB0aW9uPC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQzNiIgaGVhZGVycz0icjFjMS10MzYiPjxhIGlkPSJzdGhyZWYyNzMiIG5hbWU9InN0aHJlZjI3MyI+PC9hPjxhIGlkPSJzdGhyZWYyNzQiIG5hbWU9InN0aHJlZjI3NCI+PC9hPjxhIGlkPSJzdGhyZWYyNzUiIG5hbWU9InN0aHJlZjI3NSI+PC9hPjxhIGlkPSJzdGhyZWYyNzYiIG5hbWU9InN0aHJlZjI3NiI+PC9hPlBsYXRmb3JtPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzYgcjFjMi10MzYiPlNlbGVjdCB0aGUgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQzNiIgaGVhZGVycz0icjFjMS10MzYiPkxpYnJhcnk8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQzNiByMWMyLXQzNiI+U2VsZWN0IGEgc3BlY2lmaWMgSlBBIGxpYnJhcnkgY29uZmlndXJhdGlvbi4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5NYW5hZ2UgbGlicmFyaWVzPC9zcGFuPiB0byBjcmVhdGUgb3IgdXBkYXRlIGEgdXNlciBsaWJyYXJ5LjwvcD4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5Eb3dubG9hZCBsaWJyYXJpZXM8L3NwYW4+IHRvIGRvd25sb2FkIGEgc3BlY2lmaWMgbGlicmFyeSBjb25maWd1cmF0aW9uLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQzNiIgaGVhZGVycz0icjFjMS10MzYiPiZuYnNwOyZuYnNwO1R5cGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQzNiByMWMyLXQzNiI+U2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5Vc2VyIExpYnJhcnk8L3NwYW4+IHRvIHNlbGVjdCBmcm9tIHRoZSBhdmFpbGFibGUgdXNlci1kZWZpbmVkIG9yIGRvd25sb2FkZWQgbGlicmFyaWVzLgotPHA+SWYgeW91IHNlbGVjdCBEaXNhYmxlLCB5b3UgbXVzdCBtYW51YWxseSBpbmNsdWRlIHRoZSBKUEEgaW1wbGVtZW50YXRpb24gbGlicmFyeSBvbiB0aGUgcHJvamVjdCBjbGFzc3BhdGguPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDM2IiBoZWFkZXJzPSJyMWMxLXQzNiI+Jm5ic3A7Jm5ic3A7SW5jbHVkZSZuYnNwO2xpYnJhcmllcyZuYnNwO3dpdGgmbmJzcDt0aGlzJm5ic3A7YXBwbGljYXRpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQzNiByMWMyLXQzNiI+U3BlY2lmeSBpZiB0aGUgc2VsZWN0ZWQgbGlicmFyaWVzIGFyZSBpbmNsdWRlZCB3aGVuIGRlcGxveWluZyB0aGUgYXBwbGljYXRpb24uPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDM2IiBoZWFkZXJzPSJyMWMxLXQzNiI+PGEgaWQ9InN0aHJlZjI3NyIgbmFtZT0ic3RocmVmMjc3Ij48L2E+PGEgaWQ9InN0aHJlZjI3OCIgbmFtZT0ic3RocmVmMjc4Ij48L2E+PGEgaWQ9InN0aHJlZjI3OSIgbmFtZT0ic3RocmVmMjc5Ij48L2E+Q29ubmVjdGlvbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDM2IHIxYzItdDM2Ij5UaGUgZGF0YWJhc2UgY29ubmVjdGlvbiB1c2VkIHRvIG1hcCB0aGUgcGVyc2lzdGVudCBlbnRpdGllcy4KLTx1bD4KLTxsaT4KLTxwPlRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uLCBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkIENvbm5lY3Rpb25zPC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+VG8gcmVjb25uZWN0IHRvIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24sIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5SZWNvbm5lY3Q8L3NwYW4+LjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDM2IiBoZWFkZXJzPSJyMWMxLXQzNiI+Jm5ic3A7Jm5ic3A7T3ZlcnJpZGUmbmJzcDtkZWZhdWx0Jm5ic3A7Y2F0YWxvZyZuYnNwO2Zyb20mbmJzcDtjb25uZWN0aW9uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MzYgcjFjMi10MzYiPlNlbGVjdCBhIGNhdGFsb2cgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmUgZGVyaXZlZCBmcm9tIHRoZSBjb25uZWN0aW9uIGluZm9ybWF0aW9uLiBVc2UgdGhpcyBvcHRpb24gaWYgdGhlIGRlZmF1bHQgY2F0YWxvZyBpcyBpbmNvcnJlY3Qgb3IgY2Fubm90IGJlIHVzZWQuPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI4YzEtdDM2IiBoZWFkZXJzPSJyMWMxLXQzNiI+Jm5ic3A7Jm5ic3A7T3ZlcnJpZGUmbmJzcDtkZWZhdWx0Jm5ic3A7c2NoZW1hJm5ic3A7ZnJvbSZuYnNwO2Nvbm5lY3Rpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQzNiByMWMyLXQzNiI+U2VsZWN0IGEgc2NoZW1hIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lIGRlcml2ZWQgZnJvbSB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbi4gVXNlIHRoaXMgb3B0aW9uIGlmIHRoZSBkZWZhdWx0IHNjaGVtYSBpcyBpbmNvcnJlY3Qgb3IgY2Fubm90IGJlIHVzZWQuIEZvciBleGFtcGxlLCB1c2UgdGhpcyBvcHRpb24gd2hlbiB0aGUgZGVwbG95bWVudCBsb2dpbiBkaWZmZXJzIGZyb20gdGhlIGRlc2lnbi10aW1lIGxvZ2luLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOWMxLXQzNiIgaGVhZGVycz0icjFjMS10MzYiPlBlcnNpc3RlbnQgQ2xhc3MgTWFuYWdlbWVudDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDM2IHIxYzItdDM2Ij5TcGVjaWZ5IGlmIERhbGkgd2lsbCA8c3BhbiBjbGFzcz0iYm9sZCI+ZGlzY292ZXIgYW5ub3RhdGVkIGNsYXNzZXMgYXV0b21hdGljYWxseTwvc3Bhbj4sIG9yIGlmIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+YW5ub3RhdGVkIGNsYXNzZXMgbXVzdCBiZSBsaXN0ZWQgaW4gdGhlIHBlcnNpc3RlbmNlLnhtbDwvc3Bhbj4gZmlsZS4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5Ob3RlPC9zcGFuPjogVG8gaW5zdXJlIGFwcGxpY2F0aW9uIHBvcnRhYmlsaXR5LCB5b3Ugc2hvdWxkIGV4cGxpY2l0bHkgbGlzdCB0aGUgbWFuYWdlZCBwZXJzaXN0ZW5jZSBjbGFzc2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tzMDI0Lmh0bSNCQUJEQkNCSSI+TW9kaWZ5aW5nIHBlcnNpc3RlbnQgcHJvamVjdCBwcm9wZXJ0aWVzPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfc2VsZWN0VGFibGVzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfc2VsZWN0VGFibGVzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNlOWNiYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3NlbGVjdFRhYmxlcy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlNlbGVjdCBUYWJsZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUwWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlNlbGVjdCBUYWJsZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFIQ0dFRSIgbmFtZT0iQ0lBSENHRUUiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlNlbGVjdCBUYWJsZXM8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjIwMCIgbmFtZT0ic3RocmVmMjAwIj48L2E+PGEgaWQ9InN0aHJlZjIwMSIgbmFtZT0ic3RocmVmMjAxIj48L2E+PGEgaWQ9InN0aHJlZjIwMiIgbmFtZT0ic3RocmVmMjAyIj48L2E+VXNlIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+U2VsZWN0IFRhYmxlczwvc3Bhbj4gZGlhbG9nIHRvIHNwZWNpZnkgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gYW5kIHRhYmxlcyBmcm9tIHdoaWNoIHRvIGNyZWF0ZSBlbnRpdGllcy48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEdlbmVyYXRlIEVudGl0aWVzIGRpYWxvZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBHZW5lcmF0ZSBFbnRpdGllcyBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQ4Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10OCI+RGVzY3JpcHRpb248L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDgiIGhlYWRlcnM9InIxYzEtdDgiPkNvbm5lY3Rpb248L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQ4IHIxYzItdDgiPlNlbGVjdCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gb3IgY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCBDb25uZWN0aW9uPC9zcGFuPiB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbi48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10OCIgaGVhZGVycz0icjFjMS10OCI+U2NoZW1hPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10OCByMWMyLXQ4Ij5TZWxlY3QgdGhlIGRhdGFiYXNlIHNjaGVtYSBmcm9tIHdoaWNoIHRvIHNlbGVjdCB0YWJsZXMuPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDgiIGhlYWRlcnM9InIxYzEtdDgiPlRhYmxlczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDggcjFjMi10OCI+U2VsZWN0IHRoZSB0YWJsZXMgZnJvbSB3aGljaCB0byBjcmVhdGUgSmF2YSBwZXJzaXN0ZW50IGVudGl0aWVzLiBUaGUgdGFibGVzIHNob3duIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGFuZCBzY2hlbWEgc2VsZWN0aW9ucy48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10OCIgaGVhZGVycz0icjFjMS10OCI+U3luY2hyb25pemUgQ2xhc3NlcyBsaXN0ZWQgaW4gcGVyc2lzdGVuY2UueG1sPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10OCByMWMyLXQ4Ij5TcGVjaWZ5IGlmIERhbGkgc2hvdWxkIHVwZGF0ZSB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlIHRvIGluY2x1ZGUgdGhlIGdlbmVyYXRlZCBjbGFzc2VzLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfY3JlYXRlX2pwYV9lbnRpdHkuaHRtI0JBQkZCSkJHIj5DcmVhdGluZyBhIEpQQSBFbnRpdHk8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrczAxOS5odG0jQkFCQkFHRkkiPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSNDSUFHQkZKRSI+R2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfc2VsZWN0X2Nhc2NhZGVfZGlhbG9nLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZfc2VsZWN0X2Nhc2NhZGVfZGlhbG9nLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1ZDFjMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3NlbGVjdF9jYXNjYWRlX2RpYWxvZy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlNlbGVjdCBDYXNjYWRlIGRpYWxvZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iU2VsZWN0IENhc2NhZGUgZGlhbG9nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBRkRHSUoiIG5hbWU9IkNJQUZER0lKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5TZWxlY3QgQ2FzY2FkZSBkaWFsb2c8L2gxPgotPHA+U3BlY2lmeSB3aGljaCBvcGVyYXRpb25zIGFyZSBwcm9wYWdhdGVkIHRocm91Z2hvdXQgdGhlIGFzc29jaWF0aW9uOiBBbGwsIFBlcnNpc3QsIE1lcmdlLCBSZW1vdmUsIG9yIFJlZnJlc2guPC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZl90YWJsZUFzc29jaWF0aW9ucy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3RhYmxlQXNzb2NpYXRpb25zLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4NDJmMS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmX3RhYmxlQXNzb2NpYXRpb25zLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VGFibGUgQXNzb2NpYXRpb25zPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJUYWJsZSBBc3NvY2lhdGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFDRElDQiIgbmFtZT0iQ0lBQ0RJQ0IiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlRhYmxlIEFzc29jaWF0aW9uczwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjAzIiBuYW1lPSJzdGhyZWYyMDMiPjwvYT5Vc2UgdGhpcyBwYWdlIHRvIGNyZWF0ZSBvciBlZGl0IHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSBkYXRhYmFzZSB0YWJsZSBhbmQgZW50aXR5LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibGluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgR2VuZXJhdGUgRW50aXRpZXMgZGlhbG9nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFRhYmxlIEFzc29jaWF0aW9ucyBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQ5Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10OSI+RGVzY3JpcHRpb248L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDkiIGhlYWRlcnM9InIxYzEtdDkiPlRhYmxlIGFzc29jaWF0aW9uczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDkgcjFjMi10OSI+U2VsZWN0IGFuIGFzc29jaWF0aW9uIHRvIG1vZGlmeSBvciBjbGljayB0byBjcmVhdGUgYSBuZXcgdGFibGUgYXNzb2NpYXRpb24gd2l0aCB0aGUgPGEgaHJlZj0icmVmX2NyZWF0ZV9uZXdfYXNzb2NpYXRpb25fd2l6YXJkLmh0bSNDSUFGR0hJRiI+Q3JlYXRlIE5ldyBBc3NvY2lhdGlvbjwvYT4gd2l6YXJkLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQ5IiBoZWFkZXJzPSJyMWMxLXQ5Ij5HZW5lcmF0ZSB0aGlzIGFzc29jaWF0aW9uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10OSByMWMyLXQ5Ij5TcGVjaWZ5IGlmIERhbGkgc2hvdWxkIGNyZWF0ZSB0aGUgc2VsZWN0ZWQgYXNzb2NpYXRpb24uIElmIGVuYWJsZWQsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQ2FyZGluYWxpdHkgYW5kIEpvaW4gdGFibGUgZm9yIHRoZSB0YWJsZSBhc3NvY2lhdGlvbi48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10OSIgaGVhZGVycz0icjFjMS10OSI+R2VuZXJhdGUgYSByZWZlcmVuY2UgdG8gPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1JPVyZndDs8L3NwYW4+IGluIDxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtUQUJMRSZndDs8L3NwYW4+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10OSByMWMyLXQ5Ij5TcGVjaWZ5IGlmIHRoZSBlbnRpdHkgc2hvdWxkIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHNwZWNpZmllZCB0YWJsZS4KLTxwPklmIGVuYWJsZWQsIHlvdSBjYW4gYWxzbyBlbnRlciB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlByb3BlcnR5PC9zcGFuPiBuYW1lIGFuZCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5DYXNjYWRlPC9zcGFuPiBtZXRob2QgKGFsbCwgcGVyc2lzdCwgbWVyZ2UsIHJlbW92ZSwgb3IgcmVmcmVzaCkgZm9yIHRoZSByZWZlcmVuY2UuPC9wPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tzMDE5Lmh0bSNCQUJCQUdGSSI+R2VuZXJhdGluZyBlbnRpdGllcyBmcm9tIHRhYmxlczwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9jcmVhdGVfbmV3X2Fzc29jaWF0aW9uX3dpemFyZC5odG0jQ0lBRkdISUYiPkNyZWF0ZSBOZXcgQXNzb2NpYXRpb248L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSNDSUFHQkZKRSI+R2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzNjOWEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlJlZmVyZW5jZTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDlaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iIFJlZmVyZW5jZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9InN0aHJlZjE4OCIgbmFtZT0ic3RocmVmMTg4Ij48L2E+PC9wPgotPGgxPlJlZmVyZW5jZTwvaDE+Ci08cD5UaGlzIHNlY3Rpb24gaW5jbHVkZXMgZGV0YWlsZWQgaGVscCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnRzIGluIHRoZSBEYWxpIE9SIE1hcHBpbmcgVG9vbDo8L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMDEuaHRtI0NBQ0pKSkpIIj5XaXphcmRzPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMDUuaHRtI0NBQ0RKSUlHIj5Qcm9wZXJ0eSBwYWdlczwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDI2Lmh0bSNDQUNERUlFRSI+UHJlZmVyZW5jZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyNy5odG0jQ0FDR0VKREEiPkRpYWxvZ3M8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wZXJzcGVjdGl2ZS5odG0jQkFCSUZCREIiPkpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDI5Lmh0bSNDQUNESENJQSI+SWNvbnMgYW5kIGJ1dHRvbnM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAzMi5odG0jQ0FDQkJESUIiPkRhbGkgRGV2ZWxvcGVyIERvY3VtZW50YXRpb248L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDAxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyNzdjOC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDAxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+V2l6YXJkczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDlaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iV2l6YXJkcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0pKSkpIIiBuYW1lPSJDQUNKSkpKSCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+V2l6YXJkczwvaDE+Ci08cD5UaGlzIHNlY3Rpb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gb24gdGhlIGZvbGxvd2luZyB3aXphcmRzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSNDQUNCSkdCRyI+Q3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQ8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9jcmVhdGVfanBhX2VudGl0eV93aXphcmQuaHRtI0NJQUdHR0RGIj5DcmVhdGUgSlBBIEVudGl0eSB3aXphcmQ8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAwNC5odG0jQ0lBR0hDR0EiPkdlbmVyYXRlIFRhYmxlcyBmcm9tIEVudGl0aWVzIFdpemFyZDwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX2NyZWF0ZV9jdXN0b21fZW50aXRpZXNfd2l6YXJkLmh0bSNDSUFHQkZKRSI+R2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfY3JlYXRlX25ld19hc3NvY2lhdGlvbl93aXphcmQuaHRtI0NJQUZHSElGIj5DcmVhdGUgTmV3IEFzc29jaWF0aW9uPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDIuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwMi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMDE4YzkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwMi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk1hcHBpbmcgRmlsZSBXaXphcmQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik1hcHBpbmcgRmlsZSBXaXphcmQiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFJSkNDRSIgbmFtZT0iQ0lBSUpDQ0UiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPk1hcHBpbmcgRmlsZSBXaXphcmQ8L2gxPgotPHA+VGhlIE1hcHBpbmcgRmlsZSB3aXphcmQgZW5hYmxlcyB5b3UgdG8gYWRkIGFuIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUgdG8gYSBKUEEgcHJvamVjdCBpZiBubyBvYmplY3QgbWFwIGV4aXN0cyBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLiBGb3IgZXhhbXBsZSwgaWYgeW91IGNsZWFyZWQgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5DcmVhdGUgb3JtLnhtbDwvc3Bhbj4gb3B0aW9uIG9uIHRoZSA8YSBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNDQUNJRkRJRiI+SlBBIEZhY2V0IHBhZ2U8L2E+LCB5b3UgY2FuIGxhdGVyIGFkZCB0aGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZSB0byB0aGUgc3JjIGZpbGUgb2YgdGhlIHByb2plY3QgdXNpbmcgdGhpcyB3aXphcmQuPC9wPgotPHA+VGhlIDxhIGhyZWY9IiNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4gY29uc2lzdHMgb2YgdGhlIE1hcHBpbmcgRmlsZSBwYWdlLjwvcD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDAzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDMuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc0MjkxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+TWFwcGluZyBGaWxlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJNYXBwaW5nIEZpbGUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFKRUlESiIgbmFtZT0iQ0lBSkVJREoiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPk1hcHBpbmcgRmlsZTwvaDE+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSA8YSBocmVmPSJyZWZlcmVuY2UwMDIuaHRtI0NJQUlKQ0NFIj5NYXBwaW5nIEZpbGUgV2l6YXJkPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJ0Ymxmb3JtYWwiPjxhIGlkPSJzdGhyZWYxOTgiIG5hbWU9InN0aHJlZjE5OCI+PC9hPjxhIGlkPSJzdGhyZWYxOTkiIG5hbWU9InN0aHJlZjE5OSI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW50YWJsZSI+TWFwcGluZyBGaWxlIFdpemFyZCBQcm9wZXJ0aWVzPC9wPgotPHRhYmxlIGNsYXNzPSJGb3JtYWwiIHRpdGxlPSJNYXBwaW5nIEZpbGUgV2l6YXJkIFByb3BlcnRpZXMiIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIE1hcHBpbmcgRmlsZSBXaXphcmQuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9Imdyb3VwcyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQ3Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10NyI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDciPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDciIGhlYWRlcnM9InIxYzEtdDciPgotPHA+UHJvamVjdDwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDcgcjFjMi10NyI+Ci08cD5UaGUgbmFtZSBvZiB0aGUgSlBBIHByb2plY3QuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10NyByMWMzLXQ3Ij4KLTxwPlNlbGVjdGVkLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQ3IiBoZWFkZXJzPSJyMWMxLXQ3Ij4KLTxwPlNvdXJjZSBmb2xkZXI8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQ3IHIxYzItdDciPgotPHA+VGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9qZWN0J3Mgc3JjIGZvbGRlci4gSWYgbmVlZGVkLCBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+QnJvd3NlPC9zcGFuPiB0byBwb2ludCB0aGUgd2l6YXJkIHRvIHRoZSBzcmMgZmlsZSdzIGxvY2F0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDcgcjFjMy10NyI+Ci08cD5TZWxlY3RlZC48L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10NyIgaGVhZGVycz0icjFjMS10NyI+Ci08cD5GaWxlIFBhdGg8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQ3IHIxYzItdDciPgotPHA+VGhlIGxvY2F0aW9uIGZvciB0aGUgbmV3IDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10NyByMWMzLXQ3Ij4KLTxwPlNlbGVjdGVkLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQ3IiBoZWFkZXJzPSJyMWMxLXQ3Ij4KLTxwPkRlZmF1bHQgQWNjZXNzPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10NyByMWMyLXQ3Ij4KLTxwPlNlbGVjdCB3aGV0aGVyIHRoZSBhY2Nlc3MgdG8gdGhlIGVudGl0eSBpcyBmaWVsZC1iYXNlZCBvciBwcm9wZXJ0eS1iYXNlZCwgYXMgZGVmaW5lZCBpbiBKUEEgc3BlY2lmaWNhdGlvbi48L3A+Ci08dWw+Ci08bGk+Ci08cD5Ob25lICZuZGFzaDsgTm8gYWNjZXNzIHR5cGUgc3BlY2lmaWVkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+UHJvcGVydHktYmFzZWQ8L3NwYW4+ICZuZGFzaDsgUGVyc2lzdGVudCBzdGF0ZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBwcm9wZXJ0eSBhY2Nlc3NvciBtZXRob2RzLiBUaGUgcHJvcGVydHkgYWNjZXNzb3IgbWV0aG9kcyBtdXN0IGJlIDxzcGFuIGNsYXNzPSJib2xkIj5wdWJsaWM8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJib2xkIj5wcml2YXRlPC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkZpZWxkLWJhc2VkPC9zcGFuPiAmbmRhc2g7IEluc3RhbmNlIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgZGlyZWN0bHkuIEFsbCBub24tdHJhbnNpZW50IGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgcGVyc2lzdGVudC48L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDcgcjFjMy10NyI+Ci08cD5Ob25lPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDciIGhlYWRlcnM9InIxYzEtdDciPgotPHA+QWRkIHRvIHBlcnNpc3RlbmNlIHVuaXQ8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ3IHIxYzItdDciPgotPHA+RGVzaWduYXRlcyB0aGUgcGVyc2lzdGVuY2UgdW5pdCBmb3IgdGhpcyBvYmplY3QgbWFwIGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10NyByMWMzLXQ3Ij4KLTxwPlNlbGVjdGVkLjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9InRibGZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9hPjxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDA0Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDQuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjZkZDAyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDQuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5HZW5lcmF0ZSBUYWJsZXMgZnJvbSBFbnRpdGllcyBXaXphcmQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ5WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkdlbmVyYXRlIFRhYmxlcyBmcm9tIEVudGl0aWVzIFdpemFyZCIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUdIQ0dBIiBuYW1lPSJDSUFHSENHQSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+R2VuZXJhdGUgVGFibGVzIGZyb20gRW50aXRpZXMgV2l6YXJkPC9oMT4KLTxwPlVzZSB0aGUgR2VuZXJhdGUgRERMIGZyb20gRW50aXRpZXMgV2l6YXJkIHRvIHF1aWNrbHkgY3JlYXRlIERETCBzY3JpcHRzIGZyb20geW91ciBwZXJzaXN0ZW50IGVudGl0aWVzLiBEYWxpIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5IHByaW1hcnkgYW5kIGZvcmVpZ24ga2V5cywgYmFzZWQgb24gdGhlIGVudGl0eSBtYXBwaW5ncy48L3A+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrczAxOS5odG0jQkFCQkFHRkkiPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bSNCQUJGQkpCRyI+Q3JlYXRpbmcgYSBKUEEgRW50aXR5PC9hPjxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLmh0bSNDSUFHR0dERiI+Q3JlYXRlIEpQQSBFbnRpdHkgd2l6YXJkPC9hPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDUuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwNS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGQ4M2MuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwNS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlByb3BlcnR5IHBhZ2VzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJQcm9wZXJ0eSBwYWdlcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0RKSUlHIiBuYW1lPSJDQUNESklJRyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+UHJvcGVydHkgcGFnZXM8L2gxPgotPHA+VGhpcyBzZWN0aW9uIGluY2x1ZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBmb2xsb3dpbmc6PC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcyk8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX2RldGFpbHNfb3JtLmh0bSNDQUNHREdIQyI+SlBBIERldGFpbHMgdmlldyAoZm9yIG9ybS54bWwpPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT48L3A+Ci08L2xpPgotPC91bD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDA2Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDYuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODRhMGRkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDYuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+R2VuZXJhbCBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTBaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iR2VuZXJhbCBpbmZvcm1hdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0NBR0dDIiBuYW1lPSJDQUNDQUdHQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+R2VuZXJhbCBpbmZvcm1hdGlvbjwvaDE+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBHZW5lcmFsIGluZm9ybWF0aW9uIGZpZWxkcyBhdmFpbGFibGUgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldyBmb3IgZWFjaCBlbnRpdHkgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgR2VuZXJhbCB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMTYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjE3JSIgLz4KLTxjb2wgd2lkdGg9IjI1JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDEzIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTMiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxMyI+RGVmYXVsdDwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjNC10MTMiPkF2YWlsYWJsZSBmb3IgRW50aXR5Jm5ic3A7VHlwZTwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTMiIGhlYWRlcnM9InIxYzEtdDEzIj5NYXBwaW5nIFR5cGUgSHlwZXJsaW5rPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTMgcjFjMi10MTMiPkNsaWNraW5nIHRoZSBuYW1lIG9mIHRoZSBtYXBwaW5nIHR5cGUsIHdoaWNoIGlzIHJlcHJlc2VudGVkIGFzIGEgaHlwZXJsaW5rLCBpbnZva2VzIHRoZSBNYXBwaW5nIFR5cGUgU2VsZWN0aW9uIGRpYWxvZy4gVXNlIHRoaXMgZGlhbG9nIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgZW50aXR5OiBNYXBwZWQgU3VwZXJjbGFzcywgRW1iZWRkYWJsZSBvciB0aGUgZGVmYXVsdCBtYXBwaW5nIHR5cGUuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTMgcjFjMy10MTMiPkVudGl0eTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDEzIHIxYzQtdDEzIj48YSBocmVmPSJ0YXNrczAwNS5odG0jQkFCR0JJRUUiPkVudGl0eTwvYT4sIDxhIGhyZWY9InRhc2tzMDA2Lmh0bSNCQUJGRUlDRSI+RW1iZWRkYWJsZTwvYT4sIGFuZCA8YSBocmVmPSJ0YXNrczAwNy5odG0jQkFCREFHQ0kiPk1hcHBlZCBzdXBlcmNsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxMyIgaGVhZGVycz0icjFjMS10MTMiPk5hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxMyByMWMyLXQxMyI+VGhlIG5hbWUgb2YgdGhpcyBlbnRpdHkuIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBuYW1lIGlzIHVzZWQgYXMgdGhlIGVudGl0eSBuYW1lLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDEzIHIxYzMtdDEzIj48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxMyByMWM0LXQxMyI+PGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDEzIiBoZWFkZXJzPSJyMWMxLXQxMyI+VGFibGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxMyByMWMyLXQxMyI+VGhlIGRlZmF1bHQgZGF0YWJhc2UgdGFibGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgZW50aXR5LiBUaGVzZSBmaWVsZHMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGluZm9ybWF0aW9uIGluIHRoZSA8YSBocmVmPSJyZWZlcmVuY2UwMDcuaHRtI0NBQ0lKQkdIIj5BdHRyaWJ1dGUgb3ZlcnJpZGVzPC9hPiBhcmVhLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDEzIHIxYzMtdDEzIj48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxMyByMWM0LXQxMyI+PGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDEzIiBoZWFkZXJzPSJyMWMxLXQxMyI+Jm5ic3A7Jm5ic3A7TmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDEzIHIxYzItdDEzIj5UaGUgbmFtZSBvZiB0aGUgcHJpbWFyeSBkYXRhYmFzZSB0YWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGl0eS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQxMyByMWMzLXQxMyI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTMgcjFjNC10MTMiPjxhIGhyZWY9InRhc2tzMDA1Lmh0bSNCQUJHQklFRSI+RW50aXR5PC9hPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQxMyIgaGVhZGVycz0icjFjMS10MTMiPiZuYnNwOyZuYnNwO0NhdGFsb2c8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxMyByMWMyLXQxMyI+VGhlIGRhdGFiYXNlIGNhdGFsb2cgdGhhdCBjb250YWlucyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlRhYmxlPC9zcGFuPi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxMyByMWMzLXQxMyI+QXMgZGVmaW5lZCBpbiA8Y29kZT5vcm0ueG1sPC9jb2RlPi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxMyByMWM0LXQxMyI+PGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDEzIiBoZWFkZXJzPSJyMWMxLXQxMyI+Jm5ic3A7Jm5ic3A7U2NoZW1hPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTMgcjFjMi10MTMiPlRoZSBkYXRhYmFzZSBzY2hlbWEgdGhhdCBjb250YWlucyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlRhYmxlPC9zcGFuPi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQxMyByMWMzLXQxMyI+QXMgZGVmaW5lZCBpbiA8Y29kZT5vcm0ueG1sPC9jb2RlPi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQxMyByMWM0LXQxMyI+PGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtI0JBQkhJQ0FJIj5BZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzczwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDA3Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDcuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJiZDQzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDcuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5BdHRyaWJ1dGUgb3ZlcnJpZGVzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJBdHRyaWJ1dGUgb3ZlcnJpZGVzIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0FDSUpCR0giIG5hbWU9IkNBQ0lKQkdIIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5BdHRyaWJ1dGUgb3ZlcnJpZGVzPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyMTMiIG5hbWU9InN0aHJlZjIxMyI+PC9hPjxhIGlkPSJzdGhyZWYyMTQiIG5hbWU9InN0aHJlZjIxNCI+PC9hPjxhIGlkPSJzdGhyZWYyMTUiIG5hbWU9InN0aHJlZjIxNSI+PC9hPlVzZSB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkF0dHJpYnV0ZSBPdmVycmlkZXM8L3NwYW4+IGFyZWEgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBzcGVjaWZpZWQgaW4gdGhlIDxhIGhyZWY9InJlZmVyZW5jZTAwNi5odG0jQ0FDQ0FHR0MiPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+IGFyZWEgb2YgYW4gYXR0cmlidXRlLiBBdHRyaWJ1dGUgb3ZlcnJpZGVzIGdlbmVyYWxseSBvdmVycmlkZS9jb25maWd1cmUgYXR0cmlidXRlcyB0aGF0IGFyZSBpbmhlcml0ZWQgb3IgZW1iZWRkZWQuPC9wPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgQXR0cmlidXRlIG92ZXJyaWRlIGZpZWxkcyBhdmFpbGFibGUgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldyBmb3IgZWFjaCBlbnRpdHkgdHlwZS48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgR2VuZXJhbCB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMTYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjE3JSIgLz4KLTxjb2wgd2lkdGg9IjI1JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDE0Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTQiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxNCI+RGVmYXVsdDwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjNC10MTQiPkF2YWlsYWJsZSBmb3IgRW50aXR5Jm5ic3A7VHlwZTwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTQiIGhlYWRlcnM9InIxYzEtdDE0Ij5BdHRyaWJ1dGUgT3ZlcnJpZGVzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTQgcjFjMi10MTQiPlNwZWNpZnkgYSBwcm9wZXJ0eSBvciBmaWVsZCB0byBiZSBvdmVycmlkZGVuIChmcm9tIHRoZSBkZWZhdWx0IG1hcHBpbmdzKS4gU2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5PdmVycmlkZSBEZWZhdWx0PC9zcGFuPi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxNCByMWMzLXQxNCI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTQgcjFjNC10MTQiPjxhIGhyZWY9InRhc2tzMDA1Lmh0bSNCQUJHQklFRSI+RW50aXR5PC9hPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxNCIgaGVhZGVycz0icjFjMS10MTQiPkpvaW4gQ29sdW1uczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE0IHIxYzItdDE0Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxNCByMWMzLXQxNCI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTQgcjFjNC10MTQiPjxhIGhyZWY9InRhc2tzMDA1Lmh0bSNCQUJHQklFRSI+RW50aXR5PC9hPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibGluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZmVyZW5jZTAwNi5odG0jQ0FDQ0FHR0MiPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDguaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwOC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZTBhNGYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwOC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlNlY29uZGFyeSB0YWJsZSBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iU2Vjb25kYXJ5IHRhYmxlIGluZm9ybWF0aW9uIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0FDQkhJREEiIG5hbWU9IkNBQ0JISURBIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5TZWNvbmRhcnkgdGFibGUgaW5mb3JtYXRpb248L2gxPgotPHA+PGEgaWQ9InN0aHJlZjIxNiIgbmFtZT0ic3RocmVmMjE2Ij48L2E+PGEgaWQ9InN0aHJlZjIxNyIgbmFtZT0ic3RocmVmMjE3Ij48L2E+PGEgaWQ9InN0aHJlZjIxOCIgbmFtZT0ic3RocmVmMjE4Ij48L2E+PGEgaWQ9InN0aHJlZjIxOSIgbmFtZT0ic3RocmVmMjE5Ij48L2E+VXNlIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+U2Vjb25kYXJ5IFRhYmxlczwvc3Bhbj4gYXJlYSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3IHRvIGFzc29jaWF0ZSBhZGRpdGlvbmFsIHRhYmxlcyB3aXRoIGFuIGVudGl0eS4gVXNlIHRoaXMgYXJlYSBpZiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYW4gZW50aXR5IGlzIHNwcmVhZCBhY3Jvc3MgbXVsdGlwbGUgdGFibGVzLjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkaXRvbmFsX3RhYmxlcy5odG0jQ0lIR0JJRUkiPlNwZWNpZnlpbmcgYWRkaXRpb25hbCB0YWJsZXM8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMDkuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwOS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYWQ2NTEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAwOS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Jbmhlcml0YW5jZSBpbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iSW5oZXJpdGFuY2UgaW5mb3JtYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDQUNGSEdIRSIgbmFtZT0iQ0FDRkhHSEUiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkluaGVyaXRhbmNlIGluZm9ybWF0aW9uPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyMjAiIG5hbWU9InN0aHJlZjIyMCI+PC9hPjxhIGlkPSJzdGhyZWYyMjEiIG5hbWU9InN0aHJlZjIyMSI+PC9hPlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBhdmFpbGFibGUgb24gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Jbmhlcml0YW5jZTwvc3Bhbj4gYXJlYSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3IGZvciBlYWNoIGVudGl0eSB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcsIEluaGVyaXRhbmNlIHRhYi4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcsIEluaGVyaXRhbmNlIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjIzJSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDE1Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTUiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxNSI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTUiIGhlYWRlcnM9InIxYzEtdDE1Ij5TdHJhdGVneTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE1IHIxYzItdDE1Ij5TcGVjaWZ5IHRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBtYXBwaW5nIGEgY2xhc3Mgb3IgY2xhc3MgaGllcmFyY2h5OgotPHVsPgotPGxpPgotPHA+U2luZ2xlIHRhYmxlICZuZGFzaDsgQWxsIGNsYXNzZXMgaW4gdGhlIGhpZXJhcmNoeSBhcmUgbWFwcGVkIHRvIGEgc2luZ2xlIHRhYmxlLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Kb2luZWQgJm5kYXNoOyBUaGUgcm9vdCBvZiB0aGUgaGllcmFyY2h5IGlzIG1hcHBlZCB0byBhIHNpbmdsZSB0YWJsZTsgZWFjaCBjaGlsZCBtYXBzIHRvIGl0cyBvd24gdGFibGUuPC9wPgotPC9saT4KLTxsaT4KLTxwPlRhYmxlIHBlciBjbGFzcyAmbmRhc2g7IEVhY2ggY2xhc3MgaXMgbWFwcGVkIHRvIGEgc2VwYXJhdGUgdGFibGUuPC9wPgotPC9saT4KLTwvdWw+Ci08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ASW5oZXJpdGFuY2U8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTUgcjFjMy10MTUiPlNpbmdsZSB0YWJsZTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxNSIgaGVhZGVycz0icjFjMS10MTUiPjxhIGlkPSJzdGhyZWYyMjIiIG5hbWU9InN0aHJlZjIyMiI+PC9hPjxhIGlkPSJzdGhyZWYyMjMiIG5hbWU9InN0aHJlZjIyMyI+PC9hPkRpc2NyaW1pbmF0b3IgVmFsdWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxNSByMWMyLXQxNSI+U3BlY2lmeSB0aGUgZGlzY3JpbWluYXRvciB2YWx1ZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYW4gZW50aXR5IGluIHRoaXMgaW5oZXJpdGFuY2UgaGllcmFyY2h5LiBUaGUgdmFsdWUgbXVzdCBjb25mb3JtIHRvIHRoZSBzcGVjaWZpZWQgPHNwYW4gY2xhc3M9ImJvbGQiPkRpc2NyaW1pbmF0b3IgVHlwZTwvc3Bhbj4uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTUgcjFjMy10MTUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQxNSIgaGVhZGVycz0icjFjMS10MTUiPjxhIGlkPSJzdGhyZWYyMjQiIG5hbWU9InN0aHJlZjIyNCI+PC9hPjxhIGlkPSJzdGhyZWYyMjUiIG5hbWU9InN0aHJlZjIyNSI+PC9hPkRpc2NyaW1pbmF0b3IgQ29sdW1uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTUgcjFjMi10MTUiPlRoZXNlIGZpZWxkcyBhcmUgYXZhaWxhYmxlIHdoZW4gdXNpbmcgYSA8c3BhbiBjbGFzcz0iYm9sZCI+U2luZ2xlPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iYm9sZCI+Sm9pbmVkPC9zcGFuPiBpbmhlcml0YW5jZSBzdHJhdGVneS4KLTxwPlRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBEaXNjcmltaW5hdG9yQ29sdW1uPC9jb2RlPiBhbm5vdGF0aW9uLjwvcD4KLTxwPlVzZSB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkRldGFpbHM8L3NwYW4+IGFyZWEgdG8gZGVmaW5lIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+TGVuZ3RoPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPkNvbHVtbiBkZWZpbml0aW9uPC9zcGFuPiBvZiB0aGlzIERpc2NyaW1pbmF0b3IgQ29sdW1uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE1IHIxYzMtdDE1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MTUiIGhlYWRlcnM9InIxYzEtdDE1Ij4mbmJzcDsmbmJzcDtOYW1lPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTUgcjFjMi10MTUiPk5hbWUgb2YgdGhlIGRpc2NyaW1pbmF0b3IgY29sdW1uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTUgcjFjMy10MTUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQxNSIgaGVhZGVycz0icjFjMS10MTUiPiZuYnNwOyZuYnNwO1R5cGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxNSByMWMyLXQxNSI+U2V0IHRoaXMgZmllbGQgdG8gc2V0IHRoZSBkaXNjcmltaW5hdG9yIHR5cGUgdG8gPGNvZGU+Q2hhcjwvY29kZT4gb3IgPGNvZGU+SW50ZWdlcjwvY29kZT4gKGluc3RlYWQgb2YgaXRzIGRlZmF1bHQ6IDxjb2RlPlN0cmluZzwvY29kZT4pLiBUaGUgPHNwYW4gY2xhc3M9ImJvbGQiPkRpc2NyaW1pbmF0b3IgVmFsdWU8L3NwYW4+IG11c3QgY29uZm9ybSB0byB0aGlzIHR5cGUuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTUgcjFjMy10MTUiPlN0cmluZzwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyN2MxLXQxNSIgaGVhZGVycz0icjFjMS10MTUiPlByaW1hcnkgS2V5IEpvaW4gQ29sdW1uczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDE1IHIxYzItdDE1Ij5Vc2UgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJpbWFyeSBrZXkgam9pbiBjb2x1bW5zLiBTZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIERlZmF1bHQ8L3NwYW4+LCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+IHRvIHNlbGVjdCBuZXcgSm9pbiBDb2x1bW4uCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHdpdGggQFByaW1hcnlLZXlKb2luQ29sdW1uIGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTUgcjFjMy10MTUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNDSUhDQ0NKRCI+U3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2U8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTAuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxMC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZmFkODUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxMC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlF1ZXJpZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlF1ZXJpZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+PGEgaWQ9InN0aHJlZjIyNiIgbmFtZT0ic3RocmVmMjI2Ij48L2E+Ci08aDE+UXVlcmllczwvaDE+Ci08cD5Vc2UgdGhlIHF1ZXJpZXMgYXJlYSBvZiB0aGUgSlBBIERldGFpbHMgdmlldyB0byBjcmVhdGUgbmFtZWQgcXVlcmllcyBhbmQgbmFtZWQgbmF0aXZlIHF1ZXJpZXMuIFJlZmVyIHRvIDxhIGhyZWY9InRhc2tzMDA4Lmh0bSNCQUJJR0JHRyI+IkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXMiPC9hPiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrczAwOC5odG0jQkFCSUdCR0ciPkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXM8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcyk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDExLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5MmM1ZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDExLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Sm9pbiBUYWJsZSBJbmZvcm1hdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTFaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iSm9pbiBUYWJsZSBJbmZvcm1hdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0JBRUJDIiBuYW1lPSJDQUNCQUVCQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Sm9pbiBUYWJsZSBJbmZvcm1hdGlvbjwvaDE+Ci08cD5Vc2UgYXJlYSB0byBzcGVjaWZ5IGEgbWFwcGVkIGNvbHVtbiBmb3Igam9pbmluZyBhbiBlbnRpdHkgYXNzb2NpYXRpb24uIEJ5IGRlZmF1bHQsIHRoZSBtYXBwaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSBhIHNpbmdsZSBqb2luLjwvcD4KLTxwPlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBhdmFpbGFibGUgb24gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Kb2luIFRhYmxlPC9zcGFuPiBhcmVhIGluIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj50aGUgSlBBIERldGFpbHM8L3NwYW4+IHZpZXcgZm9yIDxhIGhyZWY9InRhc2tzMDE1Lmh0bSNCQUJIR0VCRCI+T25lLXRvLW1hbnkgbWFwcGluZzwvYT4gYW5kIDxhIGhyZWY9InRhc2tzMDEzLmh0bSNCQUJFSUVHRCI+TWFueS10by1tYW55IG1hcHBpbmc8L2E+IG1hcHBpbmcgdHlwZXMuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEpvaW4gVGFibGUgdGFiLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEpvaW4gVGFibGUgdGFiLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMzQlIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MTciPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQxNyI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDE3Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxNyIgaGVhZGVycz0icjFjMS10MTciPk5hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxNyByMWMyLXQxNyI+TmFtZSBvZiB0aGUgam9pbiB0YWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBmb3JlaWduIGtleSBjb2x1bW4uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTcgcjFjMy10MTciPkJ5IGRlZmF1bHQsIHRoZSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHByaW1hcnkgdGFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50aXRpZXMgY29uY2F0ZW5hdGVkIHdpdGggYW4gdW5kZXJzY29yZS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MTciIGhlYWRlcnM9InIxYzEtdDE3Ij48YSBpZD0iQ0FDQkJERkciIG5hbWU9IkNBQ0JCREZHIj48L2E+Sm9pbiBDb2x1bW5zPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTcgcjFjMi10MTciPjxhIGlkPSJzdGhyZWYyNDQiIG5hbWU9InN0aHJlZjI0NCI+PC9hPjxhIGlkPSJzdGhyZWYyNDUiIG5hbWU9InN0aHJlZjI0NSI+PC9hPlNwZWNpZnkgYSBtYXBwZWQgY29sdW1uIGZvciBqb2luaW5nIGFuIGVudGl0eSBhc3NvY2lhdGlvbi4gVGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+QEpvaW5Db2x1bTwvY29kZT4gYXR0cmlidXRlLgotPHA+U2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5PdmVycmlkZSBEZWZhdWx0PC9zcGFuPiwgdGhlbiBBZGQsIEVkaXQsIG9yIFJlbW92ZSB0aGUgam9pbiBjb2x1bW5zLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE3IHIxYzMtdDE3Ij5CeSBkZWZhdWx0LCB0aGUgbWFwcGluZyBpcyBhc3N1bWVkIHRvIGhhdmUgYSBzaW5nbGUgam9pbi48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MTciIGhlYWRlcnM9InIxYzEtdDE3Ij5JbnZlcnNlIEpvaW4gQ29sdW1uczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE3IHIxYzItdDE3Ij5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIERlZmF1bHQ8L3NwYW4+LCB0aGVuIEFkZCwgRWRpdCwgb3IgUmVtb3ZlIHRoZSBqb2luIGNvbHVtbnMuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTcgcjFjMy10MTciPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hcHBpbmcuaHRtI0JBQkRHQklKIj5NYXBwaW5nIGFuIGVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZmVyZW5jZTAyOC5odG0jQ0FDQ0dFSEMiPkVkaXQgSm9pbiBDb2x1bW5zIERpYWxvZzwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDEyLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDhjMjg0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTIuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Kb2luIENvbHVtbnMgSW5mb3JtYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkpvaW4gQ29sdW1ucyBJbmZvcm1hdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0ZDRUpDIiBuYW1lPSJDQUNGQ0VKQyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Sm9pbiBDb2x1bW5zIEluZm9ybWF0aW9uPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyNDYiIG5hbWU9InN0aHJlZjI0NiI+PC9hPlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBhdmFpbGFibGUgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Kb2luIFRhYmxlPC9zcGFuPiBhcmVhIGluIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldyBmb3IgPGEgaHJlZj0idGFza3MwMTQuaHRtI0JBQkhGQUZKIj5NYW55LXRvLW9uZSBtYXBwaW5nPC9hPiBhbmQgPGEgaHJlZj0idGFza3MwMTYuaHRtI0JBQkZIQkNKIj5PbmUtdG8tb25lIG1hcHBpbmc8L2E+IG1hcHBpbmcgdHlwZXMuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEpvaW4gQ29sdW1ucyB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgSm9pbiBDb2x1bW5zIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjM0JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDE4Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTgiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxOCI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTgiIGhlYWRlcnM9InIxYzEtdDE4Ij5Kb2luIENvbHVtbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE4IHIxYzItdDE4Ij48YSBpZD0ic3RocmVmMjQ3IiBuYW1lPSJzdGhyZWYyNDciPjwvYT48YSBpZD0ic3RocmVmMjQ4IiBuYW1lPSJzdGhyZWYyNDgiPjwvYT5TcGVjaWZ5IGEgbWFwcGVkIGNvbHVtbiBmb3Igam9pbmluZyBhbiBlbnRpdHkgYXNzb2NpYXRpb24uIFRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBKb2luQ29sdW08L2NvZGU+IGF0dHJpYnV0ZS4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+T3ZlcnJpZGUgRGVmYXVsdDwvc3Bhbj4sIHRoZW4gQWRkLCBFZGl0LCBvciBSZW1vdmUgdGhlIGpvaW4gY29sdW1ucy48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxOCByMWMzLXQxOCI+QnkgZGVmYXVsdCwgdGhlIG1hcHBpbmcgaXMgYXNzdW1lZCB0byBoYXZlIGEgc2luZ2xlIGpvaW4uPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmZXJlbmNlMDI4Lmh0bSNDQUNDR0VIQyI+RWRpdCBKb2luIENvbHVtbnMgRGlhbG9nPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTMuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxMy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYzc4YTQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxMy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkdlbmVyYWwgaW5mb3JtYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUxWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkdlbmVyYWwgaW5mb3JtYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDQUNDQUNHSCIgbmFtZT0iQ0FDQ0FDR0giPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkdlbmVyYWwgaW5mb3JtYXRpb248L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgR2VuZXJhbCBpbmZvcm1hdGlvbiBmaWVsZHMgYXZhaWxhYmxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcgZm9yIGVhY2ggZW50aXR5IHR5cGUuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgR2VuZXJhbCB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjElIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjIyJSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDIwIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MjAiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQyMCI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MjAiIGhlYWRlcnM9InIxYzEtdDIwIj5QYWNrYWdlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjAgcjFjMi10MjAiPlRoZSBKYXZhIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgcGVyc2lzdGVudCBlbnRpdGllcy4gQ2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkJyb3dzZTwvc3Bhbj4gYW5kIHNlbGVjdCB0aGUgcGFja2FnZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIwIHIxYzMtdDIwIj48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MjAiIGhlYWRlcnM9InIxYzEtdDIwIj5TY2hlbWE8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyMCByMWMyLXQyMCI+VGhlIGRhdGFiYXNlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+VGFibGU8L3NwYW4+LgotPHA+VGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+Jmx0O3NjaGVtYSZndDs8L2NvZGU+IGVsZW1lbnQgaW4gdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MjAgcjFjMy10MjAiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQyMCIgaGVhZGVycz0icjFjMS10MjAiPkNhdGFsb2c8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMCByMWMyLXQyMCI+VGhlIGRhdGFiYXNlIGNhdGFsb2cgdGhhdCBjb250YWlucyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlRhYmxlPC9zcGFuPi4KLTxwPlRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPiZsdDtjYXRhbG9nJmd0OzwvY29kZT4gZWxlbWVudCBpbiB0aGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMCByMWMzLXQyMCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDIwIiBoZWFkZXJzPSJyMWMxLXQyMCI+QWNjZXNzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjAgcjFjMi10MjAiPlNwZWNpZnkgdGhlIGRlZmF1bHQgYWNjZXNzIG1ldGhvZCBmb3IgdGhlIHZhcmlhYmxlcyBpbiB0aGUgcHJvamVjdDoKLTx1bD4KLTxsaT4KLTxwPlByb3BlcnR5PC9wPgotPC9saT4KLTxsaT4KLTxwPkZpZWxkPC9wPgotPC9saT4KLTwvdWw+Ci08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT4mbHQ7YWNjZXNzJmd0OzwvY29kZT4gZWxlbWVudCBpbiB0aGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyMCByMWMzLXQyMCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBlbnRpdGllcyk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDE0Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5NWIzNC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDE0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlBlcnNpc3RlbmNlIFVuaXQgaW5mb3JtYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlBlcnNpc3RlbmNlIFVuaXQgaW5mb3JtYXRpb24iIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDQUNFQUdCRyIgbmFtZT0iQ0FDRUFHQkciPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlBlcnNpc3RlbmNlIFVuaXQgaW5mb3JtYXRpb248L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgUGVyc2lzdGVuY2UgVW5pdCBpbmZvcm1hdGlvbiBmaWVsZHMgYXZhaWxhYmxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcgZm9yIGVhY2ggZW50aXR5IHR5cGUuIFRoZXNlIGZpZWxkcyBhcmUgY29udGFpbmVkIGluIHRoZSA8Y29kZT4mbHQ7cGVyc2lzdGVuY2UtdW5pdC1tZXRhZGF0YSZndDs8L2NvZGU+IGVsZW1lbnQgaW4gdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgR2VuZXJhbCB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjElIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjIyJSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDIxIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MjEiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQyMSI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MjEiIGhlYWRlcnM9InIxYzEtdDIxIj5YTUwgTWFwcGluZyBEYXRhIENvbXBsZXRlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjEgcjFjMi10MjEiPlNwZWNpZmllcyB0aGF0IHRoZSBKYXZhIGNsYXNzZXMgaW4gdGhpcyBwZXJzaXN0ZW5jZSB1bml0IGFyZSBmdWxseSBzcGVjaWZpZWQgYnkgdGhlaXIgbWV0YWRhdGEuIEFueSBhbm5vdGF0aW9ucyB3aWxsIGJlIGlnbm9yZWQuCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT4mbHQ7eG1sLW1hcHBpbmctbWV0YWRhdGEtY29tcGxldGUmZ3Q7PC9jb2RlPiBlbGVtZW50IGluIHRoZSA8Y29kZT5vcm0ueG1sPC9jb2RlPiBmaWxlLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIxIHIxYzMtdDIxIj48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MjEiIGhlYWRlcnM9InIxYzEtdDIxIj5TY2hlbWE8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyMSByMWMyLXQyMSI+VGhlIGRhdGFiYXNlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+VGFibGU8L3NwYW4+LgotPHA+VGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+Jmx0O3NjaGVtYSZndDs8L2NvZGU+IGVsZW1lbnQgaW4gdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MjEgcjFjMy10MjEiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQyMSIgaGVhZGVycz0icjFjMS10MjEiPkNhdGFsb2c8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMSByMWMyLXQyMSI+VGhlIGRhdGFiYXNlIGNhdGFsb2cgdGhhdCBjb250YWlucyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlRhYmxlPC9zcGFuPi4KLTxwPlRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPiZsdDtjYXRhbG9nJmd0OzwvY29kZT4gZWxlbWVudCBpbiB0aGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMSByMWMzLXQyMSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDIxIiBoZWFkZXJzPSJyMWMxLXQyMSI+QWNjZXNzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjEgcjFjMi10MjEiPlNwZWNpZnkgaG93IHRoZSBlbnRpdHkgaXRzIGFjY2VzcyBpbnN0YW5jZSB2YXJpYWJsZXMuCi08dWw+Ci08bGk+Ci08cD5Qcm9wZXJ0eSAmbmRhc2g7IFBlcnNpc3RlbnQgc3RhdGUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgcHJvcGVydHkgYWNjZXNzb3IgbWV0aG9kcy4gVGhlIHByb3BlcnR5IGFjY2Vzc29yIG1ldGhvZHMgbXVzdCBiZSA8c3BhbiBjbGFzcz0iYm9sZCI+cHVibGljPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iYm9sZCI+cHJpdmF0ZTwvc3Bhbj4uPC9wPgotPC9saT4KLTxsaT4KLTxwPkZpZWxkICZuZGFzaDsgSW5zdGFuY2UgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBkaXJlY3RseS4gQWxsIG5vbi10cmFuc2llbnQgaW5zdGFuY2UgdmFyaWFibGVzIGFyZSBwZXJzaXN0ZW50LjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjEgcjFjMy10MjEiPlByb3BlcnR5PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDIxIiBoZWFkZXJzPSJyMWMxLXQyMSI+Q2FzY2FkZSBQZXJzaXN0PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MjEgcjFjMi10MjEiPkFkZHMgY2FzY2FkZS1wZXJzaXN0IHRvIHRoZSBzZXQgb2YgY2FzY2FkZSBvcHRpb25zIGluIGVudGl0eSByZWxhdGlvbnNoaXBzIG9mIHRoZSBwZXJzaXN0ZW5jZSB1bml0LgotPHA+VGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+Jmx0O2Nhc2NhZGUtcGVyc2lzdCZndDs8L2NvZGU+IGVsZW1lbnQgaW4gdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MjEgcjFjMy10MjEiPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTUuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDU5Y2UuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkdlbmVyYXRvcnM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkdlbmVyYXRvcnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFGR0FJSiIgbmFtZT0iQ0lBRkdBSUoiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkdlbmVyYXRvcnM8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgR2VuZXJhdG9yIGluZm9ybWF0aW9uIGZpZWxkcyBhdmFpbGFibGUgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldyBmb3IgdGhlIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgR2VuZXJhbCB0YWIuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjElIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDIyIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MjIiPkRlc2NyaXB0aW9uPC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQyMiIgaGVhZGVycz0icjFjMS10MjIiPkdlbmVyYXRvcjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIyIHIxYzItdDIyIj5EaXNwbGF5cyB0aGUgZXhpc3RpbmcgU2VxdWVuY2UgYW5kIFRhYmxlIGdlbmVyYXRvcnMuCi08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkIFNlcXVlbmNlPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkIFRhYmxlPC9zcGFuPiB0byBhZGQgYSBuZXcgZ2VuZXJhdG9yLjwvcD4KLTxwPkZvciBzZXF1ZW5jZSBnZW5lcmF0b3JzLCB5b3UgbXVzdCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIGZpZWxkczo8L3A+Ci08dWw+Ci08bGk+Ci08cD5OYW1lPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlcXVlbmNlPC9wPgotPC9saT4KLTwvdWw+Ci08cD5Gb3IgdGFibGUgZ2VuZXJhdG9ycywgeW91IG11c3QgY29tcGxldGUgdGhlIGZvbGxvd2luZyBmaWVsZHM6PC9wPgotPHVsPgotPGxpPgotPHA+TmFtZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UYWJsZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5QcmltYXJ5IGtleSBjb2x1bW48L3A+Ci08L2xpPgotPGxpPgotPHA+VmFsdWUgY29sdW1uPC9wPgotPC9saT4KLTxsaT4KLTxwPlByaW1hcnkga2V5IGNvbHVtbiB2YWx1ZTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2RldGFpbHNfb3JtLmh0bSNDQUNHREdIQyI+SlBBIERldGFpbHMgdmlldyAoZm9yIG9ybS54bWwpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTYuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNWQ3NmIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlF1ZXJpZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlF1ZXJpZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFJQkFBSiIgbmFtZT0iQ0lBSUJBQUoiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlF1ZXJpZXM8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgUXVlcnkgaW5mb3JtYXRpb24gZmllbGRzIGF2YWlsYWJsZSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3IGZvciB0aGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZS48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJSdWxlSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgb3B0aW9ucyBvbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3LCBHZW5lcmFsIHRhYi4iIHN1bW1hcnk9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcsIEdlbmVyYWwgdGFiLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyMSUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MjMiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQyMyI+RGVzY3JpcHRpb248L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIzIiBoZWFkZXJzPSJyMWMxLXQyMyI+UXVlcmllczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIzIHIxYzItdDIzIj5EaXNwbGF5cyB0aGUgZXhpc3RpbmcgTmFtZWQgYW5kIE5hdGl2ZSBxdWVyaWVzLgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZDwvc3Bhbj4gdG8gYWRkIGEgbmFtZWQgcXVlcnksIG9yIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQgTmF0aXZlPC9zcGFuPiBmb3IgYSBuYXRpdmUgcXVlcnkuPC9wPgotPHA+Rm9yIG5hbWVkIHF1ZXJpZXMsIGVudGVyIHRoZSBxdWVyeSBpbiB0aGUgUXVlcnkgZmllbGQuPC9wPgotPHA+Rm9yIG5hdGl2ZSBxdWVyaWVzLCBzZWxlY3QgYSByZXN1bHQgY2xhc3MsIHRoZW4gZW50ZXIgdGhlIHF1ZXJ5IGluIHRoZSBRdWVyeSBmaWVsZC48L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MjMiIGhlYWRlcnM9InIxYzEtdDIzIj5RdWVyeSBIaW50czwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDIzIHIxYzItdDIzIj5EaXNwbGF5cyB0aGUgZXhpc3RpbmcgcXVlcnkgaGludHMgKE5hbWUgYW5kIFZhbHVlKS4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+IHRvIGFkZCBhIG5ldyBxdWVyeSBoaW50LjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrczAwOC5odG0jQkFCSUdCR0ciPkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXM8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2RldGFpbHNfb3JtLmh0bSNDQUNHREdIQyI+SlBBIERldGFpbHMgdmlldyAoZm9yIG9ybS54bWwpPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTcuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MzA3ODAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAxNy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNvbnZlcnRlcnM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNvbnZlcnRlcnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFER0NJRCIgbmFtZT0iQ0lBREdDSUQiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkNvbnZlcnRlcnM8L2gxPgotPHA+VGhlIENvbnZlcnRlcnMgaW5mb3JtYXRpb24gaW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgRWNsaXBzZUxpbms8L3A+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkPC9zcGFuPiB0byBjcmVhdGUgYSBuZXcgY29udmVydGVyLCB1c2luZyB0aGUgPGEgaHJlZj0icmVmX2FkZF9jb252ZXJ0ZXIuaHRtI0NJQUdDR0lKIj5BZGQgQ29udmVydGVyIGRpYWxvZzwvYT4uPC9wPgotPHA+Jm5ic3A7PC9wPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9kZXRhaWxzX29ybS5odG0jQ0FDR0RHSEMiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBvcm0ueG1sKTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDE4Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTguaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDY4MTg5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTguaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q29ubmVjdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQ29ubmVjdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUZGSklFIiBuYW1lPSJDSUFGRkpJRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q29ubmVjdGlvbjwvaDE+Ci08cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBpbiB0aGUgQ29ubmVjdGlvbiBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJ0Ymxmb3JtYWwiPjxhIGlkPSJzdGhyZWYyNTgiIG5hbWU9InN0aHJlZjI1OCI+PC9hPjxhIGlkPSJzdGhyZWYyNTkiIG5hbWU9InN0aHJlZjI1OSI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW50YWJsZSI+UHJvcGVydGllcyBvZiB0aGUgQ29ubmVjdGlvbiBQYWdlPC9wPgotPHRhYmxlIGNsYXNzPSJGb3JtYWwiIHRpdGxlPSJQcm9wZXJ0aWVzIG9mIHRoZSBDb25uZWN0aW9uIFBhZ2UiIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgZm9yIHRoZSBwZXJzaXN0ZW5jZS54bWwgZWRpdG9yJnJzcXVvO3MgY29ubmVjdGlvbiBwYWdlLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJoc2lkZXMiIHJ1bGVzPSJncm91cHMiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MjUiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQyNSI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDI1Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQyNSIgaGVhZGVycz0icjFjMS10MjUiPgotPHA+VHJhbnNhY3Rpb24gVHlwZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI1IHIxYzItdDI1Ij4KLTxwPlNwZWNpZnkgaWYgdGhlIGNvbm5lY3Rpb24gZm9yIHRoaXMgcGVyc2lzdGVuY2UgdW5pdCB1c2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zYWN0aW9uIHR5cGVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5EZWZhdWx0PC9zcGFuPiAtLSBTZWxlY3QgdG8gdXNlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgY29udGFpbmVyLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+SlRBPC9zcGFuPiAoSmF2YSBUcmFuc2FjdGlvbiBBUEkpIC0tIFRyYW5zYWN0aW9ucyBvZiB0aGUgSmF2YSBFRSBzZXJ2ZXIuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5SZXNvdXJjZSBMb2NhbDwvc3Bhbj4gLS0gTmF0aXZlIGFjdGlvbnMgb2YgYSBKREJDIGRyaXZlciB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IGEgcGVyc2lzdGVuY2UgdW5pdC48L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI1IHIxYzMtdDI1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MjUiIGhlYWRlcnM9InIxYzEtdDI1Ij4KLTxwPkJhdGNoIFdyaXRpbmc8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNSByMWMyLXQyNSI+Ci08cD5TcGVjaWZ5IHRoZSB1c2Ugb2YgYmF0Y2ggd3JpdGluZyB0byBvcHRpbWl6ZSB0cmFuc2FjdGlvbnMgd2l0aCBtdWx0aXBsZSB3cml0ZSBvcGVyYXRpb25zLjwvcD4KLTxwPlNldCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBpbnRvIHRoZSBzZXNzaW9uIGF0IGRlcGxveW1lbnQgdGltZS48L3A+Ci08cD5Ob3RlOiBUaGlzIHByb3BlcnR5IGFwcGxpZXMgd2hlbiB1c2VkIGJvdGggaW4gYSBKYXZhIFNFIGFuZCBKYXZhIEVFIGVudmlyb25tZW50LjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIG9yYWNsZS50b3BsaW5rLmNvbmZpZy5CYXRjaFdyaXRpbmc6PC9wPgotPHVsPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkpEQkM8L3NwYW4+Jm5kYXNoO1VzZSBKREJDIGJhdGNoIHdyaXRpbmcuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5CdWZmZXJlZDwvc3Bhbj4mbmRhc2g7RG8gbm90IHVzZSBlaXRoZXIgSkRCQyBiYXRjaCB3cml0aW5nIG5vciBuYXRpdmUgcGxhdGZvcm0gYmF0Y2ggd3JpdGluZy48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPk9yYWNsZUpEQkM8L3NwYW4+Jm5kYXNoO1VzZSBib3RoIEpEQkMgYmF0Y2ggd3JpdGluZyBhbmQgT3JhY2xlIG5hdGl2ZSBwbGF0Zm9ybSBiYXRjaCB3cml0aW5nLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+Tm9uZTwvc3Bhbj4mbmRhc2g7RG8gbm90IHVzZSBiYXRjaCB3cml0aW5nICh0dXJuIGl0IG9mZikuPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNSByMWMzLXQyNSI+Ci08cD5Ob25lPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+Ci08cD5TdGF0ZW1lbnQgY2FjaGluZzwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDI1IHIxYzItdDI1Ij48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyNSByMWMzLXQyNSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+Ci08cD5OYXRpdmUgU1FMPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjUgcjFjMi10MjUiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDI1IHIxYzMtdDI1Ij4KLTxwPkZhbHNlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+Ci08cD5KVEEgRGF0YSBTb3VyY2UgTmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDI1IHIxYzItdDI1Ij4KLTxwPklmIHlvdSBzZWxlY3RlZCA8c3BhbiBjbGFzcz0iYm9sZCI+SlRBPC9zcGFuPiBhcyB0aGUgdHJhbnNhY3Rpb24gdHlwZSwgdGhlbiBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBKVEEgZGF0YSBzb3VyY2UgZm9yIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDI1IHIxYzMtdDI1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjdjMS10MjUiIGhlYWRlcnM9InIxYzEtdDI1Ij4KLTxwPk5vbi1KVEEgRGF0YSBTb3VyY2UgTmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDI1IHIxYzItdDI1Ij4KLTxwPklmIHlvdSBzZWxlY3RlZCA8c3BhbiBjbGFzcz0iYm9sZCI+UmVzb3VyY2UgTG9jYWw8L3NwYW4+IGFzIHRoZSB0cmFuc2FjdGlvbiB0eXBlLCB0aGVuIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBub24tSlRBIGRhdGEgc291cmNlLjwvcD4KLTxwPlRoaXMgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvamVjdHMgdXNpbmcgdGhlIEdlbmVyaWMgcGxhdGZvcm0uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MjUgcjFjMy10MjUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQyNSIgaGVhZGVycz0icjFjMS10MjUiPgotPHA+Jm5ic3A7Jm5ic3A7QmluZCZuYnNwO1BhcmFtZXRlcnM8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQyNSByMWMyLXQyNSI+Ci08cD5Db250cm9sIHdoZXRoZXIgb3Igbm90IHRoZSBxdWVyeSB1c2VzIHBhcmFtZXRlciBiaW5kaW5nLjwvcD4KLTxwPk5vdGU6IFRoaXMgcHJvcGVydHkgYXBwbGllcyB3aGVuIHVzZWQgaW4gYSBKYXZhIFNFIGVudmlyb25tZW50LjwvcD4KLTxwPlRoaXMgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvamVjdHMgdXNpbmcgdGhlIEdlbmVyaWMgcGxhdGZvcm0uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10MjUgcjFjMy10MjUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOWMxLXQyNSIgaGVhZGVycz0icjFjMS10MjUiPgotPHA+RWNsaXBzZUxpbmsgQ29ubmVjdGlvbiBQb29sPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjljMS10MjUgcjFjMi10MjUiPgotPHA+RGVmaW5lIHRoZSBjb25uZWN0aW9uIHBvb2wgZHJpdmVyLCBVUkwsIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQuPC9wPgotPHA+VGhlc2UgcHJvcGVydGllcyBhcmUgbm90ZSBhdmFpbGFibGUgZm9yIHByb2plY3RzIHVzaW5nIHRoZSBHZW5lcmljIHBsYXRmb3JtLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDI1IHIxYzMtdDI1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEwYzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+Ci08cD4mbmJzcDsmbmJzcDtSZWFkJm5ic3A7Q29ubmVjdGlvbjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMGMxLXQyNSByMWMyLXQyNSI+Ci08cD5UaGUgbWF4aW11bSBhbmQgbWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgYWxsb3dlZCBpbiB0aGUgSkRCQyByZWFkIGNvbm5lY3Rpb24gcG9vbC48L3A+Ci08cD5Ob3RlOiBUaGVzZSBwcm9wZXJ0eSBhcHBseSB3aGVuIHVzZWQgaW4gYSBKYXZhIFNFIGVudmlyb25tZW50LjwvcD4KLTxwPlRoZXNlIHByb3BlcnRpZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHByb2plY3RzIHVzaW5nIHRoZSBHZW5lcmljIHBsYXRmb3JtPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEwYzEtdDI1IHIxYzMtdDI1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjExYzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+Ci08cD4mbmJzcDsmbmJzcDtXcml0ZSZuYnNwO0Nvbm5lY3Rpb248L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTFjMS10MjUgcjFjMi10MjUiPgotPHA+VGhlIG1heGltdW0gYW5kIG1pbmltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGFsbG93ZWQgaW4gdGhlIEpEQkMgcmVhZCBjb25uZWN0aW9uIHBvb2wuPC9wPgotPHA+Tm90ZTogVGhlc2UgcHJvcGVydHkgYXBwbHkgd2hlbiB1c2VkIGluIGEgSmF2YSBTRSBlbnZpcm9ubWVudC48L3A+Ci08cD5UaGVzZSBwcm9wZXJ0aWVzIGFyZSBub3QgYXZhaWxhYmxlIGZvciBwcm9qZWN0cyB1c2luZyB0aGUgR2VuZXJpYyBwbGF0Zm9ybTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMWMxLXQyNSByMWMzLXQyNSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0idGJsZm9ybWFsIiAtLT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDE5Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTkuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTEzMmQyLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMTkuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q3VzdG9taXphdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQ3VzdG9taXphdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUpBRkVHIiBuYW1lPSJDSUFKQUZFRyI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q3VzdG9taXphdGlvbjwvaDE+Ci08cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBpbiB0aGUgQ3VzdG9taXphdGlvbiBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJ0Ymxmb3JtYWwiPjxhIGlkPSJzdGhyZWYyNjAiIG5hbWU9InN0aHJlZjI2MCI+PC9hPjxhIGlkPSJzdGhyZWYyNjEiIG5hbWU9InN0aHJlZjI2MSI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW50YWJsZSI+UHJvcGVydGllcyBvZiB0aGUgQ3VzdG9taXphdGlvbiBQYWdlPC9wPgotPHRhYmxlIGNsYXNzPSJGb3JtYWwiIHRpdGxlPSJQcm9wZXJ0aWVzIG9mIHRoZSBDdXN0b21pemF0aW9uIFBhZ2UiIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHBlcnNpc3RlbmNlLnhtbCBFZGl0b3ImcnNxdW87cyBDdXN0b21pemF0aW9uIHBhZ2UuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9Imdyb3VwcyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyMyUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyNiI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDI2Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjYiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD5XZWF2aW5nPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjYgcjFjMi10MjYiPgotPHA+U3BlY2lmaWVzIGlmIHdlYXZpbmcgb2YgdGhlIGVudGl0eSBjbGFzc2VzIGlzIHBlcmZvcm1lZC4gVGhlIEVjbGlwc2VMaW5rIEpQQSBwZXJzaXN0ZW5jZSBwcm92aWRlciB1c2VzIHdlYXZpbmcgdG8gZW5oYW5jZSBKUEEgZW50aXRpZXMgZm9yIHN1Y2ggcHJvcGVydGllcyBhcyBsYXp5IGxvYWRpbmcsIGNoYW5nZSB0cmFja2luZywgZmV0Y2ggZ3JvdXBzLCBhbmQgaW50ZXJuYWwgb3B0aW1pemF0aW9ucy4gU2VsZWN0IGZyb20gdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5ObyBXZWF2aW5nPC9zcGFuPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+V2VhdmUgRHluYW1pY2FsbHk8L3NwYW4+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5XZWF2ZSBTdGF0aWNhbGx5PC9zcGFuPiAtLSBVc2UgdGhpcyBvcHRpb24gaWYgeW91IHBsYW4gdG8gZXhlY3V0ZSB5b3VyIGFwcGxpY2F0aW9uIG91dHNpZGUgb2YgYSBKYXZhIEVFIDUgY29udGFpbmVyIGluIGFuIGVudmlyb25tZW50IHRoYXQgZG9lcyBub3QgcGVybWl0IHRoZSB1c2Ugb2YgPGNvZGU+LWphdmFhZ2VudDplY2xpcHNlbGluay5qYXI8L2NvZGU+IG9uIHRoZSBKVk0gY29tbWFuZCBsaW5lLiBUaGlzIGFzc3VtZXMgdGhhdCBjbGFzc2VzIGhhdmUgYWxyZWFkeSBiZWVuIHN0YXRpY2FsbHkgd292ZW4uIFJ1biB0aGUgc3RhdGljIHdlYXZlciBvbiB0aGUgY2xhc3NlcyBiZWZvcmUgZGVwbG95aW5nIHRoZW0uPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyNiByMWMzLXQyNiI+Ci08cD5XZWF2ZSBEeW5hbWljYWxseTwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQyNiIgaGVhZGVycz0icjFjMS10MjYiPgotPHA+Jm5ic3A7Jm5ic3A7V2VhdmluZyZuYnNwO0xhenk8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNiByMWMyLXQyNiI+Ci08cD5TZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGxhenkgd2VhdmluZy48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNiByMWMzLXQyNiI+Ci08cD5UcnVlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD4mbmJzcDsmbmJzcDtXZWF2aW5nJm5ic3A7RmV0Y2gmbmJzcDtHcm91cHM8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyNiByMWMyLXQyNiI+Ci08cD5TZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGZldGNoIGdyb3VwcyB0aHJvdWdoIHdlYXZpbmcuIFNldCB0aGlzIG9wdGlvbiB0byBmYWxzZSBpZjo8L3A+Ci08dWw+Ci08bGk+Ci08cD5UaGVyZSBpcyBubyB3ZWF2aW5nLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5DbGFzc2VzIHNob3VsZCBub3QgYmUgY2hhbmdlZCBkdXJpbmcgd2VhdmluZyAoZm9yIGV4YW1wbGUsIHdoZW4gZGVidWdnaW5nKS48L3A+Ci08L2xpPgotPC91bD4KLTxwPlNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIGZvciBwbGF0Zm9ybXMgd2hlcmUgaXQgaXMgbm90IHN1cHBvcnRlZC48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyNiByMWMzLXQyNiI+Ci08cD5UcnVlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD5XZWF2aW5nJm5ic3A7aW50ZXJuYWw8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyNiByMWMyLXQyNiI+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjYgcjFjMy10MjYiPgotPHA+VHJ1ZTwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQyNiIgaGVhZGVycz0icjFjMS10MjYiPgotPHA+V2VhdmluZyZuYnNwO2VhZ2VyPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MjYgcjFjMi10MjYiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDI2IHIxYzMtdDI2Ij4KLTxwPkZhbHNlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD4mbmJzcDsmbmJzcDtXZWF2aW5nJm5ic3A7Q2hhbmdlJm5ic3A7VHJhY2tpbmc8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQyNiByMWMyLXQyNiI+Ci08cD5TZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIHdlYXZpbmcgdG8gZGV0ZWN0IHdoaWNoIGZpZWxkcyBvciBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgY2hhbmdlLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDI2IHIxYzMtdDI2Ij4KLTxwPlRydWU8L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjhjMS10MjYiIGhlYWRlcnM9InIxYzEtdDI2Ij4KLTxwPiZuYnNwOyZuYnNwO1Rocm93Jm5ic3A7RXhjZXB0aW9uczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDI2IHIxYzItdDI2Ij4KLTxwPlNlbGVjdCB0aGlzIG9wdGlvbiB0byBzZXQgRWNsaXBzZUxpbmsgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9yIGxvZyBhIHdhcm5pbmcgd2hlbiBpdCBlbmNvdW50ZXJzIGEgcHJvYmxlbSB3aXRoIGFueSBvZiB0aGUgZmlsZXMgbGlzdGVkIGluIGEgPHNwYW4gY2xhc3M9ImJvbGQiPnBlcnNpc3RlbmNlLnhtbDwvc3Bhbj4gZmlsZSA8Y29kZT4mbHQ7bWFwcGluZy1maWxlJmd0OzwvY29kZT4gZWxlbWVudC48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQyNiByMWMzLXQyNiI+Ci08cD5UcnVlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI5YzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD5FeGNlcHRpb24gaGFuZGxlcjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDI2IHIxYzItdDI2Ij4KLTxwPlNlbGVjdCAob3IgY3JlYXRlKSBhIEphdmEgY2xhc3MgdG8gaGFuZGxlIGV4Y3BldGlvbnMuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjljMS10MjYgcjFjMy10MjYiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMTBjMS10MjYiIGhlYWRlcnM9InIxYzEtdDI2Ij4KLTxwPlNlc3Npb24gQ3VzdG9taXplcjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMGMxLXQyNiByMWMyLXQyNiI+Ci08cD5TZWxlY3QgYSBzZXNzaW9uIGN1c3RvbWl6ZXIgY2xhc3M6IGEgSmF2YSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIDxjb2RlPmVjbGlwc2VsaW5rLnRvb2xzLnNlc3Npb25jb25maWd1cmF0aW9uLlNlc3Npb25DdXN0b21pemVyPC9jb2RlPiBpbnRlcmZhY2UgYW5kIHByb3ZpZGVzIGEgZGVmYXVsdCAoemVyby1hcmd1bWVudCkgY29uc3RydWN0b3IuIFVzZSB0aGlzIGNsYXNzJyA8Y29kZT5jdXN0b21pemU8L2NvZGU+IG1ldGhvZCwgd2hpY2ggdGFrZXMgYW4gPGNvZGU+ZWNsaXBzZWxpbmsuc2Vzc2lvbnMuU2Vzc2lvbjwvY29kZT4sIHRvIHByb2dyYW1tYXRpY2FsbHkgYWNjZXNzIGFkdmFuY2VkIEVjbGlwc2VMaW5rIHNlc3Npb24gQVBJLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMGMxLXQyNiByMWMzLXQyNiI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMWMxLXQyNiIgaGVhZGVycz0icjFjMS10MjYiPgotPHA+RGVzY3JpcHRvciBDdXN0b21pemVyPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjExYzEtdDI2IHIxYzItdDI2Ij4KLTxwPlNlbGVjdCBhbiBFY2xpcHNlTGluayBkZXNjcmlwdG9yIGN1c3RvbWl6ZXIgY2xhc3MmbmRhc2g7YSBKYXZhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgPGNvZGU+ZWNsaXBzZWxpbmsudG9vbHMuc2Vzc2lvbmNvbmZpZ3VyYXRpb24uRGVzY3JpcHRvckN1c3RvbWl6ZXI8L2NvZGU+IGludGVyZmFjZSBhbmQgcHJvdmlkZXMgYSBkZWZhdWx0ICh6ZXJvLWFyZ3VtZW50KSBjb25zdHJ1Y3Rvci4gVXNlIHRoaXMgY2xhc3MncyA8Y29kZT5jdXN0b21pemU8L2NvZGU+IG1ldGhvZCwgd2hpY2ggdGFrZXMgYW4gPGNvZGU+ZWNsaXBzZWxpbmsuZGVzY3JpcHRvcnMuQ2xhc3NEZXNjcmlwdG9yPC9jb2RlPiwgdG8gcHJvZ3JhbW1hdGljYWxseSBhY2Nlc3MgYWR2YW5jZWQgRWNsaXBzZUxpbmsgZGVzY3JpcHRvciBhbmQgbWFwcGluZyBBUEkgZm9yIHRoZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgSlBBIGVudGl0eSBuYW1lZCA8Y29kZT4mbHQ7RU5USVRZJmd0OzwvY29kZT4uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjExYzEtdDI2IHIxYzMtdDI2Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEyYzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Ci08cD5WYWxpZGF0aW9uIG9ubHk8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTJjMS10MjYgcjFjMi10MjYiPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMmMxLXQyNiByMWMzLXQyNiI+Ci08cD5UcnVlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxM2MxLXQyNiIgaGVhZGVycz0icjFjMS10MjYiPgotPHA+UHJvZmlsZXI8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTNjMS10MjYgcjFjMi10MjYiPgotPHVsPgotPGxpPgotPHA+Tm8gUHJvZmlsZXI8L3A+Ci08L2xpPgotPGxpPgotPHA+UGVyZm9ybWFuY2UgUHJvZmlsZXI8L3A+Ci08L2xpPgotPGxpPgotPHA+UXVlcnkgTW9uaXRvcjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEzYzEtdDI2IHIxYzMtdDI2Ij4KLTxwPk5vUHJvZmlsZXI8L3A+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJ0Ymxmb3JtYWwiIC0tPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1UaGlzIHBhZ2UgaXMgbm90IGF2YWlsYWJsZSBmb3IgcHJvamVjdHMgdXNpbmcgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5HZW5lcmljPC9zcGFuPiBwbGF0Zm9ybS48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjAuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyMC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNmM5NzEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyMC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5DYWNoaW5nPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJDYWNoaW5nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBQkVEQ0giIG5hbWU9IkNJQUJFRENIIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT48YSBpZD0ic3RocmVmMjYyIiBuYW1lPSJzdGhyZWYyNjIiPjwvYT5DYWNoaW5nPC9oMT4KLTxwPlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIENhY2hpbmcgcGFnZSBvZiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bSNDSUFDQ0hJRCI+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvYT4uPC9wPgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMjYzIiBuYW1lPSJzdGhyZWYyNjMiPjwvYT48YSBpZD0ic3RocmVmMjY0IiBuYW1lPSJzdGhyZWYyNjQiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPlByb3BlcnRpZXMgb2YgdGhlIENhY2hpbmcgUGFnZTwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iUHJvcGVydGllcyBvZiB0aGUgQ2FjaGluZyBQYWdlIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwZXJzaXN0ZW5jZS54bWwmcnNxdW87cyBDYWNoaW5nIHBhZ2UuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9Imdyb3VwcyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyOCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDI4Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjgiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDI4IiBoZWFkZXJzPSJyMWMxLXQyOCI+Ci08cD5EZWZhdWx0IENhY2hlIFR5cGU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyOCByMWMyLXQyOCI+Ci08cD5TZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXMgdGhlIERlZmF1bHQgQ2FjaGUgVHlwZTo8L3A+Ci08dWw+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+U29mdCB3aXRoIFdlYWsgU3ViY2FjaGU8L3NwYW4+Jm5kYXNoO1RoaXMgb3B0aW9uIGlzIHNpbWlsYXIgdG8gPHNwYW4gY2xhc3M9ImJvbGQiPldlYWsgd2l0aCBIYXJkIFN1YmNhY2hlPC9zcGFuPiBleGNlcHQgdGhhdCBpdCBtYWludGFpbnMgYSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBzdWJjYWNoZSB0aGF0IHVzZXMgc29mdCByZWZlcmVuY2VzLiBUaGUgc2l6ZSBvZiB0aGUgc3ViY2FjaGUgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBpZGVudGl0eSBtYXAuIFRoZSBzdWJjYWNoZSB1c2VzIHNvZnQgcmVmZXJlbmNlcyB0byBlbnN1cmUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBnYXJiYWdlLWNvbGxlY3RlZCBvbmx5IGlmIHRoZSBzeXN0ZW0gaXMgbG93IG9uIG1lbW9yeS48L3A+Ci08cD5Vc2UgdGhpcyBpZGVudGl0eSBtYXAgaW4gbW9zdCBjaXJjdW1zdGFuY2VzIGFzIGEgbWVhbnMgdG8gY29udHJvbCBtZW1vcnkgdXNlZCBieSB0aGUgY2FjaGUuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5XZWVrIHdpdGggSGFyZCBTdWJjYWNoZTwvc3Bhbj4mbmRhc2g7VGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byA8c3BhbiBjbGFzcz0iYm9sZCI+U29mdCB3aXRoIFdlYWs8L3NwYW4+IHN1YmNhY2hlIGV4Y2VwdCB0aGF0IGl0IG1haW50YWlucyBhIG1vc3QgZnJlcXVlbnRseSB1c2VkIHN1YmNhY2hlIHRoYXQgdXNlcyBoYXJkIHJlZmVyZW5jZXMuIFVzZSB0aGlzIGlkZW50aXR5IG1hcCBpZiBzb2Z0IHJlZmVyZW5jZXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgeW91ciBwbGF0Zm9ybS48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPldlYWs8L3NwYW4+Jm5kYXNoO1RoaXMgb3B0aW9uIGlzIHNpbWlsYXIgdG8gPHNwYW4gY2xhc3M9ImJvbGQiPkZ1bGw8L3NwYW4+LCBleGNlcHQgdGhhdCBvYmplY3RzIGFyZSByZWZlcmVuY2VkIHVzaW5nIHdlYWsgcmVmZXJlbmNlcy4gVGhpcyBvcHRpb24gdXNlcyBsZXNzIG1lbW9yeSB0aGFuIDxzcGFuIGNsYXNzPSJib2xkIj5GdWxsPC9zcGFuPiwgYWxsb3dzIGNvbXBsZXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgcHJvdmlkZXMgZnVsbCBjYWNoaW5nIGFuZCBndWFyYW50ZWVkIGlkZW50aXR5LjwvcD4KLTxwPlVzZSB0aGlzIGlkZW50aXR5IG1hcCBmb3IgdHJhbnNhY3Rpb25zIHRoYXQsIG9uY2Ugc3RhcnRlZCwgc3RheSBvbiB0aGUgc2VydmVyIHNpZGUuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5Tb2Z0PC9zcGFuPiZuZGFzaDtUaGlzIG9wdGlvbiBpcyBzaW1pbGFyIHRvIDxzcGFuIGNsYXNzPSJib2xkIj5XZWFrPC9zcGFuPiBleGNlcHQgdGhhdCB0aGUgbWFwIGhvbGRzIHRoZSBvYmplY3RzIHVzaW5nIHNvZnQgcmVmZXJlbmNlcy4gVGhpcyBpZGVudGl0eSBtYXAgZW5hYmxlcyBmdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiB3aGVuIG1lbW9yeSBpcyBsb3cuIEl0IHByb3ZpZGVzIGZ1bGwgY2FjaGluZyBhbmQgZ3VhcmFudGVlZCBpZGVudGl0eS48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkZ1bGw8L3NwYW4+Jm5kYXNoO1RoaXMgb3B0aW9uIHByb3ZpZGVzIGZ1bGwgY2FjaGluZyBhbmQgZ3VhcmFudGVlZCBpZGVudGl0eTogYWxsIG9iamVjdHMgYXJlIGNhY2hlZCBhbmQgbm90IHJlbW92ZWQuPC9wPgotPHA+Tm90ZTogVGhpcyBwcm9jZXNzIG1heSBiZSBtZW1vcnktaW50ZW5zaXZlIHdoZW4gbWFueSBvYmplY3RzIGFyZSByZWFkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+Tm9uZTwvc3Bhbj4mbmRhc2g7VGhpcyBvcHRpb24gZG9lcyBub3QgcHJlc2VydmUgb2JqZWN0IGlkZW50aXR5IGFuZCBkb2VzIG5vdCBjYWNoZSBvYmplY3RzLlRoaXMgb3B0aW9uIGlzIG5vdCByZWNvbW1lbmRlZC48L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI4IHIxYzMtdDI4Ij4KLTxwPldlYWsgd2l0aCBoYXJkIHN1YmNhY2hlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDI4IiBoZWFkZXJzPSJyMWMxLXQyOCI+Ci08cD5EZWZhdWx0IENhY2hlIFNpemU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyOCByMWMyLXQyOCI+Ci08cD5TZXQgdGhlIHNpemUgKG1heGltdW0gbnVtYmVyIG9mIG9iamVjdHMpIG9mIHRoZSBjYWNoZS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyOCByMWMzLXQyOCI+Ci08cD4xMDA8L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MjgiIGhlYWRlcnM9InIxYzEtdDI4Ij4KLTxwPkRlZmF1bHQgU2hhcmVkIENhY2hlPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjggcjFjMi10MjgiPgotPHA+U3BlY2lmaWVzIGlmIGNhY2hlZCBpbnN0YW5jZXMgc2hvdWxkIGJlIGluIHRoZSBzaGFyZWQgY2FjaGUgb3IgaW4gYSBjbGllbnQgaXNvbGF0ZWQgY2FjaGUuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjggcjFjMy10MjgiPgotPHA+VHJ1ZTwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQyOCIgaGVhZGVycz0icjFjMS10MjgiPgotPHA+RW50aXR5IENhY2hpbmc8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyOCByMWMyLXQyOCI+Ci08cD5TcGVjaWZ5IHRoZSBlbnRpdHktc3BlY2lmaWMgY2FjaGluZyBpbmZvcm1hdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyOCByMWMzLXQyOCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDI4IiBoZWFkZXJzPSJyMWMxLXQyOCI+Ci08cD4mbmJzcDsmbmJzcDtDYWNoZSZuYnNwO1R5cGU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQyOCByMWMyLXQyOCI+Ci08cD5TZWUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+RGVmYXVsdCBDYWNoZSBUeXBlLjwvc3Bhbj48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQyOCByMWMzLXQyOCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDI4IiBoZWFkZXJzPSJyMWMxLXQyOCI+Ci08cD4mbmJzcDsmbmJzcDtDYWNoZSZuYnNwO1NpemU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQyOCByMWMyLXQyOCI+Ci08cD5TZWUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+RGVmYXVsdCBDYWNoZSBTaXplLjwvc3Bhbj48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQyOCByMWMzLXQyOCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI4YzEtdDI4IiBoZWFkZXJzPSJyMWMxLXQyOCI+Ci08cD4mbmJzcDsmbmJzcDtTaGFyZWQmbmJzcDtDYWNoZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDI4IHIxYzItdDI4Ij4KLTxwPlNlZSA8c3BhbiBjbGFzcz0iaXRhbGljIj5EZWZhdWx0IFNoYXJlZCBDYWNoZTwvc3Bhbj4uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10MjggcjFjMy10MjgiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOWMxLXQyOCIgaGVhZGVycz0icjFjMS10MjgiPgotPHA+Rmx1c2ggY2xlYXIgY2FjaGU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOWMxLXQyOCByMWMyLXQyOCI+Ci08cD5TZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgYXMgdGhlIERlZmF1bHQgQ2FjaGUgVHlwZTo8L3A+Ci08dWw+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RHJvcDwvc3Bhbj4gJm5kYXNoOyBUaGlzIG1vZGUgaXMgdGhlIGZhc3Rlc3QgYW5kIHVzZXMgdGhlIGxlYXN0IG1lbW9yeS4gSG93ZXZlciwgYWZ0ZXIgY29tbWl0IHRoZSBzaGFyZWQgY2FjaGUgbWlnaHQgcG90ZW50aWFsbHkgY29udGFpbiBzdGFsZSBkYXRhLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RHJvcCBJbnZhbGlkYXRlPC9zcGFuPiAmbmRhc2g7IENsYXNzZXMgdGhhdCBoYXZlIGF0IGxlYXN0IG9uZSBvYmplY3QgdXBkYXRlZCBvciBkZWxldGVkIGFyZSBpbnZhbGlkYXRlZCBpbiB0aGUgc2hhcmVkIGNhY2hlIGF0IGNvbW1pdCB0aW1lLiBUaGlzIG1vZGUgaXMgc2xvd2VyIHRoYW4gPHNwYW4gY2xhc3M9ImJvbGQiPkRyb3A8L3NwYW4+LCBidXQgYXMgZWZmaWNpZW50IG1lbW9yeSB1c2FnZS13aXNlLCBhbmQgcHJldmVudHMgc3RhbGUgZGF0YS48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPk1lcmdlPC9zcGFuPiAmbmRhc2g7IERyb3AgY2xhc3NlcyBmcm9tIHRoZSBFbnRpdHlNYW5hZ2VyJ3MgY2FjaGUgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gZmx1c2hlZC4gVGhpcyBtb2RlIGxlYXZlcyB0aGUgc2hhcmVkIGNhY2hlIGluIGEgcGVyZmVjdCBzdGF0ZSBhZnRlciBjb21taXQuIEhvd2V2ZXIsIGl0IGlzIHRoZSBsZWFzdCBtZW1vcnktZWZmaWNpZW50IG1vZGU7IHRoZSBtZW1vcnkgbWlnaHQgZXZlbiBydW4gb3V0IGluIGEgdmVyeSBsYXJnZSB0cmFuc2FjdGlvbi48L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDI4IHIxYzMtdDI4Ij4KLTxwPkRyb3AgSW52YWxpZGF0ZTwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9InRibGZvcm1hbCIgLS0+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoaXMgcGFnZSBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm9qZWN0cyB1c2luZyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkdlbmVyaWM8L3NwYW4+IHBsYXRmb3JtLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDIxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NmZWVkZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDIxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkxvZ2dpbmc8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkxvZ2dpbmciIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFCR0hISSIgbmFtZT0iQ0lBQkdISEkiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkxvZ2dpbmc8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgTG9nZ2luZyBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoaXMgcGFnZSBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm9qZWN0cyB1c2luZyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkdlbmVyaWM8L3NwYW4+IHBsYXRmb3JtLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMjY1IiBuYW1lPSJzdGhyZWYyNjUiPjwvYT48YSBpZD0ic3RocmVmMjY2IiBuYW1lPSJzdGhyZWYyNjYiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPlByb3BlcnRpZXMgb2YgdGhlIExvZ2dpbmcgUGFnZTwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iUHJvcGVydGllcyBvZiB0aGUgTG9nZ2luZyBQYWdlIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBMb2dnaW5nIHBhZ2Ugb2YgdGhlIHBlcnNpc3RlbmNlLnhtbCBFZGl0b3IuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImhzaWRlcyIgcnVsZXM9Imdyb3VwcyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQzMSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDMxIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MzEiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDMxIiBoZWFkZXJzPSJyMWMxLXQzMSI+Ci08cD5Mb2dnaW5nIExldmVsPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzEgcjFjMi10MzEiPgotPHA+U3BlY2lmaWVzIHRoZSBhbW91bnQgYW5kIGRldGFpbCBvZiBsb2cgb3V0cHV0IGJ5IHNlbGVjdGluZyB0aGUgbG9nIGxldmVsIChpbiBhc2NlbmRpbmcgb3JkZXIgb2YgaW5mb3JtYXRpb24pOjwvcD4KLTxwPlRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoZSA8Y29kZT5qYXZhLnV0aWwubG9nZ2luZy5MZXZlbDwvY29kZT46PC9wPgotPHVsPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPk9GRjwvc3Bhbj4mbmRhc2g7ZGlzYWJsZXMgbG9nZ2luZzwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+U0VWRVJFPC9zcGFuPiZuZGFzaDtsb2dzIGV4Y2VwdGlvbnMgaW5kaWNhdGluZyBUb3BMaW5rIGNhbm5vdCBjb250aW51ZSwgYXMgd2VsbCBhcyBhbnkgZXhjZXB0aW9ucyBnZW5lcmF0ZWQgZHVyaW5nIGxvZ2luLiBUaGlzIGluY2x1ZGVzIGEgc3RhY2sgdHJhY2UuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5XQVJOSU5HPC9zcGFuPiZuZGFzaDtsb2dzIGV4Y2VwdGlvbnMgdGhhdCBkbyBub3QgZm9yY2UgVG9wTGluayB0byBzdG9wLCBpbmNsdWRpbmcgYWxsIGV4Y2VwdGlvbnMgbm90IGxvZ2dlZCB3aXRoIHNldmVyZSBsZXZlbC4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGEgc3RhY2sgdHJhY2UuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5JTkZPPC9zcGFuPiZuZGFzaDtsb2dzIHRoZSBsb2dpbi9sb2dvdXQgcGVyIHNldmVyIHNlc3Npb24sIGluY2x1ZGluZyB0aGUgdXNlciBuYW1lLiBBZnRlciBhY3F1aXJpbmcgdGhlIHNlc3Npb24sIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGxvZ2dlZC48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkNPTkZJRzwvc3Bhbj4mbmRhc2g7bG9ncyBvbmx5IGxvZ2luLCBKREJDIGNvbm5lY3Rpb24sIGFuZCBkYXRhYmFzZSBpbmZvcm1hdGlvbi48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkZJTkU8L3NwYW4+Jm5kYXNoO2xvZ3MgU1FMLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RklORVI8L3NwYW4+Jm5kYXNoO3NpbWlsYXIgdG8gd2FybmluZy4gSW5jbHVkZXMgc3RhY2sgdHJhY2UuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5GSU5FU1Q8L3NwYW4+Jm5kYXNoO2luY2x1ZGVzIGFkZGl0aW9uYWwgbG93IGxldmVsIGluZm9ybWF0aW9uLjwvcD4KLTwvbGk+Ci08L3VsPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkV4YW1wbGU8L3NwYW4+OiA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGU8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci0mbHQ7cHJvcGVydHkgbmFtZT0iZWNsaXBzZWxpbmsubG9nZ2luZy5sZXZlbCIgdmFsdWU9IklORk8iLyZndDsKLTwvcHJlPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDMxIHIxYzMtdDMxIj4KLTxwPkluZm88L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MzEiIGhlYWRlcnM9InIxYzEtdDMxIj4KLTxwPiZuYnNwOyZuYnNwO1RpbWVzdGFtcDwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDMxIHIxYzItdDMxIj4KLTxwPkNvbnRyb2wgd2hldGhlciB0aGUgdGltZXN0YW1wIGlzIGxvZ2dlZCBpbiBlYWNoIGxvZyBlbnRyeS48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsaWQgdmFsdWVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj50cnVlPC9zcGFuPiZuZGFzaDtsb2cgYSB0aW1lc3RhbXAuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5mYWxzZTwvc3Bhbj4mbmRhc2g7ZG8gbm90IGxvZyBhIHRpbWVzdGFtcC48L3A+Ci08L2xpPgotPC91bD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5FeGFtcGxlPC9zcGFuPjogPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlPC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0O3Byb3BlcnR5IG5hbWU9ImVjbGlwc2VsaW5rLmxvZ2dpbmcudGltZXN0YW1wIiB2YWx1ZT0iZmFsc2UiLyZndDsKLTwvcHJlPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDMxIHIxYzMtdDMxIj4KLTxwPnRydWU8L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MzEiIGhlYWRlcnM9InIxYzEtdDMxIj4KLTxwPiZuYnNwOyZuYnNwO1RocmVhZDwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDMxIHIxYzItdDMxIj4KLTxwPkNvbnRyb2wgd2hldGhlciBhIHRocmVhZCBpZGVudGlmaWVyIGlzIGxvZ2dlZCBpbiBlYWNoIGxvZyBlbnRyeS48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsaWQgdmFsdWVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj50cnVlPC9zcGFuPiZuZGFzaDtsb2cgYSB0aHJlYWQgaWRlbnRpZmllci48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPmZhbHNlPC9zcGFuPiZuZGFzaDtkbyBub3QgbG9nIGEgdGhyZWFkIGlkZW50aWZpZXIuPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQzMSByMWMzLXQzMSI+Ci08cD50cnVlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDMxIiBoZWFkZXJzPSJyMWMxLXQzMSI+Ci08cD4mbmJzcDsmbmJzcDtTZXNzaW9uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MzEgcjFjMi10MzEiPgotPHA+Q29udHJvbCB3aGV0aGVyIGFuIEVjbGlwc2VMaW5rIHNlc3Npb24gaWRlbnRpZmllciBpcyBsb2dnZWQgaW4gZWFjaCBsb2cgZW50cnkuPC9wPgotPHA+VGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbGlkIHZhbHVlczo8L3A+Ci08dWw+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+dHJ1ZTwvc3Bhbj4mbmRhc2g7bG9nIGEgRWNsaXBzZUxpbmsgc2Vzc2lvbiBpZGVudGlmaWVyLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+ZmFsc2U8L3NwYW4+Jm5kYXNoO2RvIG5vdCBsb2cgYSBFY2xpcHNlTGluayBzZXNzaW9uIGlkZW50aWZpZXIuPC9wPgotPC9saT4KLTwvdWw+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RXhhbXBsZTwvc3Bhbj46IDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZTwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLSZsdDtwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlbGluay5sb2dnaW5nLnNlc3Npb24iIHZhbHVlPSJmYWxzZSIvJmd0OwotPC9wcmU+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MzEgcjFjMy10MzEiPgotPHA+dHJ1ZTwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQzMSIgaGVhZGVycz0icjFjMS10MzEiPgotPHA+Jm5ic3A7Jm5ic3A7RXhjZXB0aW9uczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDMxIHIxYzItdDMxIj4KLTxwPkNvbnRyb2wgd2hldGhlciB0aGUgZXhjZXB0aW9ucyB0aHJvd24gZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2VMaW5rIGNvZGUgYXJlIGxvZ2dlZCBwcmlvciB0byByZXR1cm5pbmcgdGhlIGV4Y2VwdGlvbiB0byB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbi4gRW5zdXJlcyB0aGF0IGFsbCBleGNlcHRpb25zIGFyZSBsb2dnZWQgYW5kIG5vdCBtYXNrZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUuPC9wPgotPHA+VGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbGlkIHZhbHVlczo8L3A+Ci08dWw+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+dHJ1ZTwvc3Bhbj4mbmRhc2g7bG9nIGFsbCBleGNlcHRpb25zLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+ZmFsc2U8L3NwYW4+Jm5kYXNoO2RvIG5vdCBsb2cgZXhjZXB0aW9ucy48L3A+Ci08L2xpPgotPC91bD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5FeGFtcGxlPC9zcGFuPjogPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlPC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0O3Byb3BlcnR5IG5hbWU9ImVjbGlwc2VsaW5rLmxvZ2dpbmcuZXhjZXB0aW9ucyIgdmFsdWU9InRydWUiLyZndDsKLTwvcHJlPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDMxIHIxYzMtdDMxIj4KLTxwPmZhbHNlPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDMxIiBoZWFkZXJzPSJyMWMxLXQzMSI+Ci08cD5Mb2cgZmlsZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDMxIHIxYzItdDMxIj4KLTxwPlNwZWNpZnkgYSBmaWxlIGxvY2F0aW9uIGZvciB0aGUgbG9nIG91dHB1dCAoaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgb3V0KS48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RXhhbXBsZTwvc3Bhbj46IDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZTwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLSZsdDtwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlbGluay5sb2dnaW5nLmZpbGUiIHZhbHVlPSJDOlxteW91dFwiIC8mZ3Q7Ci08L3ByZT48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQzMSByMWMzLXQzMSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI4YzEtdDMxIiBoZWFkZXJzPSJyMWMxLXQzMSI+Ci08cD5Mb2dnZXI8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQzMSByMWMyLXQzMSI+Ci08cD5TZWxlY3QgdGhlIHR5cGUgb2YgbG9nZ2VyIHRvIHVzZTo8L3A+Ci08cD5UaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsaWQgdmFsdWVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5EZWZhdWx0TG9nZ2VyPC9zcGFuPiZuZGFzaDt0aGUgRWNsaXBzZUxpbmsgbmF0aXZlIGxvZ2dlciA8Y29kZT5lY2xpcHNlbGluay5sb2dnaW5nLkRlZmF1bHRTZXNzaW9uTG9nPC9jb2RlPi48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkphdmFMb2dnZXI8L3NwYW4+Jm5kYXNoO3RoZSA8Y29kZT5qYXZhLnV0aWwubG9nZ2luZzwvY29kZT4gbG9nZ2VyIDxjb2RlPmVjbGlwc2VsaW5rLmxvZ2dpbmcuSmF2YUxvZzwvY29kZT4uPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5TZXJ2ZXJMb2dnZXI8L3NwYW4+Jm5kYXNoO3RoZSA8Y29kZT5qYXZhLnV0aWwubG9nZ2luZzwvY29kZT4gbG9nZ2VyIDxjb2RlPmVjbGlwc2VsaW5rLnBsYXRmb3JtLnNlcnZlci5TZXJ2ZXJMb2c8L2NvZGU+LiBJbnRlZ3JhdGVzIHdpdGggdGhlIGFwcGxpY2F0aW9uIHNlcnZlcidzIGxvZ2dpbmcgYXMgZGVmaW5lIGluIHRoZSA8Y29kZT5lY2xpcHNlbGluay5wbGF0Zm9ybS5zZXJ2ZXIuU2VydmVyUGxhdGZvcm0uPC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5GdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZSBvZiBhIGN1c3RvbSBsb2dnZXIuIFRoZSBjdXN0b20gbG9nZ2VyIG11c3QgaW1wbGVtZW50IHRoZSA8Y29kZT5lY2xpcHNlbGluay5sb2dnaW5nLlNlc3Npb25Mb2c8L2NvZGU+IGludGVyZmFjZS48L3A+Ci08L2xpPgotPC91bD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5FeGFtcGxlPC9zcGFuPjogPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlPC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0O3Byb3BlcnR5IG5hbWU9ImVjbGlwc2VsaW5rLmxvZ2dpbmcubG9nZ2VyIiB2YWx1ZT0iYWNtZS5sb2dnZXJzLk15Q3VzdG9tTG9nZ2VyIiAvJmd0OwotPC9wcmU+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10MzEgcjFjMy10MzEiPgotPHA+RGVmYXVsdExvZ2dlcjwvcD4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9InRibGZvcm1hbCIgLS0+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MyIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyMi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDIyLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdmNGRhMS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDIyLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk9wdGlvbnM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik9wdGlvbnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFGSkNIRSIgbmFtZT0iQ0lBRkpDSEUiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPk9wdGlvbnM8L2gxPgotPHA+VGhpcyB0YWJsZSBsaXN0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgT3B0aW9ucyBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoaXMgcGFnZSBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm9qZWN0cyB1c2luZyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkdlbmVyaWM8L3NwYW4+IHBsYXRmb3JtLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMjY3IiBuYW1lPSJzdGhyZWYyNjciPjwvYT48YSBpZD0ic3RocmVmMjY4IiBuYW1lPSJzdGhyZWYyNjgiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPlByb3BlcnRpZXMgb2YgdGhlIE9wdGlvbnMgUGFnZTwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iUHJvcGVydGllcyBvZiB0aGUgT3B0aW9ucyBQYWdlIiBzdW1tYXJ5PSJQcm9wZXJ0aWVzIG9mIHRoZSBPcHRpb25zIFBhZ2UiIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iaHNpZGVzIiBydWxlcz0iZ3JvdXBzIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDMzIj5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MzMiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQzMyI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MzMiIGhlYWRlcnM9InIxYzEtdDMzIj4KLTxwPlNlc3Npb24gTmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDMzIHIxYzItdDMzIj4KLTxwPlNwZWNpZnkgdGhlIG5hbWUgYnkgd2hpY2ggdGhlIEVjbGlwc2VMaW5rIHNlc3Npb24gaXMgc3RvcmVkIGluIHRoZSBzdGF0aWMgc2Vzc2lvbiBtYW5hZ2VyLiBVc2UgdGhpcyBvcHRpb24gaWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBFY2xpcHNlTGluayBzaGFyZWQgc2Vzc2lvbiBvdXRzaWRlIG9mIHRoZSBjb250ZXh0IG9mIHRoZSBKUEEgb3IgdG8gdXNlIGEgcHJlLWV4aXN0aW5nIEVjbGlwc2VMaW5rIHNlc3Npb24gY29uZmlndXJlZCB0aHJvdWdoIGEgRWNsaXBzZUxpbmsgPGNvZGU+c2Vzc2lvbnMueG1sPC9jb2RlPiBmaWxlPC9wPgotPHA+VmFsaWQgdmFsdWVzOiBhIHZhbGlkIEVjbGlwc2VMaW5rIHNlc3Npb24gbmFtZSB0aGF0IGlzIHVuaXF1ZSBpbiBhIHNlcnZlciBkZXBsb3ltZW50LjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5FeGFtcGxlPC9zcGFuPjogPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlPC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0O3Byb3BlcnR5IG5hbWU9ImVjbGlwc2VsaW5rLnNlc3Npb24tbmFtZSIgdmFsdWU9Ik15U2Vzc2lvbiIvJmd0OwotPC9wcmU+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzMgcjFjMy10MzMiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQzMyIgaGVhZGVycz0icjFjMS10MzMiPgotPHA+U2Vzc2lvbnMgWE1MPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MzMgcjFjMi10MzMiPgotPHA+U3BlY2lmeSBwZXJzaXN0ZW5jZSBpbmZvcm1hdGlvbiBsb2FkZWQgZnJvbSB0aGUgRWNsaXBzZUxpbmsgc2Vzc2lvbiBjb25maWd1cmF0aW9uIGZpbGUgKDxjb2RlPnNlc3Npb25zLnhtbDwvY29kZT4pLjwvcD4KLTxwPllvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIGFzIGFuIGFsdGVybmF0aXZlIHRvIGFubm90YXRpb25zIGFuZCBkZXBsb3ltZW50IFhNTC4gSWYgeW91IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eSwgRWNsaXBzZUxpbmsgd2lsbCBvdmVycmlkZSBhbGwgY2xhc3MgYW5ub3RhdGlvbiBhbmQgdGhlIG9iamVjdCByZWxhdGlvbmFsIG1hcHBpbmcgZnJvbSB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiwgYXMgd2VsbCBhcyA8Y29kZT5PUk0ueG1sPC9jb2RlPiBhbmQgb3RoZXIgbWFwcGluZyBmaWxlcywgaWYgcHJlc2VudC48L3A+Ci08cD5JbmRpY2F0ZSB0aGUgc2Vzc2lvbiBieSBzZXR0aW5nIHRoZSA8Y29kZT5lY2xpcHNlbGluay5zZXNzaW9uLW5hbWU8L2NvZGU+IHByb3BlcnR5LjwvcD4KLTxwPk5vdGU6IElmIHlvdSBkbyBub3Qgc3BlY2lmeSB0aGUgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHksIDxjb2RlPnNlc3Npb25zLnhtbDwvY29kZT4gZmlsZSB3aWxsIG5vdCBiZSB1c2VkLjwvcD4KLTxwPlZhbGlkIHZhbHVlczogdGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHNlc3Npb25zIFhNTCBmaWxlLjwvcD4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5FeGFtcGxlPC9zcGFuPjogPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlPC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0O3Byb3BlcnR5IG5hbWU9InRvcGxpbmsuc2Vzc2lvbi14bWwiIHZhbHVlPSJteXNlc3Npb24ueG1sIi8mZ3Q7Ci08L3ByZT48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQzMyByMWMzLXQzMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDMzIiBoZWFkZXJzPSJyMWMxLXQzMyI+Ci08cD5UYXJnZXQgRGF0YWJhc2U8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQzMyByMWMyLXQzMyI+Ci08cD5TZWxlY3QgdGhlIHRhcmdldCBkYXRhYmFzZS4gWW91IGNhbiBhbHNvIHNldCB0aGUgdmFsdWUgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzc25hbWUgb2YgYSBzdWJjbGFzcyBvZiB0aGUgPGNvZGU+b3JnLmVjbGlwc2UucGVyc2lzdGVuY2UucGxhdGZvcm0uRGF0YWJhc2VQbGF0Zm9ybSBjbGFzczwvY29kZT4uPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkV4YW1wbGU8L3NwYW4+OiA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGU8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci0mbHQ7cHJvcGVydHkgbmFtZT0iZWNsaXBzZWxpbmsudGFyZ2V0LWRhdGFiYXNlIiB2YWx1ZT0iT3JhY2xlIi8mZ3Q7Ci08L3ByZT48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQzMyByMWMzLXQzMyI+Ci08cD5BdXRvPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDMzIiBoZWFkZXJzPSJyMWMxLXQzMyI+Ci08cD5UYXJnZXQgU2VydmVyPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MzMgcjFjMi10MzMiPgotPHA+U2VsZWN0IHRoZSB0YXJnZXQgc2VydmVyIGZvciB5b3VyIEpQQSBhcHBsaWNhdGlvbi48L3A+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RXhhbXBsZTwvc3Bhbj46IDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZTwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLSZsdDtwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlbGluay50YXJnZXQtc2VydmVyIiB2YWx1ZT0iT0M0Sl8xMF8xXzMiLyZndDsKLTwvcHJlPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDMzIHIxYzMtdDMzIj4KLTxwPk5vbmU8L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjZjMS10MzMiIGhlYWRlcnM9InIxYzEtdDMzIj4KLTxwPkV2ZW50IExpc3RlbmVyPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MzMgcjFjMi10MzMiPgotPHA+U3BlY2lmeSBhIGRlc2NyaXB0b3IgZXZlbnQgbGlzdGVuZXIgdG8gYmUgYWRkZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcuPC9wPgotPHA+VmFsaWQgdmFsdWVzOiBxdWFsaWZpZWQgY2xhc3MgbmFtZSBmb3IgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIDxjb2RlPmVjbGlwc2VsaW5rLnNlc3Npb25zLlNlc3Npb25FdmVudExpc3RlbmVyPC9jb2RlPiBpbnRlcmZhY2UuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkV4YW1wbGU8L3NwYW4+OiA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGU8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci0mbHQ7cHJvcGVydHkgbmFtZT0iZWNsaXBzZWxpbmsuc2Vzc2lvbi1ldmVudC1saXN0ZW5lciIgdmFsdWU9Im15cGFja2FnZS5NeUNsYXNzLmNsYXNzIi8mZ3Q7Ci08L3ByZT48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQzMyByMWMzLXQzMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDMzIiBoZWFkZXJzPSJyMWMxLXQzMyI+Ci08cD5JbmNsdWRlIERlc2NyaXB0b3IgUXVlcmllczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDMzIHIxYzItdDMzIj4KLTxwPkVuYWJsZSBvciBkaXNhYmxlIHRoZSBkZWZhdWx0IGNvcHlpbmcgb2YgYWxsIG5hbWVkIHF1ZXJpZXMgZnJvbSB0aGUgZGVzY3JpcHRvcnMgdG8gdGhlIHNlc3Npb24uIFRoZXNlIHF1ZXJpZXMgaW5jbHVkZSB0aGUgb25lcyBkZWZpbmVkIHVzaW5nIEVjbGlwc2VMaW5rIEFQSSwgZGVzY3JpcHRvciBhbWVuZG1lbnQgbWV0aG9kcywgYW5kIHNvIG9uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDMzIHIxYzMtdDMzIj48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjhjMS10MzMiIGhlYWRlcnM9InIxYzEtdDMzIj4KLTxwPk1pc2NlbGxhbmVvdXMgT3B0aW9uczwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDMzIHIxYzItdDMzIj48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyOGMxLXQzMyByMWMzLXQzMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI5YzEtdDMzIiBoZWFkZXJzPSJyMWMxLXQzMyI+Ci08cD4mbmJzcDsmbmJzcDtUZW1wb3JhbCBtdXRhYmxlPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjljMS10MzMgcjFjMi10MzMiPgotPHA+U3BlY2lmeSBpZiBhbGwgPGNvZGU+RGF0ZTwvY29kZT4gYW5kIDxjb2RlPkNhbGVuZGFyPC9jb2RlPiBwZXJzaXN0ZW50IGZpZWxkcyBzaG91bGQgYmUgaGFuZGxlZCBhcyBtdXRhYmxlIG9iamVjdHMuPC9wPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPkV4YW1wbGU8L3NwYW4+OiA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGU8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci0mbHQ7cHJvcGVydHkgbmFtZT0iZWNsaXBzZWxpbmsudGVtcG9yYWwubXV0YWJsZSIgdmFsdWU9InRydWUiLyZndDsKLTwvcHJlPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDMzIHIxYzMtdDMzIj4KLTxwPkZhbHNlPC9wPgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0idGJsZm9ybWFsIiAtLT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDIzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjMuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODU3N2I0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+U2NoZW1hIEdlbmVyYXRpb248L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlNjaGVtYSBHZW5lcmF0aW9uIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lBQ0NGQ0IiIG5hbWU9IkNJQUNDRkNCIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDMiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5TY2hlbWEgR2VuZXJhdGlvbjwvaDE+Ci08cD5UaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBTY2hlbWEgR2VuZXJhdGlvbiBwYWdlIG9mIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIj5wZXJzaXN0ZW5jZS54bWwgRWRpdG9yPC9hPi48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoaXMgcGFnZSBpcyBub3QgYXZhaWxhYmxlIGZvciBwcm9qZWN0cyB1c2luZyB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkdlbmVyaWM8L3NwYW4+IHBsYXRmb3JtLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPGRpdiBjbGFzcz0idGJsZm9ybWFsIj48YSBpZD0ic3RocmVmMjY5IiBuYW1lPSJzdGhyZWYyNjkiPjwvYT48YSBpZD0ic3RocmVmMjcwIiBuYW1lPSJzdGhyZWYyNzAiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWludGFibGUiPiZuYnNwOzwvcD4KLTx0YWJsZSBjbGFzcz0iRm9ybWFsIiB0aXRsZT0iIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwZXJzaXN0ZW5jZS54bWwgRWRpdG9yJnJzcXVvO3MgU2NoZW1hIEdlbmVyYXRpb24gcGFnZS4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iaHNpZGVzIiBydWxlcz0iZ3JvdXBzIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjQlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjI0JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDM1Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MzUiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQzNSI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MzUiIGhlYWRlcnM9InIxYzEtdDM1Ij4KLTxwPkRETCBHZW5lcmF0aW9uIFR5cGU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQzNSByMWMyLXQzNSI+Ci08cD5TZWxlY3QgdGhlIHR5cGUgb2YgRERMIGdlbmVyYXRpb246PC9wPgotPHVsPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPk5vbmU8L3NwYW4+IC0tIERvIG5vdCBnZW5lcmF0ZSBEREw7IG5vIHNjaGVtYSBpcyBnZW5lcmF0ZWQuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxzcGFuIGNsYXNzPSJib2xkIj5DcmVhdGUgVGFibGVzPC9zcGFuPiAtLSBDcmVhdGUgRERMIGZvciBub24tZXhpc3RlbnQgdGFibGVzOyBsZWF2ZSBleGlzdGluZyB0YWJsZXMgdW5jaGFuZ2VkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RHJvcCBhbmQgQ3JlYXRlIFRhYmxlczwvc3Bhbj4gLS0gQ3JlYXRlIERETCBmb3IgYWxsIHRhYmxlczsgZHJvcCBhbGwgZXhpc3RpbmcgdGFibGVzLjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzUgcjFjMy10MzUiPgotPHA+Tm9uZTwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQzNSIgaGVhZGVycz0icjFjMS10MzUiPgotPHA+T3V0cHV0IE1vZGU8L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQzNSByMWMyLXQzNSI+Ci08cD5TZWxlY3QgdGhlIERETCBnZW5lcmF0aW9uIHRhcmdldDo8L3A+Ci08dWw+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+Qm90aDwvc3Bhbj4gLS0gR2VuZXJhdGUgU1FMIGZpbGVzIGFuZCBleGVjdXRlIHRoZW0gb24gdGhlIGRhdGFiYXNlLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48c3BhbiBjbGFzcz0iYm9sZCI+RGF0YWJhc2U8L3NwYW4+IC0tIEV4ZWN1dGUgU1FMIG9uIHRoZSBkYXRhYmFzZSBvbmx5IChkbyBub3QgZ2VuZXJhdGUgU1FMIGZpbGVzKS48L3A+Ci08L2xpPgotPGxpPgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPlNRTCBTY3JpcHQ8L3NwYW4+IC0tIEdlbmVyYXRlIFNRTCBmaWxlcyBvbmx5IChkbyBub3QgZXhlY3V0ZSB0aGVtIG9uIHRoZSBkYXRhYmFzZSkuPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQzNSByMWMzLXQzNSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDM1IiBoZWFkZXJzPSJyMWMxLXQzNSI+Ci08cD5EREwgR2VuZXJhdGlvbiBMb2NhdGlvbjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDM1IHIxYzItdDM1Ij4KLTxwPlNwZWNpZnkgd2hlcmUgRWNsaXBzZUxpbmsgd3JpdGVzIERETCBvdXRwdXQuIFNwZWNpZnkgYSBmaWxlIHNwZWNpZmljYXRpb24gdG8gYSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IGhhdmUgd3JpdGUgYWNjZXNzLiBUaGUgZmlsZSBzcGVjaWZpY2F0aW9uIG1heSBiZSByZWxhdGl2ZSB0byB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IgYWJzb2x1dGUuIElmIGl0IGRvZXMgbm90IGVuZCBpbiBhIGZpbGUgc2VwYXJhdG9yLCB0aGVuIEVjbGlwc2VMaW5rIGFwcGVuZHMgb25lIHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQzNSByMWMzLXQzNSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDM1IiBoZWFkZXJzPSJyMWMxLXQzNSI+Ci08cD5DcmVhdGUgRERMIEZpbGUgTmFtZTwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDM1IHIxYzItdDM1Ij4KLTxwPlNwZWNpZnkgdGhlIGZpbGUgbmFtZSBvZiB0aGUgRERMIGZpbGUgdGhhdCBFY2xpcHNlTGluayBnZW5lcmF0ZXMgdGhhdCBjb250YWlucyBTUUwgc3RhdGVtZW50cyBmb3IgY3JlYXRpbmcgdGFibGVzIGZvciBKUEEgZW50aXRpZXMuIFNwZWNpZnkgYSBmaWxlIG5hbWUgdmFsaWQgZm9yIHlvdXIgb3BlcmF0aW5nIHN5c3RlbS48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQzNSByMWMzLXQzNSI+Ci08cD5jcmVhdGVEREwuamRiYzwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQzNSIgaGVhZGVycz0icjFjMS10MzUiPgotPHA+RHJvcCBEREwgRmlsZSBOYW1lPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MzUgcjFjMi10MzUiPgotPHA+U3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBEREwgZmlsZSB0aGF0IEVjbGlwc2VMaW5rIGdlbmVyYXRlcyB0aGF0IGNvbnRhaW5zIFNRTCBzdGF0ZW1lbnRzIGZvciBkcm9wcGluZyB0YWJsZXMgZm9yIEpQQSBlbnRpdGllcy48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQzNSByMWMzLXQzNSI+Ci08cD5kcm9wRERMLmpkYmM8L3A+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJ0Ymxmb3JtYWwiIC0tPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjQuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyNC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYjVmZmEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyNC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlByb3BlcnRpZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlByb3BlcnRpZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUFISkRGRiIgbmFtZT0iQ0lBSEpERkYiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MyI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPlByb3BlcnRpZXM8L2gxPgotPHA+VGhpcyBwYWdlIGVuYWJsZXMgeW91IHRvIGFkZCBvciByZW1vdmUgdGhlIHZlbmRvci1zcGVjaWZpYyA8Y29kZT4mbHQ7cHJvcGVydGllcyZndDs8L2NvZGU+IGVsZW1lbnRzIG9mIDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4uPC9wPgotPHA+VG8gYWRkIGEgcHJvcGVydHksIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+IHRoZW4gZW50ZXIgdGhlIHByb3BlcnR5IDxzcGFuIGNsYXNzPSJib2xkIj5OYW1lPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPlZhbHVlPC9zcGFuPi48L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QzIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDI1Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWYzODY5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjUuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Tb3VyY2U8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlNvdXJjZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJQUhDSkFIIiBuYW1lPSJDSUFIQ0pBSCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QzIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+U291cmNlPC9oMT4KLTxwPlVzaW5nIHRoaXMgcGFnZSwgeW91IGNhbiBtYW51YWxseSBlZGl0IHRoZSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNDSUhEQUpJRCI+Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSI8L2E+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNDSUhEQUpJRCI+TWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDMiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjYuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyNi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTQ4NTAuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyNi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlByZWZlcmVuY2VzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJQcmVmZXJlbmNlcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0RFSUVFIiBuYW1lPSJDQUNERUlFRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+UHJlZmVyZW5jZXM8L2gxPgotPHA+VGhpcyBzZWN0aW9uIGluY2x1ZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZSBwYWdlczo8L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSNCQUJKSEJDSSI+UHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgJm5kYXNoOyBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnM8L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyNy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDI3Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIxN2M4MC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDI3Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+RGlhbG9nczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRGlhbG9ncyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0dFSkRBIiBuYW1lPSJDQUNHRUpEQSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+RGlhbG9nczwvaDE+Ci08cD5UaGlzIHNlY3Rpb24gaW5jbHVkZXMgaW5mb3JtYXRpb24gb24gdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlIHBhZ2VzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyOC5odG0jQ0FDQ0dFSEMiPkVkaXQgSm9pbiBDb2x1bW5zIERpYWxvZzwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX3NlbGVjdF9jYXNjYWRlX2RpYWxvZy5odG0jQ0lBRkRHSUoiPlNlbGVjdCBDYXNjYWRlIGRpYWxvZzwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmX2VjbGlwc2VsaW5rX21hcHBpbmdfZmlsZS5odG0jQ0lBRURFSkYiPk5ldyBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGUgZGlhbG9nPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjguaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyOC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjljNzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAyOC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkVkaXQgSm9pbiBDb2x1bW5zIERpYWxvZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRWRpdCBKb2luIENvbHVtbnMgRGlhbG9nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0FDQ0dFSEMiIG5hbWU9IkNBQ0NHRUhDIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5FZGl0IEpvaW4gQ29sdW1ucyBEaWFsb2c8L2gxPgotPHA+VXNlIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+Sm9pbiBDb2x1bW5zPC9zcGFuPiBkaWFsb2cgdG8gY3JlYXRlIG9yIG1vZGlmeSB0aGUgam9pbiB0YWJsZXMgYW5kIGNvbHVtbnMgaW4gcmVsYXRpb25zaGlwIG1hcHBpbmdzLjwvcD4KLTxwPlRoaXMgdGFibGUgbGlzdHMgdGhlIHByb3BlcnRpZXMgYXZhaWxhYmxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+Sm9pbiBDb2x1bW5zPC9zcGFuPiBkaWFsb2cuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJsaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBvcHRpb25zIG9uIHRoZSBKb2luIENvbHVtbnMgZGlhbG9nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIEpvaW4gQ29sdW1ucyBkaWFsb2cuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjMyJSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQzNyI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDM3Ij5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MzciIGhlYWRlcnM9InIxYzEtdDM3Ij5OYW1lPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MzcgcjFjMi10MzciPk5hbWUgb2YgdGhlIGpvaW50IHRhYmxlIGNvbHVtbiB0aGF0IGNvbnRhaW5zIHRoZSBmb3JlaWduIGtleSBjb2x1bW4uPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDM3IiBoZWFkZXJzPSJyMWMxLXQzNyI+UmVmZXJlbmNlZCBDb2x1bW4gTmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDM3IHIxYzItdDM3Ij5OYW1lIG9mIHRoZSBkYXRhYmFzZSBjb2x1bW4gdGhhdCBjb250YWlucyB0aGUgZm9yZWlnbiBrZXkgcmVmZXJlbmNlIGZvciB0aGUgZW50aXR5IHJlbGF0aW9uc2hpcC48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCIgLS0+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmZXJlbmNlMDExLmh0bSNDQUNCQUVCQyI+Sm9pbiBUYWJsZSBJbmZvcm1hdGlvbjwvYT48YnIgLz4KLTxhIGhyZWY9InJlZmVyZW5jZTAxMi5odG0jQ0FDRkNFSkMiPkpvaW4gQ29sdW1ucyBJbmZvcm1hdGlvbjwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDI5Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjkuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGFkMWRlLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMjkuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5JY29ucyBhbmQgYnV0dG9uczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTNaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iSWNvbnMgYW5kIGJ1dHRvbnMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDQUNESENJQSIgbmFtZT0iQ0FDREhDSUEiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkljb25zIGFuZCBidXR0b25zPC9oMT4KLTxwPlRoaXMgc2VjdGlvbiBpbmNsdWRlcyBpbmZvcm1hdGlvbiBvbiBlYWNoIG9mIHRoZSBpY29ucyBhbmQgYnV0dG9ucyB1c2VkIGluIHRoZSBEYWxpIE9SIE1hcHBpbmcgVG9vbC48L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMzAuaHRtI0NBQ0dFQUNHIj5JY29uczwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDMxLmh0bSNDQUNESkNFSSI+QnV0dG9uczwvYT48L3A+Ci08L2xpPgotPC91bD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDMwLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMzAuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjYzN2IzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci9yZWZlcmVuY2UwMzAuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+SWNvbnM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjUzWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ikljb25zIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0FDR0VBQ0ciIG5hbWU9IkNBQ0dFQUNHIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5JY29uczwvaDE+Ci08cD5UaGUgZm9sbG93aW5nIGljb25zIGFyZSB1c2VkIHRocm91Z2hvdXQgdGhlIERhbGkgT1IgTWFwcGluZyBUb29sLjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgZGVzY3JpYmVzIHRoZSBpY29ucyB1c2VkIGluIHRoZSBEYWxpIHBsdWctaW4uIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGRlc2NyaWJlcyB0aGUgaWNvbnMgdXNlZCBpbiB0aGUgRGFsaSBwbHVnLWluLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyMyUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10NDAiPkljb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDQwIj5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10NDAiIGhlYWRlcnM9InIxYzEtdDQwIj48aW1nIHNyYz0iaW1nL25ld19pY29uX21hcHBlZGVudGl0eS5wbmciIGFsdD0iIiB0aXRsZT0iIiAvPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAwNS5odG0jQkFCR0JJRUUiPkVudGl0eTwvYT48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10NDAiIGhlYWRlcnM9InIxYzEtdDQwIj48aW1nIHNyYz0iaW1nL25ld19pY29uX2VtYmVkZGFibGVlbnRpdHltYXBwaW5nLnBuZyIgYWx0PSJFbWJlZGRhYmxlIGVudGl0eSBpY29uIiB0aXRsZT0iRW1iZWRkYWJsZSBlbnRpdHkgaWNvbiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQ0MCByMWMyLXQ0MCI+PGEgaHJlZj0idGFza3MwMDYuaHRtI0JBQkZFSUNFIj5FbWJlZGRhYmxlPC9hPiBlbnRpdHk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10NDAiIGhlYWRlcnM9InIxYzEtdDQwIj48aW1nIHNyYz0iaW1nL25ld19pY29uX21hcHBlZHN1cGVyY2xhc3MucG5nIiBhbHQ9Ik1hcHBlZCBzdXBlcmNsYXNzIGljb24iIHRpdGxlPSJNYXBwZWQgc3VwZXJjbGFzcyBpY29uIiAvPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAwNy5odG0jQkFCREFHQ0kiPk1hcHBlZCBzdXBlcmNsYXNzPC9hPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25fYmFzaWNtYXBwaW5ncy5wbmciIGFsdD0iQmFzaWMgbWFwcGluZyBpY29uIiB0aXRsZT0iQmFzaWMgbWFwcGluZyBpY29uIiAvPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAwOS5odG0jQkFCQkFCQ0UiPkJhc2ljIG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDQwIiBoZWFkZXJzPSJyMWMxLXQ0MCI+PGltZyBzcmM9ImltZy9pY29uX2Jhc2ljbWFwbWFwcGluZ3MucG5nIiBhbHQ9IkJhc2ljIG1hcHBpbmcgaWNvbiIgdGl0bGU9IkJhc2ljIG1hcHBpbmcgaWNvbiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQ0MCByMWMyLXQ0MCI+QmFzaWMgY29sbGVjdGlvbiBtYXBwaW5nPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDQwIiBoZWFkZXJzPSJyMWMxLXQ0MCI+PGltZyBzcmM9ImltZy9pY29uX2Jhc2ljbWFwbWFwcGluZ3MucG5nIiBhbHQ9IkJhc2ljIG1hcHBpbmcgaWNvbiIgdGl0bGU9IkJhc2ljIG1hcHBpbmcgaWNvbiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQ0MCByMWMyLXQ0MCI+QmFzaWMgbWFwIG1hcHBpbmc8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjhjMS10NDAiIGhlYWRlcnM9InIxYzEtdDQwIj48aW1nIHNyYz0iaW1nL25ld19pY29uX2VtYmVkZGVkaWRtYXBwaW5nLnBuZyIgYWx0PSJFbWJlZGRlZCBtYXBwaW5nIGljb24iIHRpdGxlPSJFbWJlZGRlZCBtYXBwaW5nIGljb24iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjhjMS10NDAgcjFjMi10NDAiPjxhIGhyZWY9InRhc2tzMDEwLmh0bSNCQUJDQkhERiI+RW1iZWRkZWQgbWFwcGluZzwvYT48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjljMS10NDAiIGhlYWRlcnM9InIxYzEtdDQwIj48aW1nIHNyYz0iaW1nL25ld19pY29uX2VtYmVkZGVkbWFwcGluZy5wbmciIGFsdD0iRW1iZWRkZWQgSUQgbWFwcGluZyBpY29uIiB0aXRsZT0iRW1iZWRkZWQgSUQgbWFwcGluZyBpY29uIiAvPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI5YzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAxMS5odG0jQ0lIRElBRUUiPkVtYmVkZGVkIElEIG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMGMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25faWRtYXBwaW5nLnBuZyIgYWx0PSJJRCBtYXBwaW5nIGljb24iIHRpdGxlPSJJRCBtYXBwaW5nIGljb24iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEwYzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAxMi5odG0jQkFCR0NCSEciPklEIG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxMWMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25fbWFueXRvbWFueW1hcHBpbmcucG5nIiBhbHQ9Ik1hbnktdG8tbWFueSBtYXBwaW5nIGljb24iIHRpdGxlPSJNYW55LXRvLW1hbnkgbWFwcGluZyBpY29uIiAvPjxiciAvPjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIxMWMxLXQ0MCByMWMyLXQ0MCI+PGEgaHJlZj0idGFza3MwMTMuaHRtI0JBQkVJRUdEIj5NYW55LXRvLW1hbnkgbWFwcGluZzwvYT48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEyYzEtdDQwIiBoZWFkZXJzPSJyMWMxLXQ0MCI+PGltZyBzcmM9ImltZy9uZXdfaWNvbl9tYW55dG9vbmVtYXBwaW5nLnBuZyIgYWx0PSJNYW55LXRvLW9uZSBtYXBwaW5nIGljb24uIiB0aXRsZT0iTWFueS10by1vbmUgbWFwcGluZyBpY29uLiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTJjMS10NDAgcjFjMi10NDAiPjxhIGhyZWY9InRhc2tzMDE0Lmh0bSNCQUJIRkFGSiI+TWFueS10by1vbmUgbWFwcGluZzwvYT48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjEzYzEtdDQwIiBoZWFkZXJzPSJyMWMxLXQ0MCI+PGltZyBzcmM9ImltZy9uZXdfaWNvbl9vbmV0b21hbnltYXBwaW5nLnBuZyIgYWx0PSJPbmUtdG8tbWFueSBtYXBwaW5nIGljb24iIHRpdGxlPSJPbmUtdG8tbWFueSBtYXBwaW5nIGljb24iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjEzYzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAxNS5odG0jQkFCSEdFQkQiPk9uZS10by1tYW55IG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxNGMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25fb25ldG9vbmVtYXBwaW5nLnBuZyIgYWx0PSJPbmUtdG8tb25lIG1hcHBpbmcgaWNvbi4iIHRpdGxlPSJPbmUtdG8tb25lIG1hcHBpbmcgaWNvbi4iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE0YzEtdDQwIHIxYzItdDQwIj48YSBocmVmPSJ0YXNrczAxNi5odG0jQkFCRkhCQ0oiPk9uZS10by1vbmUgbWFwcGluZzwvYT48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjE1YzEtdDQwIiBoZWFkZXJzPSJyMWMxLXQ0MCI+PGltZyBzcmM9ImltZy9pY29uX2Jhc2ljbWFwbWFwcGluZ3MucG5nIiBhbHQ9IkJhc2ljIG1hcHBpbmcgaWNvbiIgdGl0bGU9IkJhc2ljIG1hcHBpbmcgaWNvbiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTVjMS10NDAgcjFjMi10NDAiPlRyYW5zZm9ybWF0aW9uIG1hcHBpbmdzPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxNmMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25fdHJhbnNpZW50bWFwcGluZy5wbmciIGFsdD0iVHJhbnNpZW50IG1hcHBpbmcgaWNvbi4iIHRpdGxlPSJUcmFuc2llbnQgbWFwcGluZyBpY29uLiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMTZjMS10NDAgcjFjMi10NDAiPjxhIGhyZWY9InRhc2tzMDE3Lmh0bSNCQUJIRkhFSSI+VHJhbnNpZW50IG1hcHBpbmc8L2E+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxN2MxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvaWNvbl9iYXNpY21hcG1hcHBpbmdzLnBuZyIgYWx0PSJCYXNpYyBtYXBwaW5nIGljb24iIHRpdGxlPSJCYXNpYyBtYXBwaW5nIGljb24iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjE3YzEtdDQwIHIxYzItdDQwIj5WYXJpYWJsZSBvbmUtdG8tb25lIG1hcHBpbmdzPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIxOGMxLXQ0MCIgaGVhZGVycz0icjFjMS10NDAiPjxpbWcgc3JjPSJpbWcvbmV3X2ljb25fdmVyc2lvbm1hcHBpbmcucG5nIiBhbHQ9IlZlcnNpb24gbWFwcGluZyBpY29uLiIgdGl0bGU9IlZlcnNpb24gbWFwcGluZyBpY29uLiIgLz48YnIgLz48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMThjMS10NDAgcjFjMi10NDAiPjxhIGhyZWY9InRhc2tzMDE4Lmh0bSNCQUJISUJJSSI+VmVyc2lvbiBtYXBwaW5nPC9hPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDI5Lmh0bSNDQUNESENJQSI+SWNvbnMgYW5kIGJ1dHRvbnM8L2E+PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAzMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDMxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU1ZmFhOC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDMxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+QnV0dG9uczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQnV0dG9ucyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0RKQ0VJIiBuYW1lPSJDQUNESkNFSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+QnV0dG9uczwvaDE+Ci08cD5UaGUgZm9sbG93aW5nIGJ1dHRvbnMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgRGFsaSBPUiBNYXBwaW5nIFRvb2wuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIGJ1dHRvbnMgdXNlZCBpbiB0aGUgRGFsaSBwbHVnLWluLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIGJ1dHRvbnMgdXNlZCBpbiB0aGUgRGFsaSBwbHVnLWluLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNyUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10NDEiPkljb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDQxIj5EZXNjcmlwdGlvbjwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10NDEiIGhlYWRlcnM9InIxYzEtdDQxIj48aW1nIHNyYz0iaW1nL25ld19qcGFfcGVyc3BlY3RpdmVfYnV0dG9uLnBuZyIgYWx0PSJUaGUgSlBBIFBlcnNwZWN0aXZlIGljb24iIHRpdGxlPSJUaGUgSlBBIFBlcnNwZWN0aXZlIGljb24iIC8+PGJyIC8+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10NDEgcjFjMi10NDEiPkpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDI5Lmh0bSNDQUNESENJQSI+SWNvbnMgYW5kIGJ1dHRvbnM8L2E+PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3JlZmVyZW5jZTAzMi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDMyLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5YTczZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvcmVmZXJlbmNlMDMyLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+RGFsaSBEZXZlbG9wZXIgRG9jdW1lbnRhdGlvbjwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRGFsaSBEZXZlbG9wZXIgRG9jdW1lbnRhdGlvbiIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNBQ0JCRElCIiBuYW1lPSJDQUNCQkRJQiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+RGFsaSBEZXZlbG9wZXIgRG9jdW1lbnRhdGlvbjwvaDE+Ci08cD48YSBpZD0ic3RocmVmMjgyIiBuYW1lPSJzdGhyZWYyODIiPjwvYT48YSBpZD0ic3RocmVmMjgzIiBuYW1lPSJzdGhyZWYyODMiPjwvYT48YSBpZD0ic3RocmVmMjg0IiBuYW1lPSJzdGhyZWYyODQiPjwvYT5BZGRpdGlvbmFsIERhbGkgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgb25saW5lIGF0OjwvcD4KLTxwPjxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL2luZGV4LnBocC9EYWxpX0RldmVsb3Blcl9Eb2N1bWVudGF0aW9uIj5odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHAvRGFsaV9EZXZlbG9wZXJfRG9jdW1lbnRhdGlvbjwvYT48L2NvZGU+PC9wPgotPHA+VGhpcyBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dDo8L3A+Ci08dWw+Ci08bGk+Ci08cD5EYWxpIGFyY2hpdGVjdHVyZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5QbHVnaW5zIHRoYXQgY29tcHJpc2UgdGhlIERhbGkgSlBBIEVjbGlwc2UgZmVhdHVyZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5FeHRlbnNpb24gcG9pbnRzPC9wPgotPC9saT4KLTwvdWw+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19hZGRfcGVyc2lzdGVuY2UuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlODZjZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19hZGRfcGVyc2lzdGVuY2UuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5BZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJISUNBSSIgbmFtZT0iQkFCSElDQUkiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+Ci08aDE+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjY2IiBuYW1lPSJzdGhyZWY2NiI+PC9hPjxhIGlkPSJzdGhyZWY2NyIgbmFtZT0ic3RocmVmNjciPjwvYT48YSBpZD0ic3RocmVmNjgiIG5hbWU9InN0aHJlZjY4Ij48L2E+WW91IGNhbiBtYWtlIGEgSmF2YSBjbGFzcyBpbnRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBlcnNpc3RlbnQgdHlwZXM6PC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDA2Lmh0bSNCQUJGRUlDRSI+RW1iZWRkYWJsZTwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMDcuaHRtI0JBQkRBR0NJIj5NYXBwZWQgc3VwZXJjbGFzczwvYT48L3A+Ci08L2xpPgotPC91bD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2tzIiB0aXRsZT0iUmVsYXRlZCB0YXNrcyIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19hZGRpdG9uYWxfdGFibGVzLmh0bSNDSUhHQklFSSI+U3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlczwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI0NJSENDQ0pEIj5TcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZTwvYT48YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdF9wZXJzaXN0ZW5jZS5odG0jQkFCQ0FISUMiPlVuZGVyc3RhbmRpbmcgSmF2YSBwZXJzaXN0ZW5jZTwvYT48YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAzLmh0bSNDSERCSUpBQyI+VGhlIG9ybS54bWwgZmlsZTwvYT48YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAyLmh0bSNDSERIQUdJSCI+VGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC9hPiA8IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfYWRkaXRvbmFsX3RhYmxlcy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19hZGRpdG9uYWxfdGFibGVzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1NWJhMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19hZGRpdG9uYWxfdGFibGVzLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+U3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDVaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iU3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJSEdCSUVJIiBuYW1lPSJDSUhHQklFSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+U3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlczwvaDE+Ci08cD5BZGQgYSBzZWNvbmRhcnkgdGFibGUgYW5ub3RhdGlvbiB0byBhbiBlbnRpdHkgaWYgaXRzIGRhdGEgaXMgc3BsaXQgYWNyb3NzIG1vcmUgdGhhbiBvbmUgdGFibGUuPC9wPgotPHA+VG8gYWRkIGEgc2Vjb25kYXJ5IHRhYmxlIHRvIHRoZSBlbnRpdHksPC9wPgotPG9sPgotPGxpPgotPHA+U2VsZWN0IHRoZSBlbnRpdHkgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Qcm9qZWN0IEV4cGxvcmVyPC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+SW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldywgc2VsZWN0IHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC1hY3Rpb24iPlNlY29uZGFyeSBUYWJsZXM8L3NwYW4+IGluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjkxIiBuYW1lPSJzdGhyZWY5MSI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlNwZWNpZnlpbmcgU2Vjb25kYXJ5IFRhYmxlczwvcD4KLTxpbWcgc3JjPSJpbWcvc2Vjb25kYXJ5X3RhYmxlcy5wbmciIGFsdD0iU2Vjb25kYXJ5IFRhYmxlcyBhcmVhIG9uIHRoZSBKUEEgRGV0YWlscyB2aWV3LiIgdGl0bGU9IlNlY29uZGFyeSBUYWJsZXMgYXJlYSBvbiB0aGUgSlBBIERldGFpbHMgdmlldy4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkPC9zcGFuPiB0byBhc3NvY2lhdGUgYW4gYWRkaXRpb25hbCB0YWJsZSB3aXRoIHRoZSBlbnRpdHkuIFRoZSBFZGl0IFNlY29uZGFyeSBUYWJsZSBkaWFsb2cgYXBwZWFyczwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5OYW1lPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImJvbGQiPkNhdGFsb2c8L3NwYW4+LCBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPlNjaGVtYTwvc3Bhbj4gb2YgdGhlIGFkZGl0aW9uYWwgdGFibGUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGVudGl0eS48L3A+Ci08L2xpPgotPC9vbD4KLTxwPkVjbGlwc2UgYWRkcyB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zIHRoZSBlbnRpdHk6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQFNlY29uZGFyeVRhYmxlKG5hbWU9Ik5BTUUiLCBjYXRhbG9nID0gIkNBVEFMT0ciLCBzY2hlbWEgPSAiU0NIRU1BIikKLQotPC9wcmU+Ci08cD5UbyBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcmltYXJ5IGtleTo8L3A+Ci08b2w+Ci08bGk+Ci08cD5FbmFibGUgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5PdmVyd3JpdGUgZGVmYXVsdDwvc3Bhbj4gb3B0aW9uLCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+IHRvIHNwZWNpZnkgYSBuZXcgcHJpbWFyeSBrZXkgam9pbiBjb2x1bW4uIFRoZSBDcmVhdGUgTmV3IFByaW1hcnkgS2V5IEpvaW4gQ29sdW1uIGFwcGVhcnMuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPk5hbWU8L3NwYW4+LCA8c3BhbiBjbGFzcz0iYm9sZCI+UmVmZXJlbmNlZCBjb2x1bW4gbmFtZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJib2xkIj5UYWJsZTwvc3Bhbj4sIGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+Q29sdW1uIGRlZmluaXRpb248L3NwYW4+IG9mIHRoZSBwcmltYXJ5IGtleSBmb3IgdGhlIGVudGl0eS48L3A+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9ucyB0aGUgZW50aXR5OjwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLUBTZWNvbmRhcnlUYWJsZShuYW1lPSJOQU1FIiwgY2F0YWxvZyA9ICJDQVRBTE9HIiwgc2NoZW1hID0gIlNDSEVNQSIsIHBrSm9pbkNvbHVtbnMgPSB7QFByaW1hcnlLZXlKb2luQ29sdW1uKG5hbWU9ImlkIiwgcmVmZXJlbmNlZENvbHVtbk5hbWUgPSAiaWQiKSxAUHJpbWFyeUtleUpvaW5Db2x1bW4obmFtZT0iTkFNRSIsIHJlZmVyZW5jZWRDb2x1bW5OYW1lID0gIlJFRkVSRU5DRUQgQ09MVU1OIE5BTUUiLCBjb2x1bW5EZWZpbml0aW9uID0gIkNPTFVNTiBERUZJTklUSU9OIil9KQotCi08L3ByZT48L2xpPgotPC9vbD4KLTxiciAvPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtI0JBQkhJQ0FJIj5BZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzczwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtI0JBQkNBSElDIj5VbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2U8L2E+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfY3JlYXRlX2pwYV9lbnRpdHkuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfY3JlYXRlX2pwYV9lbnRpdHkuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDQ4YzRmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNyZWF0aW5nIGEgSlBBIEVudGl0eTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBKUEEgRW50aXR5IiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCRkJKQkciIG5hbWU9IkJBQkZCSkJHIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT48YSBpZD0ic3RocmVmNDAiIG5hbWU9InN0aHJlZjQwIj48L2E+Q3JlYXRpbmcgYSBKUEEgRW50aXR5PC9oMT4KLTxwPlVzZSB0aGlzIHByb2NlZHVyZSB0byBjcmVhdGUgYSBKUEEgZW50aXR5OjwvcD4KLTxvbD4KLTxsaT4KLTxwPkZyb20gdGhlIE5hdmlnYXRvciBvciBQcm9qZWN0IEV4cGxvcmVyLCBzZWxlY3QgdGhlIEpQQSBwcm9qZWN0IGFuZCB0aGVuIDxzcGFuIGNsYXNzPSJib2xkIj5GaWxlICZndDsgTmV3ICZndDsgT3RoZXI8L3NwYW4+LiBUaGUgU2VsZWN0IGEgV2l6YXJkIGRpYWxvZyBhcHBlYXJzLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjQxIiBuYW1lPSJzdGhyZWY0MSI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlNlbGVjdGluZyB0aGUgQ3JlYXRlIGEgSlBBIEVudGl0eSBXaXphcmQ8L3A+Ci08aW1nIHNyYz0iaW1nL3NlbGVjdF9hX3dpemFyZF9lbnRpdHkucG5nIiBhbHQ9IlRoZSBTZWxlY3QgYSBXaXphcmQgZGlhbG9nIHdpdGggRW50aXR5IHNlbGVjdGVkLiIgdGl0bGU9IlRoZSBTZWxlY3QgYSBXaXphcmQgZGlhbG9nIHdpdGggRW50aXR5IHNlbGVjdGVkLiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+PC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+SlBBICZndDsgRW50aXR5PC9zcGFuPiBhbmQgdGhlbiBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSNDSUFGRUlHRiI+RW50aXR5IENsYXNzIHBhZ2U8L2E+IGFwcGVhcnMuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmNDIiIG5hbWU9InN0aHJlZjQyIj48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+PGEgaWQ9InN0aHJlZjQzIiBuYW1lPSJzdGhyZWY0MyI+PC9hPlRoZSBFbnRpdHkgQ2xhc3MgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLnBuZyIgYWx0PSJUaGUgRW50aXR5IENsYXNzIHBhZ2Ugb2YgdGhlIENyZWF0ZSBhIEpQQSBFbnRpdHkgd2l6YXJkLiIgdGl0bGU9IlRoZSBFbnRpdHkgQ2xhc3MgcGFnZSBvZiB0aGUgQ3JlYXRlIGEgSlBBIEVudGl0eSB3aXphcmQuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT4KLTxwPkNvbXBsZXRlIHRoaXMgcGFnZSBhcyBmb2xsb3dzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgSlBBIHByb2plY3QgaW4gdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5Qcm9qZWN0PC9zcGFuPiBmaWVsZC48L3A+Ci08L2xpPgotPGxpPgotPHA+SW4gdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5Tb3VyY2UgRm9sZGVyPC9zcGFuPiBmaWVsZCwgc2VsZWN0LCBvciBlbnRlciwgdGhlIGxvY2F0aW9uIG9mIHRoZSBKUEEgcHJvamVjdCdzIDxjb2RlPnNyYzwvY29kZT4gZm9sZGVyLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QsIG9yIGVudGVyLCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgcGFja2FnZSBmb3IgdGhpcyBlbnRpdHkgaW4gdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5KYXZhIFBhY2thZ2U8L3NwYW4+IGZpZWxkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5FbnRlciB0aGUgbmFtZSBvZiB0aGUgSmF2YSBjbGFzcyBpbiB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkNsYXNzIG5hbWU8L3NwYW4+IGZpZWxkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JZiBuZWVkZWQsIGVudGVyLCBvciBzZWxlY3QgYSBzdXBlcmNsYXNzLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JZiBuZWVkZWQsIGNvbXBsZXRlIHRoZSBJbmhlcml0YW5jZSBzZWN0aW9uIGFzIGZvbGxvd3MgKHRoZXNlIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsKTo8L3A+Ci08dWw+Ci08bGk+Ci08cD5BY2NlcHQgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5FbnRpdHk8L3NwYW4+IG9wdGlvbiAodGhlIGRlZmF1bHQpIHRvIGNyZWF0ZSBhIEphdmEgY2xhc3Mgd2l0aCB0aGUgPGNvZGU+QEVudGl0eTwvY29kZT4gb3B0aW9uLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5BbHRlcm5hdGl2ZWx5LCBzZWxlY3QgPGEgaHJlZj0idGFza3MwMDcuaHRtI0JBQkRBR0NJIj5NYXBwZWQgc3VwZXJjbGFzczwvYT4gKGlmIHlvdSBkZWZpbmVkIGEgc3VwZXIgY2xhc3MpLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkluaGVyaXRhbmNlPC9zcGFuPiBhbmQgdGhlbiBzZWxlY3Qgb25lIG9mIHRoZSBKU1IgMjIwIGluaGVyaXRhbmNlIG1hcHBpbmcgc3RyYXRlZ2llcyAoU0lOR0xFX1RBQkxFLCBUQUJMRV9QRVJfQ0xBU1MsIEpPSU5FRCkuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+QWRkIHRvIGVudGl0eSBtYXBwaW5ncyBpbiBYTUw8L3NwYW4+IHRvIGNyZWF0ZSBYTUwgbWFwcGluZ3MgaW4gPGNvZGU+b3JtLnhtbDwvY29kZT4sIHJhdGhlciB0aGFuIGFubm90YXRpb25zLjwvcD4KLTwvbGk+Ci08L3VsPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk5leHQ8L3NwYW4+IHRvIHByb2NlZWQgdG8gdGhlIDxhIGhyZWY9InJlZl9FbnRpdHlQcm9wZXJ0aWVzUGFnZS5odG0jQ0lBREVDSUEiPkVudGl0eSBQcm9wZXJ0aWVzIHBhZ2U8L2E+IHdoZXJlIHlvdSBkZWZpbmUgdGhlIHBlcnNpc3RlbnQgZmllbGRzIGZvciB0aGUgZW50aXR5LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjQ0IiBuYW1lPSJzdGhyZWY0NCI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPjxhIGlkPSJzdGhyZWY0NSIgbmFtZT0ic3RocmVmNDUiPjwvYT5UaGUgRW50aXR5IFByb3BlcnRpZXMgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvY3JlYXRlX2pwYV9maWVsZHMucG5nIiBhbHQ9IlRoZSBFbnRpdHkgUHJvcGVydGllcyBwYWdlIG9mIHRoZSBDcmVhdGUgSlBBIEVudGl0eSB3aXphcmQuIiB0aXRsZT0iVGhlIEVudGl0eSBQcm9wZXJ0aWVzIHBhZ2Ugb2YgdGhlIENyZWF0ZSBKUEEgRW50aXR5IHdpemFyZC4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPgotPHA+QWx0ZXJuYXRpdmVseSwgY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkZpbmlzaDwvc3Bhbj4gdG8gY29tcGxldGUgdGhlIGVudGl0eS48L3A+Ci08L2xpPgotPGxpPgotPHA+Q29tcGxldGUgdGhlIHBhZ2UgYXMgZm9sbG93czo8L3A+Ci08b2w+Ci08bGk+Ci08cD5JZiBuZWVkZWQsIGVudGVyIGEgbmV3IG5hbWUgZm9yIHRoZSBlbnRpdHkuIERvaW5nIHNvIHJlc3VsdHMgaW4gYWRkaW5nIGEgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlIHRvIHRoZSA8Y29kZT5ARW50aXR5PC9jb2RlPiBub3RhdGlvbiAoPGNvZGU+QEVudGl0eShuYW1lPSJFbnRpdHlOYW1lIik8L2NvZGU+KS48L3A+Ci08L2xpPgotPGxpPgotPHA+QWNjZXB0IDxzcGFuIGNsYXNzPSJib2xkIj5Vc2UgZGVmYXVsdDwvc3Bhbj4gKHRoZSBkZWZhdWx0IHNldHRpbmcpIHRvIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG5hbWUgb2YgdGhlIG1hcHBlZCB0YWJsZS4gRW50ZXJpbmcgYSBkaWZmZXJlbnQgbmFtZSByZXN1bHRzIGluIGFkZGluZyB0aGUgPGNvZGU+QFRhYmxlPC9jb2RlPiBub3RhdGlvbiB3aXRoIGl0cyA8Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUgZGVmaW5lZCBhcyB0aGUgbmV3IHRhYmxlICg8Y29kZT5AVGFibGUobmFtZT0iVGFibGVOYW1lIik8L2NvZGU+KS48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoZSBFbnRpdHkgTmFtZS1yZWxhdGVkIG9wdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaWYgeW91IHNlbGVjdGVkIDxhIGhyZWY9InRhc2tzMDA3Lmh0bSNCQUJEQUdDSSI+TWFwcGVkIHN1cGVyY2xhc3M8L2E+IG9uIHRoZSA8YSBocmVmPSJyZWZfRW50aXR5Q2xhc3NQYWdlLmh0bSNDSUFGRUlHRiI+RW50aXR5IENsYXNzIHBhZ2U8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJsbm90ZSIgLS0+PC9kaXY+Ci08L2xpPgotPGxpPgotPHA+QWRkIHBlcnNpc3RlbmNlIGZpZWxkcyB0byB0aGUgZW50aXR5IGJ5IGNsaWNraW5nIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+LiBUaGUgRW50aXR5IEZpZWxkcyBkaWFsb2cgYXBwZWFycy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWY0NiIgbmFtZT0ic3RocmVmNDYiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5UaGUgRW50aXR5IEZpZWxkcyBEaWFsb2c8L3A+Ci08aW1nIHNyYz0iaW1nL2pwYV93aXphcmRfY3JlYXRlX2ZpZWxkcy5wbmciIGFsdD0iVGhlIEVudGl0eSBGaWVsZHMgZGlhbG9nLiIgdGl0bGU9IlRoZSBFbnRpdHkgRmllbGRzIGRpYWxvZy4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgYSBwZXJzaXN0ZW5jZSB0eXBlIGZyb20gdGhlIFR5cGUgbGlzdC4gWW91IGNhbiByZXRyaWV2ZSBhZGRpdGlvbmFsIHR5cGVzIHVzaW5nIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+QnJvd3NlPC9zcGFuPiBmdW5jdGlvbi48L3A+Ci08L2xpPgotPGxpPgotPHA+RW50ZXIgdGhlIGZpZWxkIG5hbWUgYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk9LPC9zcGFuPi4gUmVwZWF0IHRoaXMgcHJvY2VkdXJlIGZvciBlYWNoIGZpZWxkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JZiBuZWVkZWQsIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+S2V5PC9zcGFuPiB0byBkZXNpZ25hdGUgdGhlIGZpZWxkIGFzIGEgcHJpbWFyeSBrZXkuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCBlaXRoZXIgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5GaWVsZC1iYXNlZDwvc3Bhbj4gYWNjZXNzIHR5cGUgKHRoZSBkZWZhdWx0KSBvciA8c3BhbiBjbGFzcz0iYm9sZCI+UHJvcGVydHktYmFzZWQ8L3NwYW4+IGFjY2VzcyB0eXBlLjwvcD4KLTwvbGk+Ci08L29sPgotPC9saT4KLTxsaT4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5GaW5pc2g8L3NwYW4+LiBFY2xpcHNlIGFkZHMgdGhlIGVudGl0eSB0byB5b3VyIHByb2plY3QuPC9wPgotPC9saT4KLTwvb2w+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX2NyZWF0ZV9qcGFfZW50aXR5X3dpemFyZC5odG0jQ0lBR0dHREYiPkNyZWF0ZSBKUEEgRW50aXR5IHdpemFyZDwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSNDQUNCSkdCRyI+Q3JlYXRlIE5ldyBKUEEgUHJvamVjdCB3aXphcmQ8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcGVyc3BlY3RpdmUuaHRtI0JBQklGQkRCIj5KUEEgRGV2ZWxvcG1lbnQgcGVyc3BlY3RpdmU8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrcyIgdGl0bGU9IlJlbGF0ZWQgdGFza3MiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNDSUhEQUpJRCI+TWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC9hPjxiciAvPgotPGEgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtI0JBQkhJQ0FJIj5BZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzczwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtI0JBQkNBSElDIj5VbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2U8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMi5odG0jQ0hESEFHSUgiPlRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZTwvYT48YnIgLz4KLTxwPiZuYnNwOzwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVhYTVmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5DcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDJaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQ3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3QiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUhIRUpDSiIgbmFtZT0iQ0lISEVKQ0oiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYyNiIgbmFtZT0ic3RocmVmMjYiPjwvYT48YSBpZD0ic3RocmVmMjciIG5hbWU9InN0aHJlZjI3Ij48L2E+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIGNyZWF0ZSBhIG5ldyBKUEEgcHJvamVjdC48L3A+Ci08b2w+Ci08bGk+Ci08cD5Gcm9tIHRoZSBOYXZpZ2F0b3Igb3IgUHJvamVjdCBFeHBsb3Jlciwgc2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5GaWxlICZndDsgTmV3ICZndDsgUHJvamVjdDwvc3Bhbj4uIFRoZSBTZWxlY3QgYSB3aXphcmQgZGlhbG9nIGFwcGVhcnMuPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGVhbHNvIj48YnIgLz4KLTx0YWJsZSBjbGFzcz0iTm90ZUFsc28gb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5UaXA6PC9wPgotWW91IGNhbiBhbHNvIHNlbGVjdCB0aGUgSlBBIHBlcnNwZWN0aXZlIGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+RmlsZSAmZ3Q7IE5ldyAmZ3Q7IEpQQSBQcm9qZWN0PC9zcGFuPi48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyIgLS0+PC9kaXY+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYyOCIgbmFtZT0ic3RocmVmMjgiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj48YSBpZD0ic3RocmVmMjkiIG5hbWU9InN0aHJlZjI5Ij48L2E+U2VsZWN0aW5nIHRoZSBDcmVhdGUgYSBKUEEgUHJvamVjdCB3aXphcmQ8L3A+Ci08aW1nIHNyYz0iaW1nL3NlbGVjdF9hX3dpemFyZF9qcGFfcHJvamVjdC5wbmciIGFsdD0iVGhlIFNlbGVjdCBhIFdpemFyZCBkaWFsb2cgd2l0aCBKUEEgcHJvamVjdCBzZWxlY3RlZC4iIHRpdGxlPSJUaGUgU2VsZWN0IGEgV2l6YXJkIGRpYWxvZyB3aXRoIEpQQSBwcm9qZWN0IHNlbGVjdGVkLiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+PC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+SlBBIFByb2plY3Q8L3NwYW4+IGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi4gVGhlIDxhIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3QuaHRtI0NBQ0JKQUdDIj5OZXcgSlBBIFByb2plY3QgcGFnZTwvYT4gYXBwZWFycy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYzMCIgbmFtZT0ic3RocmVmMzAiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj48YSBpZD0ic3RocmVmMzEiIG5hbWU9InN0aHJlZjMxIj48L2E+VGhlIEpQQSBQcm9qZWN0IFBhZ2U8L3A+Ci08aW1nIHNyYz0iaW1nL25ld19qcGFfcHJvamVjdF90YXNrLnBuZyIgYWx0PSJUaGUgSlBBIFByb2plY3QgcGFnZSBvZiB0aGUgQ3JlYXRlIGEgSlBBIFByb2plY3Qgd2l6YXJkLiIgdGl0bGU9IlRoZSBKUEEgUHJvamVjdCBwYWdlIG9mIHRoZSBDcmVhdGUgYSBKUEEgUHJvamVjdCB3aXphcmQuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+Q29tcGxldGUgdGhlIGZpZWxkcyBvbiB0aGUgPGEgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdC5odG0jQ0FDQkpBR0MiPk5ldyBKUEEgUHJvamVjdCBwYWdlPC9hPiB0byBzcGVjaWZ5IHRoZSBwcm9qZWN0IG5hbWUgYW5kIGxvY2F0aW9uLCB0YXJnZXQgcnVudGltZSwgYW5kIHByZS1kZWZpbmVkIGNvbmZpZ3VyYXRpb24uPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1UaGUgVGFyZ2V0IFJ1bnRpbWUgaXMgbm90IHJlcXVpcmVkIGZvciBKYXZhIFNFIGRldmVsb3BtZW50LjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPC9saT4KLTxsaT4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi4gVGhlIEphdmEgc291cmNlIHBhZ2UgYXBwZWFycy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYzMiIgbmFtZT0ic3RocmVmMzIiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5UaGUgSmF2YSBTb3VyY2UgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvamF2YV9lZGl0b3JfYWRkcmVzcy5wbmciIGFsdD0iVGhlIEpQQSBGYWNldCBwYWdlIG9mIHRoZSBDcmVhdGUgYSBKUEEgUHJvamVjdCB3aXphcmQuIiB0aXRsZT0iVGhlIEpQQSBGYWNldCBwYWdlIG9mIHRoZSBDcmVhdGUgYSBKUEEgUHJvamVjdCB3aXphcmQuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCBGb2xkZXI8L3NwYW4+IHRvIGFkZCBleGlzdGluZyBKYXZhIHNvdXJjZSBmaWxlcyB0byB0aGUgcHJvamVjdC48L3A+Ci08L2xpPgotPGxpPgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk5leHQ8L3NwYW4+LiA8YSBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNDQUNJRkRJRiI+SlBBIEZhY2V0IHBhZ2U8L2E+IGFwcGVhcnMuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMzMiIG5hbWU9InN0aHJlZjMzIj48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+PGEgaWQ9InN0aHJlZjM0IiBuYW1lPSJzdGhyZWYzNCI+PC9hPlRoZSBKUEEgRmFjZXQgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvbmV3X2pwYV9mYWNldF90YXNrLnBuZyIgYWx0PSJUaGUgSlBBIEZhY2V0IHBhZ2Ugb2YgdGhlIENyZWF0ZSBhIEpQQSBQcm9qZWN0IHdpemFyZC4iIHRpdGxlPSJUaGUgSlBBIEZhY2V0IHBhZ2Ugb2YgdGhlIENyZWF0ZSBhIEpQQSBQcm9qZWN0IHdpemFyZC4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5Db21wbGV0ZSB0aGUgZmllbGRzIG9uIHRoZSA8YSBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNDQUNJRkRJRiI+SlBBIEZhY2V0IHBhZ2U8L2E+IHRvIHNwZWNpZnkgeW91ciB2ZW5kZXItc3BlY2lmaWMgcGxhdGZvcm0sIEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5LCBhbmQgZGF0YWJhc2UgY29ubmVjdGlvbi48L3A+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TWFuYWdlIGxpYnJhcmllczwvc3Bhbj4gdG8gY3JlYXRlIG9yIHVwZGF0ZSB5b3VyIEpQQSB1c2VyIGxpYnJhcmllcy4gQ2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkRvd25sb2FkIGxpYnJhcmllczwvc3Bhbj4gdG8gb2J0YWluIGFkZGl0aW9uYWwgSlBBIGltcGxlbWVudGF0aW9uIGxpYnJhcmllcy48L3A+Ci08cD5JZiBEYWxpIGRlcml2ZXMgdGhlIGluY29ycmVjdCBzY2hlbWEsIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+T3ZlcnJpZGUgdGhlIERlZmF1bHQgU2NoZW1hIGZvciBDb25uZWN0aW9uPC9zcGFuPi4gVXNpbmcgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IGEgZGV2ZWxvcG1lbnQgdGltZSBzY2hlbWEgZm9yIGRlZmF1bHRzIGFuZCB2YWxpZGF0aW9uLjwvcD4KLTxwPklmIHlvdSBjbGVhciB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkNyZWF0ZSBvcm0ueG1sPC9zcGFuPiBvcHRpb24gKHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQpLCB5b3UgY2FuIGxhdGVyIGFkZCBhIG1hcHBpbmcgZmlsZSB0byB0aGUgcHJvamVjdCB1c2luZyB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4uPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1JZiB0aGUgc2VydmVyIHJ1bnRpbWUgZG9lcyBub3QgcHJvdmlkZSBhIEpQQSBpbXBsZW1lbnRhdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSBzZWxlY3QgYSBKUEEgaW1wbGVtZW50YXRpb24gbGlicmFyeS4KLTxwPlRvIGluc3VyZSB0aGUgcG9ydGFiaWxpdHkgb2YgeW91ciBhcHBsaWNhdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSBsaXN0IHRoZSBtYW5hZ2VkIHBlcnNpc3RlbmNlIGNsYXNzZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIHBlcnNpc3RlbmNlIHVuaXQuIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgRUpCIDMuMCwgdGhlIHBlcnNpc3RlbnQgY2xhc3NlcyB3aWxsIGJlIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseS48L3A+Ci08cD5EZXBlbmRpbmcgb24geW91ciBKUEEgaW1wbGVtZW50YXRpb24gKGZvciBleGFtcGxlLCBHZW5lcmljIG9yIEVjbGlwc2VMaW5rKSwgZGlmZmVyZW50IG9wdGlvbnMgbWF5IGJlIGF2YWlsYWJsZSB3aGVuIGNyZWF0aW5nIEpQQSBwcm9qZWN0cy48L3A+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTwvbGk+Ci08bGk+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+RmluaXNoPC9zcGFuPi4gWW91IHNob3VsZCBub3cgb3BlbiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSNCQUJJRkJEQiI+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC9hPi48L3A+Ci08L2xpPgotPC9vbD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0jQ0FDQkpHQkciPkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkPC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSNCQUJJRkJEQiI+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC9hPjxiciAvPgotPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2tzIiB0aXRsZT0iUmVsYXRlZCB0YXNrcyIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtI0NJSERBSklEIj5NYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPjxiciAvPgotPGEgaHJlZj0idGFza3MwMDEuaHRtI0JFSUJBREhIIj5Db252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3Q8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSNCQUJDQUhJQyI+VW5kZXJzdGFuZGluZyBKYXZhIHBlcnNpc3RlbmNlPC9hPjxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDIuaHRtI0NIREhBR0lIIj5UaGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L2E+Ci08cD4mbmJzcDs8L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19pbmhlcml0YW5jZS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19pbmhlcml0YW5jZS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMTNmYTEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfaW5oZXJpdGFuY2UuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+U3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2U8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ1WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lIQ0NDSkQiIG5hbWU9IkNJSENDQ0pEIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5TcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZTwvaDE+Ci08cD48YSBpZD0ic3RocmVmOTIiIG5hbWU9InN0aHJlZjkyIj48L2E+PGEgaWQ9InN0aHJlZjkzIiBuYW1lPSJzdGhyZWY5MyI+PC9hPkFuIGVudGl0eSBtYXkgaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gb3RoZXIgZW50aXRpZXMuIFlvdSBjYW4gc3BlY2lmeSBhIHNwZWNpZmljIHN0cmF0ZWd5IHRvIHVzZSBmb3IgaW5oZXJpdGFuY2UuPC9wPgotPHA+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIHNwZWNpZnkgaW5oZXJpdGFuY2UgKDxjb2RlPkBJbmhlcml0YW5jZSk8L2NvZGU+IGZvciBhbiBleGlzdGluZyBlbnRpdHkgKDxjb2RlPkBFbnRpdHk8L2NvZGU+KTo8L3A+Ci08b2w+Ci08bGk+Ci08cD5TZWxlY3QgdGhlIGVudGl0eSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPlByb2plY3QgRXhwbG9yZXI8L3NwYW4+LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LCBzZWxlY3QgdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LWFjdGlvbiI+SW5oZXJpdGFuY2U8L3NwYW4+IGluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjk0IiBuYW1lPSJzdGhyZWY5NCI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlNwZWNpZnlpbmcgSW5oZXJpdGFuY2U8L3A+Ci08aW1nIHNyYz0iaW1nL2luaGVyaXRhbmNlX3RhYi5wbmciIGFsdD0iU2VsZWN0aW5nIHRoZSBJbmhlcml0YW5jZSBhcmVhIG9uIHRoZSBKUEEgRGV0YWlscyB2aWV3LiIgdGl0bGU9IlNlbGVjdGluZyB0aGUgSW5oZXJpdGFuY2UgYXJlYSBvbiB0aGUgSlBBIERldGFpbHMgdmlldy4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5JbiB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPlN0cmF0ZWd5PC9zcGFuPiBsaXN0LCBzZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhlIGluaGVyaXRhbmNlIHN0cmF0ZWdpZXM6PC9wPgotPHVsPgotPGxpPgotPHA+QSBzaW5nbGUgdGFibGUgKGRlZmF1bHQpPC9wPgotPC9saT4KLTxsaT4KLTxwPkpvaW5lZCB0YWJsZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5PbmUgdGFibGUgcGVyIGNsYXNzPC9wPgotPC9saT4KLTwvdWw+Ci08L2xpPgotPGxpPgotPHA+VXNlIHRoZSBmb2xsb3dpbmcgdGFibGUgdG8gY29tcGxldGUgdGhlIHJlbWFpbmluZyBmaWVsZHMgb24gdGhlIHRhYi4gU2VlIDxhIGhyZWY9InJlZmVyZW5jZTAwOS5odG0jQ0FDRkhHSEUiPiJJbmhlcml0YW5jZSBpbmZvcm1hdGlvbiI8L2E+IGZvciBhZGRpdGlvbmFsIGRldGFpbHMuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgSW5oZXJpdGFuY2UgdGFiLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBkZXNjcmliZXMgdGhlIG9wdGlvbnMgb24gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldywgSW5oZXJpdGFuY2UgdGFiLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyNCUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMjMlIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MTMiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQxMyI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDEzIj5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxMyIgaGVhZGVycz0icjFjMS10MTMiPjxhIGlkPSJzdGhyZWY5NSIgbmFtZT0ic3RocmVmOTUiPjwvYT48YSBpZD0ic3RocmVmOTYiIG5hbWU9InN0aHJlZjk2Ij48L2E+RGlzY3JpbWluYXRvciBDb2x1bW48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxMyByMWMyLXQxMyI+TmFtZSBvZiB0aGUgZGlzY3JpbWluYXRvciBjb2x1bW4gd2hlbiB1c2luZyBhIDxzcGFuIGNsYXNzPSJib2xkIj5TaW5nbGU8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJib2xkIj5Kb2luZWQ8L3NwYW4+IGluaGVyaXRhbmNlIHN0cmF0ZWd5LgotPHA+VGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+QERpc2NyaW1pbmF0b3JDb2x1bW48L2NvZGU+IGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTMgcjFjMy10MTMiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxMyIgaGVhZGVycz0icjFjMS10MTMiPkRpc2NyaW1pbmF0b3IgVHlwZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDEzIHIxYzItdDEzIj5TZXQgdGhlIGRpc2NyaW1pbmF0b3IgdHlwZSB0byA8Y29kZT5DaGFyPC9jb2RlPiBvciA8Y29kZT5JbnRlZ2VyPC9jb2RlPiAoaW5zdGVhZCBvZiBpdHMgZGVmYXVsdDogPGNvZGU+U3RyaW5nPC9jb2RlPikuIFRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+RGlzY3JpbWluYXRvciBWYWx1ZTwvc3Bhbj4gbXVzdCBjb25mb3JtIHRvIHRoaXMgdHlwZS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxMyByMWMzLXQxMyI+U3RyaW5nPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDEzIiBoZWFkZXJzPSJyMWMxLXQxMyI+PGEgaWQ9InN0aHJlZjk3IiBuYW1lPSJzdGhyZWY5NyI+PC9hPjxhIGlkPSJzdGhyZWY5OCIgbmFtZT0ic3RocmVmOTgiPjwvYT5EaXNjcmltaW5hdG9yIFZhbHVlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTMgcjFjMi10MTMiPlNwZWNpZnkgdGhlIGRpc2NyaW1pbmF0b3IgdmFsdWUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGFuIGVudGl0eSBpbiB0aGlzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4gVGhlIHZhbHVlIG11c3QgY29uZm9ybSB0byB0aGUgc3BlY2lmaWVkIDxzcGFuIGNsYXNzPSJib2xkIj5EaXNjcmltaW5hdG9yIFR5cGU8L3NwYW4+LgotPHA+VGhpcyBmaWVsZCBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+QERpc2NyaW1pbmF0b3JWYWx1ZTwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxMyByMWMzLXQxMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDEzIiBoZWFkZXJzPSJyMWMxLXQxMyI+T3ZlcnJpZGUgRGVmYXVsdDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDEzIHIxYzItdDEzIj5Vc2UgdGhpcyBmaWVsZCB0byBzcGVjaWZ5IGN1c3RvbSBwcmltYXJ5IGtleSBqb2luIGNvbHVtbnMuCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5AUHJpbWFyeUtleUpvaW5DbHVtbjwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQxMyByMWMzLXQxMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPC9vbD4KLTxwPkVjbGlwc2UgYWRkcyB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zIHRoZSBlbnRpdHkgZmllbGQ6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQEluaGVyaXRhbmNlKHN0cmF0ZWd5PUluaGVyaXRhbmNlVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7SU5IRVJJVEFOQ0VfU1RSQVRFR1kmZ3Q7PC9zcGFuPikKLUBEaXNjcmltaW5hdG9yQ29sdW1uKG5hbWU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtESVNDUklNSU5BVE9SX0NPTFVNTiZndDs8L3NwYW4+IiwKLSAgICBkaXNjcmltaW5hdG9yVHlwZT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RElTQ1JJTUlOQVRPUl9UWVBFJmd0Ozwvc3Bhbj4pCi1ARGlzY3JpbWluYXRvclZhbHVlKHZhbHVlLSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RElTQ1JJTUlOQVRPUl9WQUxVRSZndDs8L3NwYW4+IikKLUBQcmltYXJ5S2V5Sm9pbkNvbHVtbihuYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Sk9JTl9DT0xVTU5fTkFNRSZndDs8L3NwYW4+IiwgCi0gICAgcmVmZXJlbmNlZENvbHVtbk5hbWUgPSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1JFRkVSRU5DRURfQ09MVU1OX05BTUUmZ3Q7PC9zcGFuPiIpCi0KLTwvcHJlPgotPHA+PGEgaWQ9InN0aHJlZjk5IiBuYW1lPSJzdGhyZWY5OSI+PC9hPjxhIGlkPSJzdGhyZWYxMDAiIG5hbWU9InN0aHJlZjEwMCI+PC9hPjxhIGlkPSJzdGhyZWYxMDEiIG5hbWU9InN0aHJlZjEwMSI+PC9hPlRoZSBmb2xsb3dpbmcgZmlndXJlcyBpbGx1c3RyYXRlcyB0aGUgZGlmZmVyZW50IGluaGVyaXRhbmNlIHN0cmF0ZWdpZXMuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTAyIiBuYW1lPSJzdGhyZWYxMDIiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5TaW5nbGUgVGFibGUgSW5oZXJpdGFuY2U8L3A+Ci08aW1nIHNyYz0iaW1nL2luaGVyaXRhbmNlX3NpbmdsZS5wbmciIGFsdD0iVGhpcyBmaWd1cmUgaWxsdXN0cmF0ZXMgZW50aXR5IGluaGVyaXRhbmNlIGluIGEgc2luZ2xlIHRhYmxlLiIgdGl0bGU9IlRoaXMgZmlndXJlIGlsbHVzdHJhdGVzIGVudGl0eSBpbmhlcml0YW5jZSBpbiBhIHNpbmdsZSB0YWJsZS4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTAzIiBuYW1lPSJzdGhyZWYxMDMiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj48YSBpZD0ic3RocmVmMTA0IiBuYW1lPSJzdGhyZWYxMDQiPjwvYT48YSBpZD0ic3RocmVmMTA1IiBuYW1lPSJzdGhyZWYxMDUiPjwvYT5Kb2luZWQgVGFibGUgSW5oZXJpdGFuY2U8L3A+Ci08aW1nIHNyYz0iaW1nL2luaGVyaXRhbmNlX2pvaW4ucG5nIiBhbHQ9IlRoaXMgZmlndXJlIGlsbHVzdHJhdGVzIGEgam9pbmVkIHN1YmNsYXNzIGluaGVyaXRhbmNlIHN0cmF0ZWd5LiIgdGl0bGU9IlRoaXMgZmlndXJlIGlsbHVzdHJhdGVzIGEgam9pbmVkIHN1YmNsYXNzIGluaGVyaXRhbmNlIHN0cmF0ZWd5LiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+Ci08YnIgLz4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSNCQUJDQUhJQyI+VW5kZXJzdGFuZGluZyBKYXZhIHBlcnNpc3RlbmNlPC9hPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX21hbmFnZV9vcm0uaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfbWFuYWdlX29ybS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNWM4ZGUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfbWFuYWdlX29ybS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGU8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ0WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUhER0RDRCIgbmFtZT0iQ0lIREdEQ0QiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPjxhIGlkPSJzdGhyZWY1NyIgbmFtZT0ic3RocmVmNTciPjwvYT5NYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlPC9oMT4KLTxwPldoZW4gY3JlYXRpbmcgYSBKUEEgcHJvamVjdCwgKHNlZSA8YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPiJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCI8L2E+KSB5b3UgY2FuIGFsc28gY3JlYXRlIHRoZSA8Y29kZT5vcm0ueG1sPC9jb2RlPiBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgbWFwcGluZyBtZXRhZGF0YSBhbmQgZGVmYXVsdHMuPC9wPgotPHA+PGEgaWQ9InN0aHJlZjU4IiBuYW1lPSJzdGhyZWY1OCI+PC9hPkVjbGlwc2UgY3JlYXRlcyB0aGUgPGNvZGU+TUVUQS1JTkZcb3JtLnhtbDwvY29kZT4gZmlsZSBpbiB5b3VyIHByb2plY3QncyBkaXJlY3Rvcnk6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotJmx0Oz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPyZndDsKLSZsdDtwZXJzaXN0ZW5jZSB2ZXJzaW9uPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7UEVSU0lTVEVOQ0VfVkVSU0lPTiZndDs8L3NwYW4+IgotICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlIgotICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvcGVyc2lzdGVuY2UKLSAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlXzFfMC54c2QiJmd0OwotICAmbHQ7cGVyc2lzdGVuY2UtdW5pdCBuYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7UEVSU0lTVEVOQ0VfVU5JVF9OQU1FJmd0Ozwvc3Bhbj4iJmd0OwotICAgICZsdDtwcm92aWRlcj0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1BFUlNJU1RFTkNFX1BST1ZJREVSJmd0Ozwvc3Bhbj4iIC8mZ3Q7Ci0gICZsdDsvcGVyc2lzdGVuY2UtdW5pdCZndDsKLSZsdDsvcGVyc2lzdGVuY2UmZ3Q7Ci08L3ByZT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0jQ0FDQkpHQkciPkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkPC9hPjxiciAvPgotPGEgaHJlZj0icmVmX2VjbGlwc2VsaW5rX21hcHBpbmdfZmlsZS5odG0jQ0lBRURFSkYiPk5ldyBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGUgZGlhbG9nPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza3MwMDQuaHRtI0NJSEJDRENFIj5Xb3JraW5nIHdpdGggb3JtLnhtbCBmaWxlPC9hPjxiciAvPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDMuaHRtI0NIREJJSkFDIj5UaGUgb3JtLnhtbCBmaWxlPC9hPjxiciAvPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDI3ZGFmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5NYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQzWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJSERBSklEIiBuYW1lPSJDSUhEQUpJRCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+PGEgaWQ9InN0aHJlZjQ3IiBuYW1lPSJzdGhyZWY0NyI+PC9hPk1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZTwvaDE+Ci08cD48YSBpZD0ic3RocmVmNDgiIG5hbWU9InN0aHJlZjQ4Ij48L2E+V2hlbiB5b3UgY3JlYXRlIGEgcHJvamVjdCwgRWNsaXBzZSBjcmVhdGVzIHRoZSA8Y29kZT5NRVRBLUlORlxwZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUgaW4gdGhlIHByb2plY3QncyBkaXJlY3RvcnkuPC9wPgotPHA+WW91IGNhbiBjcmVhdGUgYSBzdHViIDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZSBpbiB0aGUgTUVUQS1JTkYgZGlyZWN0b3J5IHdoZW4geW91IGNyZWF0ZSBhIEpQQSBwcm9qZWN0IChzZWUgPGEgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI0NJSEhFSkNKIj4iQ3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3QiPC9hPikuIFlvdSBjYW4gbWFuYWdlIHRoaXMgZmlsZSBlaXRoZXIgdGhyb3VnaCB0aGUgWE1MIGVkaXRvciAoc2VlICkgb3IgdGhyb3VnaCB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bSNDSUFDQ0hJRCI+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvYT4uPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1EZXBlbmRpbmcgb24geW91ciBKUEEgaW1wbGVtZW50YXRpb24gKGZvciBleGFtcGxlLCBFY2xpcHNlTGluayksIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBwYWdlcyBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBwZXJzaXN0ZW5jZS54bWwgRWRpdG9yOgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDE5Lmh0bSNDSUFKQUZFRyI+Q3VzdG9taXphdGlvbjwvYT48L3A+Ci08cD5Vc2UgdGhpcyBwYWdlIHRvIGRlZmluZSBjaGFuZ2UtdHJhY2tpbmcgYW5kIHNlc3Npb24gY3VzdG9taXplci1yZWxhdGVkIHByb3BlcnRpZXMuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InJlZmVyZW5jZTAyMC5odG0jQ0lBQkVEQ0giPkNhY2hpbmc8L2E+PC9wPgotPHA+VXNlIHRoaXMgcGFnZSB0byBkZWZpbmUgY2FjaGluZyBwcm9wZXJ0aWVzLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJyZWZlcmVuY2UwMjEuaHRtI0NJQUJHSEhJIj5Mb2dnaW5nPC9hPjwvcD4KLTxwPlVzZSB0aGlzIHBhZ2UgdG8gZGVmaW5lIGxvZ2dpbmcgcHJvcGVydGllcy48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDIyLmh0bSNDSUFGSkNIRSI+T3B0aW9uczwvYT48L3A+Ci08cD5Vc2UgdGhpcyBwYWdlIHRvIGRlZmluZSBzZXNzaW9uIGFuZCB0YXJnZXQgZGF0YWJhc2UgcHJvcGVydGllcy48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0icmVmZXJlbmNlMDIzLmh0bSNDSUFDQ0ZDQiI+U2NoZW1hIEdlbmVyYXRpb248L2E+PC9wPgotPHA+VXNlIHRoaXMgcGFnZSB0byBkZWZpbmUgRERMLXJlbGF0ZWQgcHJvcGVydGllcy48L3A+Ci08L2xpPgotPC91bD4KLTxwPkZvciBwcm9qZWN0cyB1c2luZyB0aGUgRWNsaXBzZUxpbmsgSlBBIGltcGxlbWVudGF0aW9uLCB0aGUgQ29ubmVjdGlvbnMgcGFnZSBhbHNvIGluY2x1ZGVzIEpEQkMgY29ubmVjdGlvbiBwb29sIHByb3BlcnRpZXMuPC9wPgotPHA+SWYgdGhlIHByb2plY3QgdXNlcyB0aGUgR2VuZXJpYyBwbGF0Zm9ybSwgdGhlbiBvbmx5IHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0jQ0lBQ0lGR0oiPkdlbmVyYWw8L2E+LCA8YSBocmVmPSJyZWZlcmVuY2UwMTguaHRtI0NJQUZGSklFIj5Db25uZWN0aW9uPC9hPiwgPGEgaHJlZj0icmVmZXJlbmNlMDI0Lmh0bSNDSUFISkRGRiI+UHJvcGVydGllczwvYT4gYW5kIDxhIGhyZWY9InJlZmVyZW5jZTAyNS5odG0jQ0lBSENKQUgiPlNvdXJjZTwvYT4gcGFnZXMgYXJlIGF2YWlsYWJsZS48L3A+Ci08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTxwPlRvIHVzZSB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBFZGl0b3I6PC9wPgotPG9sPgotPGxpPgotPHA+T3BlbiB0aGUgPGNvZGU+cGVyaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuIFRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfZ2VuZXJhbC5odG0jQ0lBQ0lGR0oiPkdlbmVyYWw8L2E+IHBhZ2Ugb2YgdGhlIGVkaXRvciBhcHBlYXJzLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5HZW5lcmFsPC9zcGFuPiBwYWdlIHRvIGRlZmluZSB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlcyA8Y29kZT4mbHQ7cGVyc2lzdGVudC11bml0Jmd0OzwvY29kZT4tcmVsYXRlZCBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIDxjb2RlPiZsdDtwcm92aWRlciZndDs8L2NvZGU+LCBhbmQgPGNvZGU+Jmx0O2NsYXNzJmd0OzwvY29kZT4gZWxlbWVudHMgKGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlKS48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZWFsc28iPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlQWxzbyBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPlRpcDo8L3A+Ci1UaGUgcGVyc2lzdGVuY2UueG1sIEVkaXRvcidzIFNvdXJjZSBwYWdlIGVuYWJsZXMgeW91IHRvIHZpZXcgYW5kIGVkaXQgdGhlIHJhdyBYTUwgZmlsZS48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyIgLS0+PC9kaXY+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IkluZm9ybWFsIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBwZXJzaXN0ZW5jZS54bWwgZWRpdG9yLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJoc2lkZXMiIHJ1bGVzPSJncm91cHMiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyOSUiIC8+Ci08Y29sIHdpZHRoPSIyOSUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10OCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDgiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQ4Ij5FbGVtZW50IERlZmluZWQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDgiIGhlYWRlcnM9InIxYzEtdDgiPk5hbWU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQ4IHIxYzItdDgiPkVudGVyIHRoZSBuYW1lIG9mIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDggcjFjMy10OCI+PGNvZGU+Jmx0O3BlcnNpc3RlbmNlLXVuaXQgbmFtZSA9ICImbHQ7TmFtZSZndDsiJmd0OzwvY29kZT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10OCIgaGVhZGVycz0icjFjMS10OCI+PGEgaWQ9InN0aHJlZjQ5IiBuYW1lPSJzdGhyZWY0OSI+PC9hPlBlcnNpc3RlbmNlIFByb3ZpZGVyPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10OCByMWMyLXQ4Ij5FbnRlciB0aGUgbmFtZSBvZiB0aGUgcGVyc2lzdGVuY2UgcHJvdmlkZXIuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10OCByMWMzLXQ4Ij48Y29kZT4mbHQ7cHJvdmlkZXImZ3Q7PC9jb2RlPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQ4IiBoZWFkZXJzPSJyMWMxLXQ4Ij5EZXNjcmlwdGlvbjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDggcjFjMi10OCI+RW50ZXIgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBwZXJzaXN0ZW5jZSB1bml0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIHByb3BlcnR5LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDggcjFjMy10OCI+PGNvZGU+Jmx0O2Rlc2NyaXB0aW9uJmd0OzwvY29kZT48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10OCIgaGVhZGVycz0icjFjMS10OCI+PGEgaWQ9InN0aHJlZjUwIiBuYW1lPSJzdGhyZWY1MCI+PC9hPk1hbmFnZWQgQ2xhc3NlczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDggcjFjMi10OCI+QWRkIG9yIHJlbW92ZSB0aGUgY2xhc3NlcyBtYW5hZ2VkIHRocm91Z2ggdGhlIHBlcnNpc3RlbmNlIHVuaXQuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10OCByMWMzLXQ4Ij48Y29kZT4mbHQ7Y2xhc3MmZ3Q7PC9jb2RlPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQ4IiBoZWFkZXJzPSJyMWMxLXQ4Ij4mbmJzcDsmbmJzcDtFeGNsdWRlJm5ic3A7VW5saXN0ZWQmbmJzcDtDbGFzc2VzPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10OCByMWMyLXQ4Ij5TZWxlY3QgdG8gaW5jbHVkZSBhbGwgYW5ub3RhdGVkIGVudGl0eSBjbGFzc2VzIGluIHRoZSByb290IG9mIHRoZSBwZXJzaXN0ZW5jZSB1bml0LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDggcjFjMy10OCI+PGNvZGU+Jmx0O2V4Y2x1ZGUtdW5saXN0ZWQtY2xhc3NlcyZndDs8L2NvZGU+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI3YzEtdDgiIGhlYWRlcnM9InIxYzEtdDgiPlhNTCZuYnNwO01hcHBpbmcmbmJzcDtGaWxlczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI3YzEtdDggcjFjMi10OCI+QWRkIG9yIHJlbW92ZSB0aGUgb2JqZWN0L3JlbGF0aW9uYWwgbWFwcGluZyBYTUwgZmlsZXMgZGVmaW5lIHRoZSBjbGFzc2VzIG1hbmFnZWQgdGhyb3VnaCB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQ4IHIxYzMtdDgiPjxjb2RlPiZsdDttYXBwaW5nLWZpbGUmZ3Q7PC9jb2RlPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQ4IiBoZWFkZXJzPSJyMWMxLXQ4Ij48YSBpZD0ic3RocmVmNTEiIG5hbWU9InN0aHJlZjUxIj48L2E+Jm5ic3A7Jm5ic3A7RXhjbHVkZSZuYnNwO1VubGlzdGVkJm5ic3A7RWNsaXBzZUxpbmsmbmJzcDtYTUwmbmJzcDtNYXBwaW5nJm5ic3A7RmlsZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDggcjFjMi10OCI+U2VsZWN0IHRvIGluY2x1ZGUgYWxsIGFubm90YXRlZCBFY2xpcHNlTGluayBtYXBwaW5nIGZpbGVzLgotPHA+PHNwYW4gY2xhc3M9ImJvbGQiPk5vdGU8L3NwYW4+OiBUaGlzIGZpZWxkIGFwcGxpZXMgb25seSB3aGVuIHVzaW5nIEVjbGlwc2VMaW5rIEpQQSBpbXBsZW1lbnRhdGlvbjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDggcjFjMy10OCI+PGNvZGU+Jmx0O3Byb3BlcnR5IG5hbWU9ImVjbGlwc2VsaW5rLmV4Y2x1ZGUtZWNsaXBzZWxpbmstb3JtIiB2YWx1ZT0idHJ1ZSIvJmd0OzwvY29kZT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxpbmZvcm1hbCIgLS0+PC9saT4KLTxsaT4KLTxwPlVzZSB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDE4Lmh0bSNDSUFGRkpJRSI+Q29ubmVjdGlvbjwvYT4gcGFnZSB0byBkZWZpbmUgdGhlIDxjb2RlPiZsdDtqdGEtZGF0YS1zb3VyY2UmZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O25vbi1qdGEtZGF0YS1zb3VyY2UmZ3Q7PC9jb2RlPiBlbGVtZW50cyBhcyBmb2xsb3dzOjwvcD4KLTxwPlRvIGNvbmZpZ3VyZSB0aGUgSlRBIChKYXZhIFRyYW5zYWN0aW9uIEFQSSkgc291cmNlIHVzZWQgYnkgdGhlIHBlcnNpc3RlbmNlIHByb3ZpZGVyOjwvcD4KLTxvbD4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+SlRBPC9zcGFuPiBmcm9tIHRoZSBUcmFuc2FjdGlvbiBUeXBlIGxpc3QuPC9wPgotPC9saT4KLTxsaT4KLTxwPkVudGVyIHRoZSBnbG9iYWwgSk5ESSBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZS48L3A+Ci08L2xpPgotPC9vbD4KLTxwPlRvIGNvbmZpZ3VyZSBhIG5vbi1KVEEgZGF0YSBzb3VyY2U6PC9wPgotPG9sPgotPGxpPgotPHA+U2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5SZXNvdXJjZSBMb2NhbDwvc3Bhbj4gZnJvbSB0aGUgVHJhbnNhY3Rpb24gVHlwZSBsaXN0LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5FbnRlciB0aGUgZ2xvYmFsIEpOREkgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UuPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkRlZmF1bHQoKTwvc3Bhbj4gdG8gdXNlIHRoZSBkYXRhIHNvdXJjZSBwcm92aWRlZCBieSB0aGUgY29udGFpbmVyLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPC9saT4KLTwvb2w+Ci08cD48YSBpZD0ic3RocmVmNTIiIG5hbWU9InN0aHJlZjUyIj48L2E+Rm9yIHByb2plY3RzIHVzaW5nIHRoZSBHZW5lcmljIHBsYXRmb3JtLCB5b3UgY2FuIGFsc28gZGVmaW5lIHRoZSBFY2xpcHNlTGluayBjb25uZWN0aW9uIHBvb2wgZHJpdmVyLCBjb25uZWN0aW9uIHBvb2wgZHJpdmVyLCBVUkwsIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQuPC9wPgotPC9saT4KLTxsaT4KLTxwPlVzZSB0aGUgdGFibGUgaW4gdGhlIFByb3BlcnRpZXMgcGFnZSB0byBzZXQgdGhlIHZlbmRvci1zcGVjaWZpYyA8Y29kZT4mbHQ7cHJvcGVydGllcyZndDs8L2NvZGU+IGVsZW1lbnQuPC9wPgotPHA+VG8gYWRkIDxjb2RlPiZsdDtwcm9wZXJ0eSZndDs8L2NvZGU+IGVsZW1lbnRzOjwvcD4KLTxvbD4KLTxsaT4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5FbnRlciB0aGUgPGNvZGU+Jmx0O25hbWUmZ3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3ZhbHVlJmd0OzwvY29kZT4gYXR0cmlidXRlcyBmb3IgdGhlIDxjb2RlPiZsdDtwcm9wZXJ0eSZndDs8L2NvZGU+IGVsZW1lbnQgdXNpbmcgdGhlIHRhYmxlJ3MgTmFtZSBhbmQgVmFsdWUgZmllbGRzLjwvcD4KLTwvbGk+Ci08L29sPgotPHA+VG8gcmVtb3ZlIGEgPGNvZGU+Jmx0O3Byb3BlcnR5Jmd0OzwvY29kZT4gZWxlbWVudCwgc2VsZWN0IGEgZGVmaW5lZCBwcm9wZXJ0eSBpbiB0aGUgdGFibGUgYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPlJlbW92ZTwvc3Bhbj4uPC9wPgotPGRpdiBhbGlnbj0iY2VudGVyIj4KLTxkaXYgY2xhc3M9ImluZnRibG5vdGUiPjxiciAvPgotPHRhYmxlIGNsYXNzPSJOb3RlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+Tm90ZTo8L3A+Ci1JZiB0aGUgcHJvamVjdCB1c2VzIHRoZSBFY2xpcHNlTGluayBwbGF0Zm9ybSwgdGhlIGNvbm5lY3Rpb24gcGFnZSBhbHNvIGluY2x1ZGVzIHBhcmFtZXRlcnMgZm9yIEpEQkMgY29ubmVjdGlvbiBwb29saW5nLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibG5vdGUiIC0tPjwvZGl2PgotPC9saT4KLTwvb2w+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3htbGxfZWRpdG9yLmh0bSNDSUFDQ0hJRCI+cGVyc2lzdGVuY2UueG1sIEVkaXRvcjwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tzMDAyLmh0bSNDSUhGRUJBSSI+U3luY2hyb25pemluZyBjbGFzc2VzPC9hPjxiciAvPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDIuaHRtI0NIREhBR0lIIj5UaGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L2E+PGJyIC8+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tfbWFwcGluZy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19tYXBwaW5nLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRhZTZhZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza19tYXBwaW5nLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+TWFwcGluZyBhbiBlbnRpdHk8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ1WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik1hcHBpbmcgYW4gZW50aXR5IiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCREdCSUoiIG5hbWU9IkJBQkRHQklKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPgotPGgxPk1hcHBpbmcgYW4gZW50aXR5PC9oMT4KLTxwPkRhbGkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtYXBwaW5nIHR5cGVzIGZvciBKYXZhIHBlcnNpc3RlbnQgZW50aXRpZXM6PC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMDkuaHRtI0JBQkJBQkNFIj5CYXNpYyBtYXBwaW5nPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrczAxMC5odG0jQkFCQ0JIREYiPkVtYmVkZGVkIG1hcHBpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDExLmh0bSNDSUhESUFFRSI+RW1iZWRkZWQgSUQgbWFwcGluZzwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMTIuaHRtI0JBQkdDQkhHIj5JRCBtYXBwaW5nPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiPk1hbnktdG8tbWFueSBtYXBwaW5nPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrczAxNC5odG0jQkFCSEZBRkoiPk1hbnktdG8tb25lIG1hcHBpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDE1Lmh0bSNCQUJIR0VCRCI+T25lLXRvLW1hbnkgbWFwcGluZzwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMTYuaHRtI0JBQkZIQkNKIj5PbmUtdG8tb25lIG1hcHBpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDE3Lmh0bSNCQUJIRkhFSSI+VHJhbnNpZW50IG1hcHBpbmc8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDE4Lmh0bSNCQUJISUJJSSI+VmVyc2lvbiBtYXBwaW5nPC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPHA+QWRkaXRpb25hbCBtYXBwaW5nIHR5cGVzIChzdWNoIGFzIEJhc2ljIENvbGxlY3Rpb24gbWFwcGluZ3MpIG1heSBiZSBhdmFpbGFibGUgd2hlbiB1c2luZyBEYWxpIHdpdGggRWNsaXBzZUxpbmsuPC9wPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSNCQUJCREpGSSI+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvYT4gPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrcy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzJlZTY1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrcy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlRhc2tzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0MloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSIgVGFza3MiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJzdGhyZWYyNSIgbmFtZT0ic3RocmVmMjUiPjwvYT48L3A+Ci08aDE+VGFza3M8L2gxPgotPHA+VGhpcyBzZWN0aW9uIGluY2x1ZGVzIGRldGFpbGVkIHN0ZXAtYnktc3RlcCBwcm9jZWR1cmVzIGZvciBhY2Nlc3NpbmcgdGhlIERhbGkgT1IgbWFwcGluZyB0b29sIGZ1bmN0aW9uYWxpdHkuPC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI0NJSEhFSkNKIj5DcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdDwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0idGFza3MwMDEuaHRtI0JFSUJBREhIIj5Db252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3Q8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tfY3JlYXRlX2pwYV9lbnRpdHkuaHRtI0JBQkZCSkJHIj5DcmVhdGluZyBhIEpQQSBFbnRpdHk8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNDSUhEQUpJRCI+TWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrX21hbmFnZV9vcm0uaHRtI0NJSERHRENEIj5NYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrX2FkZGl0b25hbF90YWJsZXMuaHRtI0NJSEdCSUVJIj5TcGVjaWZ5aW5nIGFkZGl0aW9uYWwgdGFibGVzPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNDSUhDQ0NKRCI+U3BlY2lmeWluZyBlbnRpdHkgaW5oZXJpdGFuY2U8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrczAxOS5odG0jQkFCQkFHRkkiPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDIxLmh0bSNCQUJGQUlCQSI+VmFsaWRhdGluZyBtYXBwaW5ncyBhbmQgcmVwb3J0aW5nIHByb2JsZW1zPC9hPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48YSBocmVmPSJ0YXNrczAyNC5odG0jQkFCREJDQkkiPk1vZGlmeWluZyBwZXJzaXN0ZW50IHByb2plY3QgcHJvcGVydGllczwvYT48L3A+Ci08L2xpPgotPC91bD4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDEuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDAxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhNGZjMy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDEuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5Db252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3Q8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQyWiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNvbnZlcnRpbmcgYSBKYXZhIFByb2plY3QgdG8gYSBKUEEgUHJvamVjdCIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJFSUJBREhIIiBuYW1lPSJCRUlCQURISCI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+Q29udmVydGluZyBhIEphdmEgUHJvamVjdCB0byBhIEpQQSBQcm9qZWN0PC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYzNSIgbmFtZT0ic3RocmVmMzUiPjwvYT48YSBpZD0ic3RocmVmMzYiIG5hbWU9InN0aHJlZjM2Ij48L2E+PGEgaWQ9InN0aHJlZjM3IiBuYW1lPSJzdGhyZWYzNyI+PC9hPlVzZSB0aGlzIHByb2NlZHVyZSB0byBjb252ZXJ0IGFuIGV4aXN0aW5nIEphdmEgcHJvamVjdCB0byBhIEpQQSBwcm9qZWN0LjwvcD4KLTxvbD4KLTxsaT4KLTxwPkZyb20gdGhlIE5hdmlnYXRvciBvciBQcm9qZWN0IGV4cGxvcmVyLCByaWdodC1jbGljayB0aGUgSmF2YSBwcm9qZWN0IGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+Q29uZmlndXJlICZndDsgQ29udmVydCB0byBKUEEgUHJvamVjdC48L3NwYW4+IFRoZSBQcm9qZWN0IEZhY2V0cyBwYWdlIG9mIHRoZSBNb2RpZnkgRmFjZXRlZCBQcm9qZWN0IHdpemFyZCBhcHBlYXJzLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjM4IiBuYW1lPSJzdGhyZWYzOCI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPk1vZGlmeSBGYWNldGVkIFByb2plY3QgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvbW9kaWZ5X2ZhY2V0ZWRfcHJvamVjdC5wbmciIGFsdD0iIiB0aXRsZT0iIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+Q2hhbmdlIHRoZSA8c3BhbiBjbGFzcz0iYm9sZCI+Q29uZmlndXJhdGlvbjwvc3Bhbj4gdG8gPHNwYW4gY2xhc3M9ImJvbGQiPlV0aWxpdHkgSlBBIHByb2plY3Q8L3NwYW4+LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uIDxhIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtI0NBQ0lGRElGIj5KUEEgRmFjZXQgcGFnZTwvYT4gYXBwZWFycy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYzOSIgbmFtZT0ic3RocmVmMzkiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5KUEEgRmFjZXQgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvbmV3X2pwYV9mYWNldF90YXNrLnBuZyIgYWx0PSIiIHRpdGxlPSIiIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5Db21wbGV0ZSB0aGUgZmllbGRzIG9uIHRoZSA8YSBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNDQUNJRkRJRiI+SlBBIEZhY2V0IHBhZ2U8L2E+IHRvIHNwZWNpZnkgeW91ciB2ZW5kZXItc3BlY2lmaWMgcGxhdGZvcm0sIEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5LCBhbmQgZGF0YWJhc2UgY29ubmVjdGlvbi48L3A+Ci08cD5DbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TWFuYWdlIGxpYnJhcmllczwvc3Bhbj4gdG8gY3JlYXRlIG9yIHVwZGF0ZSB5b3VyIEpQQSB1c2VyIGxpYnJhcmllcy4gQ2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkRvd25sb2FkIGxpYnJhcmllczwvc3Bhbj4gdG8gb2J0YWluIGFkZGl0aW9uYWwgSlBBIGltcGxlbWVudGF0aW9uIGxpYnJhcmllcy48L3A+Ci08cD5JZiBEYWxpIGRlcml2ZXMgdGhlIGluY29ycmVjdCBzY2hlbWEsIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+T3ZlcnJpZGUgdGhlIERlZmF1bHQgU2NoZW1hIGZvciBDb25uZWN0aW9uPC9zcGFuPi4gVXNpbmcgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IGEgZGV2ZWxvcG1lbnQgdGltZSBzY2hlbWEgZm9yIGRlZmF1bHRzIGFuZCB2YWxpZGF0aW9uLjwvcD4KLTxwPklmIHlvdSBjbGVhciB0aGUgPHNwYW4gY2xhc3M9ImJvbGQiPkNyZWF0ZSBvcm0ueG1sPC9zcGFuPiBvcHRpb24gKHdoaWNoIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQpLCB5b3UgY2FuIGxhdGVyIGFkZCBhIG1hcHBpbmcgZmlsZSB0byB0aGUgcHJvamVjdCB1c2luZyB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4uPC9wPgotPC9saT4KLTxsaT4KLTxwPkNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5GaW5pc2g8L3NwYW4+LjwvcD4KLTwvbGk+Ci08L29sPgotPHA+VGhlIERhbGkgT1IgTWFwcGluZyBUb29sIGFkZHMgdGhlIEpQQSBpbXBsZW1lbnRhdGlvbiBsaWJyYXJpZXMgdG8geW91ciBwcm9qZWN0IGFuZCBjcmVhdGVzIHRoZSBuZWNlc3NhcnkgPGNvZGU+b3JtLnhtbDwvY29kZT4gYW5kIDxjb2RlPnBlcmlzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGVzLjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfbmV3X2pwYV9wcm9qZWN0X3dpemFyZC5odG0jQ0FDQkpHQkciPkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkPC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSNCQUJJRkJEQiI+SlBBIERldmVsb3BtZW50IHBlcnNwZWN0aXZlPC9hPjxiciAvPgotPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2tzIiB0aXRsZT0iUmVsYXRlZCB0YXNrcyIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtI0NJSERBSklEIj5NYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGU8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPjxiciAvPgotPGEgaHJlZj0idGFza19jcmVhdGVfbmV3X3Byb2plY3QuaHRtI0NJSEhFSkNKIj5DcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdDwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtI0JBQkNBSElDIj5VbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2U8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMi5odG0jQ0hESEFHSUgiPlRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZTwvYT4KLTxwPiZuYnNwOzwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwMi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODYyMTkzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwMi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlN5bmNocm9uaXppbmcgY2xhc3NlczwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iU3luY2hyb25pemluZyBjbGFzc2VzIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lIRkVCQUkiIG5hbWU9IkNJSEZFQkFJIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5TeW5jaHJvbml6aW5nIGNsYXNzZXM8L2gxPgotPHA+QXMgeW91IHdvcmsgd2l0aCB0aGUgY2xhc3NlcyBpbiB5b3VyIEphdmEgcHJvamVjdCwgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlIDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZSB0byByZWZsZWN0IHRoZSBjaGFuZ2VzLiA8YSBpZD0ic3RocmVmNTMiIG5hbWU9InN0aHJlZjUzIj48L2E+PGEgaWQ9InN0aHJlZjU0IiBuYW1lPSJzdGhyZWY1NCI+PC9hPjxhIGlkPSJzdGhyZWY1NSIgbmFtZT0ic3RocmVmNTUiPjwvYT48L3A+Ci08cD5Vc2UgdGhpcyBwcm9jZWR1cmUgdG8gc3luY2hyb25pemUgdGhlIDxjb2RlPnBlcnNpc3RlbmNlLnhtbDwvY29kZT4gZmlsZTo8L3A+Ci08b2w+Ci08bGk+Ci08cD5SaWdodC1jbGljayB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+UHJvamVjdCBFeHBsb3Jlcjwvc3Bhbj4gYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC1hY3Rpb24iPlN5bmNocm9uaXplIENsYXNzZXM8L3NwYW4+LjwvcD4KLTxkaXYgYWxpZ249ImNlbnRlciI+Ci08ZGl2IGNsYXNzPSJpbmZ0Ymxub3RlIj48YnIgLz4KLTx0YWJsZSBjbGFzcz0iTm90ZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPHRib2R5PgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij4KLTxwIGNsYXNzPSJub3RlcDEiPk5vdGU6PC9wPgotVXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IHNlbGVjdGVkIDxzcGFuIGNsYXNzPSJib2xkIj5Bbm5vdGF0ZWQgY2xhc3NlcyBtdXN0IGJlIGxpc3RlZCBpbiB0aGUgcGVyc2lzdGVuY2UueG1sIG9wdGlvbjwvc3Bhbj4gaW4gdGhlIDxhIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtI0NBQ0lGRElGIj5KUEEgRmFjZXQgcGFnZTwvYT4uIEluIGdlbmVyYWwsIHlvdSBkbyBub3QgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRhaW5lci48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjU2IiBuYW1lPSJzdGhyZWY1NiI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlN5bmNocm9uaXppbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBGaWxlPC9wPgotPGltZyBzcmM9ImltZy9zeW5jaG9ybml6ZV9jbGFzc2VzLnBuZyIgYWx0PSJUaGlzIGZpZ3VyZSBzaG93cyB0aGUgSlBBIFRvb2xzICZndDsgU3luY2hyb25pemUgQ2xhc3NlcyBvcHRpb24uIiB0aXRsZT0iVGhpcyBmaWd1cmUgc2hvd3MgdGhlIEpQQSBUb29scyAmZ3Q7IFN5bmNocm9uaXplIENsYXNzZXMgb3B0aW9uLiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+Ci08cD5EYWxpIGFkZHMgdGhlIG5lY2Vzc2FyeSA8Y29kZT4mbHQ7Y2xhc3MmZ3Q7PC9jb2RlPiBlbGVtZW50cyB0byB0aGUgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5QZXJzaXN0ZW5jZSBYTUwgRWRpdG9yPC9zcGFuPiB0byBjb250aW51ZSBlZGl0aW5nIHRoZSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPC9saT4KLTwvb2w+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jQ0lIREFKSUQiPk1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAyLmh0bSNDSERIQUdJSCI+VGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlPC9hPjxiciAvPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDAzLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwMy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NDlkMDcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDAzLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+Q3JlYXRpbmcgYW4gb3JtLnhtbCBmaWxlPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0NFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJDcmVhdGluZyBhbiBvcm0ueG1sIGZpbGUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+PGEgaWQ9InN0aHJlZjU5IiBuYW1lPSJzdGhyZWY1OSI+PC9hPgotPGgxPkNyZWF0aW5nIGFuIG9ybS54bWwgZmlsZTwvaDE+Ci08cD48YSBpZD0ic3RocmVmNjAiIG5hbWU9InN0aHJlZjYwIj48L2E+SWYgeW91IG9wdCBub3QgdG8gY3JlYXRlIGFuIDxjb2RlPm9ybS54bWw8L2NvZGU+IGZpbGUgd2hlbiB5b3UgY3JlYXRlIGEgSlBBIHByb2plY3QsIHlvdSBjYW4gY3JlYXRlIG9uZSB1c2luZyB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSI+TWFwcGluZyBGaWxlIFdpemFyZDwvYT4uPC9wPgotPHA+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIGNyZWF0ZSBhbiA8Y29kZT5vcm0ueG1sPC9jb2RlPiBmaWxlOjwvcD4KLTxvbD4KLTxsaT4KLTxwPkZyb20gdGhlIE5hdmlnYXRvciBvciBQcm9qZWN0IEV4cGxvcmVyLCBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkZpbGUgJmd0OyBOZXcgJmd0OyBPdGhlcjwvc3Bhbj4uIFRoZSBTZWxlY3QgYSBXaXphcmQgZGlhbG9nIGFwcGVhcnMuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmNjEiIG5hbWU9InN0aHJlZjYxIj48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+VGhlIFNlbGVjdCBhIFdpemFyZCBEaWFsb2c8L3A+Ci08aW1nIHNyYz0iaW1nL3NlbGVjdF9hX3dpemFyZF9tYXBwaW5nLnBuZyIgYWx0PSJUaGUgU2VsZWN0IGEgV2l6YXJkIGRpYWxvZyB3aXRoIE1hcHBpbmcgZmlsZSBzZWxlY3RlZC4iIHRpdGxlPSJUaGUgU2VsZWN0IGEgV2l6YXJkIGRpYWxvZyB3aXRoIE1hcHBpbmcgZmlsZSBzZWxlY3RlZC4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcHBpbmcgRmlsZTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk5leHQ8L3NwYW4+LiBUaGUgTWFwcGluZyBGaWxlIHBhZ2UgYXBwZWFycy48L3A+Ci08cD5JZiB5b3UgYXJlIHVzaW5nIEVjbGlwc2VMaW5rLCB5b3UgY2FuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+RWNsaXBzZUxpbmsgJmd0OyBFY2xpcHNlTGluayBNYXBwaW5nIEZpbGU8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjYyIiBuYW1lPSJzdGhyZWY2MiI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlRoZSBNYXBwaW5nIEZpbGUgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvbWFwcGluZ19maWxlX25ldy5wbmciIGFsdD0iVGhlIE1hcHBpbmcgRmlsZSBwYWdlLiIgdGl0bGU9IlRoZSBNYXBwaW5nIEZpbGUgcGFnZS4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5EZWZpbmUgdGhlIHByb3BlcnRpZXMgaW4gdGhlIHBhZ2UgYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5GaW5pc2g8L3NwYW4+LiBUaGUgPGNvZGU+b3JtLnhtbDwvY29kZT4gZmlsZSBhcHBlYXJzIGluIHRoZSBzcmMgZGlyZWN0b3J5IG9mIHRoZSBzZWxlY3RlZCBKUEEgcHJvamVjdC4gWW91IGNhbiBtYW5hZ2UgdGhlIG9ybS54bWwgZmlsZSB1c2luZyB0aGUgSlBBIERldGFpbHMgdmlldyBvciB0aHJvdWdoIHRoZSBYTUwgRWRpdG9yLiBTZWUgYWxzbyA8YSBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtI0NBQ0dER0hDIj5KUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCk8L2E+LjwvcD4KLTwvbGk+Ci08L29sPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDA0Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyOGNiM2UuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDA0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+V29ya2luZyB3aXRoIG9ybS54bWwgZmlsZTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iV29ya2luZyB3aXRoIG9ybS54bWwgZmlsZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJSEJDRENFIiBuYW1lPSJDSUhCQ0RDRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+V29ya2luZyB3aXRoIG9ybS54bWwgZmlsZTwvaDE+Ci08cD48YSBpZD0ic3RocmVmNjMiIG5hbWU9InN0aHJlZjYzIj48L2E+PGEgaWQ9InN0aHJlZjY0IiBuYW1lPSJzdGhyZWY2NCI+PC9hPllvdSBjYW4gd29yayB3aXRoIHRoZSA8Y29kZT5vcm0ueG1sPC9jb2RlPiBieSB1c2luZyB0aGUgSlBBIERldGFpbHMgdmlldy48L3A+Ci08cD5Vc2UgdGhpcyBwcm9jZWR1cmUgdG8gd29yayB3aXRoIHRoZSA8Y29kZT5vcm0ueG1sPC9jb2RlPiBmaWxlOjwvcD4KLTxvbD4KLTxsaT4KLTxwPlJpZ2h0LWNsaWNrIHRoZSA8Y29kZT5vcm0ueG1sPC9jb2RlPiBmaWxlIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+UHJvamVjdCBFeHBsb3Jlcjwvc3Bhbj4gYW5kIHNlbGVjdCA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC1hY3Rpb24iPk9wZW48L3NwYW4+LjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JbiB0aGUgSlBBIFN0cnVjdHVyZSB2aWV3LCBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPkVudGl0eU1hcHBpbmdzPC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+VXNlIHRoZSBKUEEgRGV0YWlscyB2aWV3IHRvIGNvbmZpZ3VyZSB0aGUgZW50aXR5IG1hcHBpbmcgYW5kIHBlcnNpc3RlbmNlIHVuaXQgZGVmYXVsdHMuPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmNjUiIG5hbWU9InN0aHJlZjY1Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+SlBBIERldGFpbHMgdmlldyBmb3IgRW50aXR5TWFwcGluZ3MgKG9ybS54bWwpPC9wPgotPGltZyBzcmM9ImltZy9kZXRhaWxzX2VudGl0eW1hcHBpbmdzLnBuZyIgYWx0PSJKUEEgRGV0YWlscyB2aWV3IGZvciBvcm0ueG1sIGZpbGUuIiB0aXRsZT0iSlBBIERldGFpbHMgdmlldyBmb3Igb3JtLnhtbCBmaWxlLiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+PC9saT4KLTwvb2w+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfZGV0YWlsc19vcm0uaHRtI0NBQ0dER0hDIj5KUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCk8L2E+PGJyIC8+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSIjQ0lIQkNEQ0UiPldvcmtpbmcgd2l0aCBvcm0ueG1sIGZpbGU8L2E+PGJyIC8+Ci08YSBocmVmPSIuLi9vcmcuZWNsaXBzZS53c3QueG1sZWRpdG9yLmRvYy51c2VyL3RvcGljcy9jd29ya1hNTC5odG1sIj5Xb3JraW5nIHdpdGggWE1MIEZpbGVzPC9hPjxiciAvPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDMuaHRtI0NIREJJSkFDIj5UaGUgb3JtLnhtbCBmaWxlPC9hPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTZhMjg0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNS5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkVudGl0eTwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRW50aXR5IiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCR0JJRUUiIG5hbWU9IkJBQkdCSUVFIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5FbnRpdHk8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjY5IiBuYW1lPSJzdGhyZWY2OSI+PC9hPjxhIGlkPSJzdGhyZWY3MCIgbmFtZT0ic3RocmVmNzAiPjwvYT48YSBpZD0ic3RocmVmNzEiIG5hbWU9InN0aHJlZjcxIj48L2E+PGEgaWQ9InN0aHJlZjcyIiBuYW1lPSJzdGhyZWY3MiI+PC9hPkFuIDxzcGFuIGNsYXNzPSJib2xkIj5FbnRpdHk8L3NwYW4+IGlzIGEgcGVyc2lzdGVudCBkb21haW4gb2JqZWN0LjwvcD4KLTxwPkFuIGVudGl0eSA8c3BhbiBjbGFzcz0iaXRhbGljIj5jYW4gYmU8L3NwYW4+OjwvcD4KLTx1bD4KLTxsaT4KLTxwPkFic3RyYWN0IG9yIGNvbmNyZXRlIGNsYXNzZXMuIEVudGl0aWVzIG1heSBhbHNvIGV4dGVuZCBub24tZW50aXR5IGNsYXNzZXMgYXMgd2VsbCBhcyBlbnRpdHkgY2xhc3NlcywgYW5kIG5vbi1lbnRpdHkgY2xhc3NlcyBtYXkgZXh0ZW5kIGVudGl0eSBjbGFzc2VzLjwvcD4KLTwvbGk+Ci08L3VsPgotPHA+QW4gZW50aXR5IDxzcGFuIGNsYXNzPSJpdGFsaWMiPm11c3QgaGF2ZTwvc3Bhbj46PC9wPgotPHVsPgotPGxpPgotPHA+QSBuby1hcmcgY29uc3RydWN0b3IgKHB1YmxpYyBvciBwcm90ZWN0ZWQpOyB0aGUgZW50aXR5IGNsYXNzIG1heSBoYXZlIG90aGVyIGNvbnN0cnVjdG9ycyBhcyB3ZWxsLjwvcD4KLTwvbGk+Ci08L3VsPgotPHA+PGEgaWQ9InN0aHJlZjczIiBuYW1lPSJzdGhyZWY3MyI+PC9hPjxhIGlkPSJzdGhyZWY3NCIgbmFtZT0ic3RocmVmNzQiPjwvYT48YSBpZD0ic3RocmVmNzUiIG5hbWU9InN0aHJlZjc1Ij48L2E+RWFjaCBwZXJzaXN0ZW50IGVudGl0eSBtdXN0IGJlIG1hcHBlZCB0byBhIGRhdGFiYXNlIHRhYmxlIGFuZCBjb250YWluIGEgcHJpbWFyeSBrZXkuIFBlcnNpc3RlbnQgZW50aXRpZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIDxjb2RlPkBFbnRpdHk8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPHA+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIGFkZCBwZXJzaXN0ZW5jZSB0byBhbiBleGlzdGluZyBlbnRpdHk6PC9wPgotPG9sPgotPGxpPgotPHA+T3BlbiB0aGUgSmF2YSBjbGFzcyBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPlByb2plY3QgRXhwbG9yZXIuPC9zcGFuPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgdGhlIGNsYXNzIGluIHRoZSBKUEEgU3RydWN0dXJlIHZpZXcuPC9wPgotPC9saT4KLTxsaT4KLTxwPkluIHRoZSBKUEEgRGV0YWlscyB2aWV3LCBjbGljayB0aGUgbWFwcGluZyB0eXBlIGh5cGVybGluayB0byBhY2Nlc3MgdGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nLiBJbiB0aGUgZm9sbG93aW5nIGZpZ3VyZSwgY2xpY2tpbmcgPHNwYW4gY2xhc3M9Iml0YWxpYyI+ZW50aXR5PC9zcGFuPiBpbnZva2VzIHRoZSBkaWFsb2cgZnJvbSB0aGUgSlBBIERldGFpbHMgVmlldy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWY3NiIgbmFtZT0ic3RocmVmNzYiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5UaGUgTWFwcGluZyBUeXBlIEh5cGVybGluazwvcD4KLTxpbWcgc3JjPSJpbWcvbWFwcGVkX2VudGl0eV90eXBlX2xpbmsucG5nIiBhbHQ9IlRoZSBKUEEgRGV0YWlscyB2aWV3IGZvciBhbiBlbnRpdHkgc2hvd2luZyB0aGUgbWFwcGluZyB0eXBlIGh5cGVybGluay4iIHRpdGxlPSJUaGUgSlBBIERldGFpbHMgdmlldyBmb3IgYW4gZW50aXR5IHNob3dpbmcgdGhlIG1hcHBpbmcgdHlwZSBoeXBlcmxpbmsuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT4KLTxkaXYgYWxpZ249ImNlbnRlciI+Ci08ZGl2IGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGVBbHNvIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08dGJvZHk+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPgotPHAgY2xhc3M9Im5vdGVwMSI+VGlwOjwvcD4KLVlvdSBjYW4gYWxzbyBjaGFuZ2UgKG9yIGFkZCkgcGVyc2lzdGVuY2UgZm9yIGFuIGVudGl0eSBieSByaWdodC1jbGlja2luZyB0aGUgY2xhc3MgaW4gdGhlIEpQQSBTdHJ1Y3R1cmUgVmlldyBhbmQgdGhlbiBjbGlja2luZyA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIEFzICZndDsgRW50aXR5PC9zcGFuPi48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlYWxzbyIgLS0+PC9kaXY+Ci08L2xpPgotPGxpPgotPHA+U2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5FbnRpdHk8L3NwYW4+IGZyb20gdGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nIGFuZCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5PSzwvc3Bhbj4uPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmNzciIG5hbWU9InN0aHJlZjc3Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+VGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gRGlhbG9nPC9wPgotPGltZyBzcmM9ImltZy9tYXBwaW5nX3R5cGVfc2VsZWN0aW9uX2VudGl0eS5wbmciIGFsdD0iVGhlIE1hcHBpbmcgVHlwZSBzZWxlY3Rpb24gZGlhbG9nIHdpdGggRW5pdHkgc2VsZWN0ZWQuIiB0aXRsZT0iVGhlIE1hcHBpbmcgVHlwZSBzZWxlY3Rpb24gZGlhbG9nIHdpdGggRW5pdHkgc2VsZWN0ZWQuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+Q29tcGxldGUgdGhlIHJlbWFpbmluZyA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT4uPC9wPgotPC9saT4KLTwvb2w+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrcyIgdGl0bGU9IlJlbGF0ZWQgdGFza3MiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZGl0b25hbF90YWJsZXMuaHRtI0NJSEdCSUVJIj5TcGVjaWZ5aW5nIGFkZGl0aW9uYWwgdGFibGVzPC9hPjxiciAvPgotPGEgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jQ0lIQ0NDSkQiPlNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlPC9hPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDYuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTJmOTEzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkVtYmVkZGFibGU8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ1WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkVtYmVkZGFibGUiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJGRUlDRSIgbmFtZT0iQkFCRkVJQ0UiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkVtYmVkZGFibGU8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjc4IiBuYW1lPSJzdGhyZWY3OCI+PC9hPjxhIGlkPSJzdGhyZWY3OSIgbmFtZT0ic3RocmVmNzkiPjwvYT5BbiA8c3BhbiBjbGFzcz0iYm9sZCI+RW1iZWRkZWQ8L3NwYW4+IGNsYXNzIGlzIGEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzdG9yZWQgYXMgcGFydCBvZiBhbiBvd25pbmcgZW50aXR5OyBpdCBzaGFyZXMgdGhlIGlkZW50aXR5IG9mIHRoZSBvd25pbmcgZW50aXR5LiBFYWNoIGZpZWxkIG9mIHRoZSBlbWJlZGRlZCBjbGFzcyBpcyBtYXBwZWQgdG8gdGhlIGRhdGFiYXNlIHRhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3duaW5nIGVudGl0eS48L3A+Ci08cD5UbyBvdmVycmlkZSB0aGUgbWFwcGluZyBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYyBzdWJjbGFzcywgdXNlIHRoZSA8Y29kZT5AQXR0cmlidXRlT3ZlcnJpZGU8L2NvZGU+IGFubm90YXRpb24gZm9yIHRoYXQgc3BlY2lmaWMgY2xhc3MuPC9wPgotPHA+PGEgaWQ9InN0aHJlZjgwIiBuYW1lPSJzdGhyZWY4MCI+PC9hPjxhIGlkPSJzdGhyZWY4MSIgbmFtZT0ic3RocmVmODEiPjwvYT48YSBpZD0ic3RocmVmODIiIG5hbWU9InN0aHJlZjgyIj48L2E+QW4gZW1iZWRkYWJsZSBlbnRpdHkgaXMgaWRlbnRpZmllZCBieSB0aGUgPGNvZGU+QEVtYmVkZGFibGU8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPHA+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIGFkZCBlbWJlZGRhYmxlIHBlcnNpc3RlbmNlIHRvIGFuIGV4aXN0aW5nIGVudGl0eTo8L3A+Ci08b2w+Ci08bGk+Ci08cD5PcGVuIHRoZSBKYXZhIGNsYXNzIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+UHJvamVjdCBFeHBsb3Jlcjwvc3Bhbj4uPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgY2xhc3MgaW4gdGhlIEpQQSBTdHJ1Y3R1cmUgdmlldy48L3A+Ci08L2xpPgotPGxpPgotPHA+Q2xpY2sgdGhlIG1hcHBpbmcgdHlwZSBoeXBlcmxpbmsgdG8gb3BlbiB0aGUgTWFwcGluZyBUeXBlIFNlbGVjdGlvbiBkaWFsb2cuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+RW1iZWRkYWJsZTwvc3Bhbj4gYW5kIHRoZW4gY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPk9LPC9zcGFuPi48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWY4MyIgbmFtZT0ic3RocmVmODMiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5NYXBwaW5nIFR5cGUgU2VsZWN0aW9uIERpYWxvZyAoRW1iZWRkYWJsZSk8L3A+Ci08aW1nIHNyYz0iaW1nL21hcHBpbmdfdHlwZV9zZWxlY3Rpb25fZW1iZWQucG5nIiBhbHQ9IlRoZSBNYXBwaW5nIFR5cGUgU2VsZWN0aW9uIGRpYWxvZyB3aXRoIEVtYmVkZGFibGUgc2VsZWN0ZWQuIiB0aXRsZT0iVGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nIHdpdGggRW1iZWRkYWJsZSBzZWxlY3RlZC4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5Db21wbGV0ZSB0aGUgcmVtYWluaW5nIDxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9wcm9wX3ZpZXcuaHRtI0JBQkZBRUJCIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpPC9hPi48L3A+Ci08L2xpPgotPC9vbD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2tzIiB0aXRsZT0iUmVsYXRlZCB0YXNrcyIgLz48YnIgLz4KLTxkbD4KLTxkZD48YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzPC9hPjwvZGQ+Ci08ZGQ+PGEgaHJlZj0idGFza19hZGRpdG9uYWxfdGFibGVzLmh0bSNDSUhHQklFSSI+U3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlczwvYT48L2RkPgotPGRkPjxhIGhyZWY9InRhc2tfaW5oZXJpdGFuY2UuaHRtI0NJSENDQ0pEIj5TcGVjaWZ5aW5nIGVudGl0eSBpbmhlcml0YW5jZTwvYT48L2RkPgotPC9kbD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDcuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWQ2ZDJjLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwNy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk1hcHBlZCBzdXBlcmNsYXNzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0NVoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJNYXBwZWQgc3VwZXJjbGFzcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkRBR0NJIiBuYW1lPSJCQUJEQUdDSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+TWFwcGVkIHN1cGVyY2xhc3M8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjg0IiBuYW1lPSJzdGhyZWY4NCI+PC9hPjxhIGlkPSJzdGhyZWY4NSIgbmFtZT0ic3RocmVmODUiPjwvYT5BbiBlbnRpdHkgdGhhdCBleHRlbmRzIGEgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcHBlZCBTdXBlcmNsYXNzPC9zcGFuPiBjbGFzcyBpbmhlcml0cyB0aGUgcGVyc2lzdGVudCBzdGF0ZSBhbmQgbWFwcGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgc3VwZXJjbGFzcy4gWW91IHNob3VsZCB1c2UgYSBtYXBwZWQgc3VwZXJjbGFzcyB0byBkZWZpbmUgbWFwcGluZyBpbmZvcm1hdGlvbiB0aGF0IGlzIGNvbW1vbiB0byBtdWx0aXBsZSBlbnRpdHkgY2xhc3Nlcy48L3A+Ci08cD5BIG1hcHBlZCBzdXBlcmNsYXNzIDxzcGFuIGNsYXNzPSJpdGFsaWMiPmNhbiBiZTwvc3Bhbj46PC9wPgotPHVsPgotPGxpPgotPHA+QWJzdHJhY3Qgb3IgY29uY3JldGUgY2xhc3NlczwvcD4KLTwvbGk+Ci08L3VsPgotPHA+QSBtYXBwZWQgc3VwZXJjbGFzcyA8c3BhbiBjbGFzcz0iaXRhbGljIj5jYW5ub3QgYmU8L3NwYW4+OjwvcD4KLTx1bD4KLTxsaT4KLTxwPkJlIHF1ZXJpZWQgb3IgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIEVudGl0eS1NYW5hZ2VyIG9yIFF1ZXJ5IG9wZXJhdGlvbnM8L3A+Ci08L2xpPgotPGxpPgotPHA+QmUgdGhlIHRhcmdldCBvZiBhIHBlcnNpc3RlbnQgcmVsYXRpb25zaGlwPC9wPgotPC9saT4KLTwvdWw+Ci08cD5BIG1hcHBlZCBzdXBlcmNsYXNzIGRvZXMgbm90IGhhdmUgYSBkZWZpbmVkIGRhdGFiYXNlIHRhYmxlLiBJbnN0ZWFkLCBpdHMgbWFwcGluZyBpbmZvcm1hdGlvbiBpcyBkZXJpdmVkIGZyb20gaXRzIHN1cGVyY2xhc3MuIFRvIG92ZXJyaWRlIHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIHN1YmNsYXNzLCB1c2UgdGhlIDxjb2RlPkBBdHRyaWJ1dGVPdmVycmlkZTwvY29kZT4gYW5ub3RhdGlvbiBmb3IgdGhhdCBzcGVjaWZpYyBjbGFzcy48L3A+Ci08cD48YSBpZD0ic3RocmVmODYiIG5hbWU9InN0aHJlZjg2Ij48L2E+PGEgaWQ9InN0aHJlZjg3IiBuYW1lPSJzdGhyZWY4NyI+PC9hPjxhIGlkPSJzdGhyZWY4OCIgbmFtZT0ic3RocmVmODgiPjwvYT48YSBpZD0ic3RocmVmODkiIG5hbWU9InN0aHJlZjg5Ij48L2E+QSBtYXBwZWQgc3VwZXJjbGFzcyBpcyBpZGVudGlmaWVkIGJ5IHRoZSA8Y29kZT5ATWFwcGVkU3VwZXJjbGFzczwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08cD5Vc2UgdGhpcyBwcm9jZWR1cmUgdG8gYWRkIE1hcHBlZCBTdXBlcmNsYXNzIHBlcnNpc3RlbmNlIHRvIGFuIGV4aXN0aW5nIGVudGl0eTo8L3A+Ci08b2w+Ci08bGk+Ci08cD5PcGVuIHRoZSBKYXZhIGNsYXNzIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+UHJvamVjdCBFeHBsb3Jlcjwvc3Bhbj4uPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCB0aGUgY2xhc3MgaW4gdGhlIEpQQSBTdHJ1Y3R1cmUgdmlldy48L3A+Ci08L2xpPgotPGxpPgotPHA+SW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcsIGNsaWNrIHRoZSBtYXBwaW5nIHR5cGUgaHlwZXJsaW5rIHRvIG9wZW4gdGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcHBlZCBTdXBlcmNsYXNzPC9zcGFuPiBhbmQgdGhlbiA8c3BhbiBjbGFzcz0iYm9sZCI+T0s8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjkwIiBuYW1lPSJzdGhyZWY5MCI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPk1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gRGlhbG9nIChNYXBwZWQgU3VwZXJjbGFzcyk8L3A+Ci08aW1nIHNyYz0iaW1nL21hcHBpbmdfdHlwZV9zZWxlY3Rpb25fc3VwZXJjbGFzcy5wbmciIGFsdD0iVGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nIHdpdGggTWFwcGVkIFN1cGVyY2xhc3Mgc2VsZWN0ZWQuIiB0aXRsZT0iVGhlIE1hcHBpbmcgVHlwZSBTZWxlY3Rpb24gZGlhbG9nIHdpdGggTWFwcGVkIFN1cGVyY2xhc3Mgc2VsZWN0ZWQuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+Q29tcGxldGUgdGhlIHJlbWFpbmluZyA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfcHJvcF92aWV3Lmh0bSNCQUJGQUVCQiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGVudGl0aWVzKTwvYT4uPC9wPgotPC9saT4KLTwvb2w+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrcyIgdGl0bGU9IlJlbGF0ZWQgdGFza3MiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+QWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3M8L2E+PGJyIC8+Ci08YSBocmVmPSJ0YXNrX2FkZGl0b25hbF90YWJsZXMuaHRtI0NJSEdCSUVJIj5TcGVjaWZ5aW5nIGFkZGl0aW9uYWwgdGFibGVzPC9hPjxiciAvPgotPGEgaHJlZj0idGFza19pbmhlcml0YW5jZS5odG0jQ0lIQ0NDSkQiPlNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlPC9hPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwOC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDguaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE5ZDQxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAwOC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ1WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJJR0JHRyIgbmFtZT0iQkFCSUdCR0ciPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXM8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjEwNiIgbmFtZT0ic3RocmVmMTA2Ij48L2E+PGEgaWQ9InN0aHJlZjEwNyIgbmFtZT0ic3RocmVmMTA3Ij48L2E+TmFtZWQgcXVlcmllcyBpbXByb3ZlIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlIGJlY2F1c2UgdGhleSBhcmUgcHJlcGFyZWQgb25jZSBhbmQgdGhleSAoYW5kIGFsbCBvZiB0aGVpciBhc3NvY2lhdGVkIHN1cHBvcnRpbmcgb2JqZWN0cykgY2FuIGJlIGVmZmljaWVudGx5IHJldXNlZCB0aGVyZWFmdGVyLCBtYWtpbmcgdGhlbSB3ZWxsIHN1aXRlZCBmb3IgY29tcGxleCBhbmQgZnJlcXVlbnRseSBleGVjdXRlZCBvcGVyYXRpb25zLiBOYW1lZCBxdWVyaWVzIHVzZSB0aGUgSlBBIHF1ZXJ5IGxhbmd1YWdlIGZvciBwb3J0YWJsZSBleGVjdXRpb24gb24gYW55IHVuZGVybHlpbmcgZGF0YWJhc2U7IG5hbWVkIG5hdGl2ZSBxdWVyaWVzIHVzZSB0aGUgU1FMIGxhbmd1YWdlIG5hdGl2ZSB0byB0aGUgdW5kZXJseWluZyBkYXRhYmFzZS48L3A+Ci08cD5Vc2UgdGhpcyBwcm9jZWR1cmUgdG8gYWRkIDxjb2RlPkBOYW1lZFF1ZXJ5PC9jb2RlPiBhbmQgPGNvZGU+QE5hbWVkTmF0aXZlUXVlcnk8L2NvZGU+IGFubm90YXRpb25zIHRvIHRoZSBlbnRpdHkuPC9wPgotPHA+VG8gY3JlYXRlIGEgbmFtZWQgcXVlcnk6PC9wPgotPG9sPgotPGxpPgotPHA+U2VsZWN0IHRoZSBlbnRpdHkgaW4gdGhlIFByb2plY3QgRXhwbG9yZXIuPC9wPgotPC9saT4KLTxsaT4KLTxwPkluIHRoZSBKUEEgRGV0YWlscyB2aWV3LCBleHBhbmQgUXVlcmllcy48L3A+Ci08L2xpPgotPGxpPgotPHA+Q2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZDwvc3Bhbj4gZm9yIGEgbmFtZWQgcXVlcnksIG9yIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQgTmF0aXZlPC9zcGFuPiBmb3IgYSBuYXRpdmUgcXVlcnkuPC9wPgotPC9saT4KLTxsaT4KLTxwPkluIHRoZSBkaWFsb2cgdGhhdCBhcHBlYXJzLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgcXVlcnkgaW4gdGhlIE5hbWUgZmllbGQgYW5kIHRoZW4gY2xpY2sgT0suPC9wPgotPC9saT4KLTxsaT4KLTxwPkVudGVyIHRoZSBxdWVyeSBpbiB0aGUgUXVlcnkgZmllbGQuPC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGlkPSJzdGhyZWYxMDgiIG5hbWU9InN0aHJlZjEwOCI+PC9hPjxhIGlkPSJzdGhyZWYxMDkiIG5hbWU9InN0aHJlZjEwOSI+PC9hPjxhIGlkPSJzdGhyZWYxMTAiIG5hbWU9InN0aHJlZjExMCI+PC9hPjxhIGlkPSJzdGhyZWYxMTEiIG5hbWU9InN0aHJlZjExMSI+PC9hPlRvIGFkZCBhIFF1ZXJ5IGhpbnQsIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5BZGQ8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjExMiIgbmFtZT0ic3RocmVmMTEyIj48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+RW50ZXJpbmcgYSBOYW1lZCBRdWVyeTwvcD4KLTxpbWcgc3JjPSJpbWcvdGFza19lbnRlcmluZ19xdWVyeS5wbmciIGFsdD0iVGhlIFF1ZXJpZXMgc2VjdGlvbiBvZiB0aGUgSlBBIERldGFpbHMgdmlldy4iIHRpdGxlPSJUaGUgUXVlcmllcyBzZWN0aW9uIG9mIHRoZSBKUEEgRGV0YWlscyB2aWV3LiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+PC9saT4KLTwvb2w+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDkuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDA5Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzZDA2ZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMDkuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+QmFzaWMgbWFwcGluZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDVaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iQmFzaWMgbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkJBQkNFIiBuYW1lPSJCQUJCQUJDRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+QmFzaWMgbWFwcGluZzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTEzIiBuYW1lPSJzdGhyZWYxMTMiPjwvYT48YSBpZD0ic3RocmVmMTE0IiBuYW1lPSJzdGhyZWYxMTQiPjwvYT48YSBpZD0ic3RocmVmMTE1IiBuYW1lPSJzdGhyZWYxMTUiPjwvYT48YSBpZD0ic3RocmVmMTE2IiBuYW1lPSJzdGhyZWYxMTYiPjwvYT5Vc2UgYSA8c3BhbiBjbGFzcz0iYm9sZCI+QmFzaWMgTWFwcGluZzwvc3Bhbj4gdG8gbWFwIGFuIGF0dHJpYnV0ZSBkaXJlY3RseSB0byBhIGRhdGFiYXNlIGNvbHVtbi4gQmFzaWMgbWFwcGluZ3MgbWF5IGJlIHVzZWQgb25seSB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIHR5cGVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPkphdmEgcHJpbWl0aXZlIHR5cGVzIGFuZCB3cmFwcGVycyBvZiB0aGUgcHJpbWl0aXZlIHR5cGVzPC9wPgotPC9saT4KLTxsaT4KLTxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmcsIGphdmEubWF0aC5CaWdJbnRlZ2VyPC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5qYXZhLm1hdGguQmlnRGVjaW1hbDwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+amF2YS51dGlsLkRhdGU8L2NvZGU+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxjb2RlPmphdmEudXRpbC5DYWxlbmRhciwgamF2YS5zcWwuRGF0ZTwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+amF2YS5zcWwuVGltZTwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+amF2YS5zcWwuVGltZXN0YW1wPC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5ieXRlW108L2NvZGU+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxjb2RlPkJ5dGVbXTwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+Y2hhcltdPC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5DaGFyYWN0ZXJbXTwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+ZW51bXM8L3A+Ci08L2xpPgotPGxpPgotPHA+YW55IG90aGVyIHR5cGUgdGhhdCBpbXBsZW1lbnRzIDxjb2RlPlNlcmlhbGl6YWJsZTwvY29kZT48L3A+Ci08L2xpPgotPC91bD4KLTxwPlRvIGNyZWF0ZSBhIGJhc2ljIG1hcHBpbmc6PC9wPgotPG9sPgotPGxpPgotPHA+SW4gdGhlIDxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPiwgcmlnaHQtY2xpY2sgdGhlIGZpZWxkIHRvIG1hcC4gU2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5NYXAgQXMgJmd0OyBCYXNpYzwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+IGRpc3BsYXlzIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgc2VsZWN0ZWQgZmllbGQuPC9wPgotPC9saT4KLTxsaT4KLTxwPlVzZSB0aGlzIHRhYmxlIHRvIGNvbXBsZXRlIHRoZSByZW1haW5pbmcgZmllbGRzIG9uIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxNCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDE0Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MTQiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDE0IiBoZWFkZXJzPSJyMWMxLXQxNCI+RW50aXR5IE1hcCBIeXBlcmxpbms8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxNCByMWMyLXQxNCI+RGVmaW5lcyB0aGlzIG1hcHBpbmcgYXMgYSA8c3BhbiBjbGFzcz0iYm9sZCI+QmFzaWMgTWFwcGluZzwvc3Bhbj4uCi08cD5UaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5AQmFzaWM8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTQgcjFjMy10MTQiPkJhc2ljPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDE0IiBoZWFkZXJzPSJyMWMxLXQxNCI+Q29sdW1uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTQgcjFjMi10MTQiPlRoZSBkYXRhYmFzZSBjb2x1bW4gbWFwcGVkIHRvIHRoZSBlbnRpdHkgYXR0cmlidXRlLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDR0NCSEIiPiJDb2x1bW4iPC9hPiBmb3IgZGV0YWlscy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxNCByMWMzLXQxNCI+QnkgZGVmYXVsdCwgdGhlIENvbHVtbiBpcyBhc3N1bWVkIHRvIGJlIG5hbWVkIGlkZW50aWNhbGx5IHRvIHRoZSBhdHRyaWJ1dGUgYW5kIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgPGNvZGU+SU5TRVJUPC9jb2RlPiBhbmQgPGNvZGU+VVBEQVRFPC9jb2RlPiBzdGF0ZW1lbnRzLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQxNCIgaGVhZGVycz0icjFjMS10MTQiPlRhYmxlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTQgcjFjMi10MTQiPk5hbWUgb2YgdGhlIGRhdGFiYXNlIHRhYmxlLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE0IHIxYzMtdDE0Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MTQiIGhlYWRlcnM9InIxYzEtdDE0Ij5GZXRjaDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDE0IHIxYzItdDE0Ij5EZWZpbmVzIGhvdyBkYXRhIGlzIGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0dHR0hCIj4iRmV0Y2ggVHlwZSI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RWFnZXI8L3A+Ci08L2xpPgotPGxpPgotPHA+TGF6eTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MTQgcjFjMy10MTQiPkVhZ2VyPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDE0IiBoZWFkZXJzPSJyMWMxLXQxNCI+T3B0aW9uYWw8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQxNCByMWMyLXQxNCI+U3BlY2lmaWVzIGlmIHRoaXMgZmllbGQgaXMgY2FuIGJlIG51bGwuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTQgcjFjMy10MTQiPlllczwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyN2MxLXQxNCIgaGVhZGVycz0icjFjMS10MTQiPlRlbXBvcmFsPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTQgcjFjMi10MTQiPlNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDRUFKR0QiPiJUZW1wb3JhbCI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RGF0ZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UaW1lPC9wPgotPC9saT4KLTxsaT4KLTxwPlRpbWVzdGFtcDwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MTQgcjFjMy10MTQiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyOGMxLXQxNCIgaGVhZGVycz0icjFjMS10MTQiPkxvYjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE0IHIxYzItdDE0Ij5TcGVjaWZpZXMgaWYgdGhpcyBpcyBhIGxhcmdlIG9iamVjdHMgKEJMT0Igb3IgQ0xPQikuIFNlZSA8YSBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNCQklCSSI+IkxvYiI8L2E+IGZvciBkZXRhaWxzLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI4YzEtdDE0IHIxYzMtdDE0Ij48YnIgLz48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPjwvbGk+Ci08L29sPgotPHA+RWNsaXBzZSBhZGRzIHRoZSBmb2xsb3dpbmcgYW5ub3RhdGlvbnMgdG8gdGhlIGZpZWxkOjwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLUBDb2x1bW4obmFtZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iLCB0YWJsZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9UQUJMRSZndDs8L3NwYW4+IiwgCi0gICAgaW5zZXJ0YWJsZT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7SU5TRVJUQUJMRSZndDs8L3NwYW4+LCB1cGRhdGFibGU9PHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1VQREFUQUJMRSZndDs8L3NwYW4+KQotQEJhc2ljKGZldGNoPUZldGNoVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RkVUQ0hfVFlQRSZndDs8L3NwYW4+LCBvcHRpb25hbCA9IDxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtPUFRJT05BTCZndDs8L3NwYW4+KQotQFRlbXBvcmFsKFRlbXBvcmFsVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEVNUE9SQUwmZ3Q7PC9zcGFuPikKLQotPC9wcmU+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hcHBpbmcuaHRtI0JBQkRHQklKIj5NYXBwaW5nIGFuIGVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0jQkFCQkRKRkkiPlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3M8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMS5odG0jQkFCQkdGSkciPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTAuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDEwLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0MmU4OC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTAuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+RW1iZWRkZWQgbWFwcGluZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDZaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRW1iZWRkZWQgbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkNCSERGIiBuYW1lPSJCQUJDQkhERiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+RW1iZWRkZWQgbWFwcGluZzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTE3IiBuYW1lPSJzdGhyZWYxMTciPjwvYT48YSBpZD0ic3RocmVmMTE4IiBuYW1lPSJzdGhyZWYxMTgiPjwvYT48YSBpZD0ic3RocmVmMTE5IiBuYW1lPSJzdGhyZWYxMTkiPjwvYT48YSBpZD0ic3RocmVmMTIwIiBuYW1lPSJzdGhyZWYxMjAiPjwvYT5Vc2UgYW4gPHNwYW4gY2xhc3M9ImJvbGQiPkVtYmVkZGVkIE1hcHBpbmc8L3NwYW4+IHRvIHNwZWNpZnkgYSBwZXJzaXN0ZW50IGZpZWxkIG9yIHByb3BlcnR5IG9mIGFuIGVudGl0eSB3aG9zZSB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBhbiBlbWJlZGRhYmxlIGNsYXNzLjwvcD4KLTxvbD4KLTxsaT4KLTxwPkluIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT4sIHJpZ2h0LWNsaWNrIHRoZSBmaWVsZCB0byBtYXAuPC9wPgotPC9saT4KLTxsaT4KLTxwPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIGFzICZndDsgRW1iZWRkZWQ8L3NwYW4+LiBUaGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPiBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHNlbGVjdGVkIGZpZWxkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgcmVtYWluaW5nIGZpZWxkcyBvbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgaW4gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIxOSUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMzglIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MTUiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQxNSI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDE1Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxNSIgaGVhZGVycz0icjFjMS10MTUiPkVudGl0eSBNYXBwaW5nIEh5cGVybGluazwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE1IHIxYzItdDE1Ij5EZWZpbmVzIHRoaXMgbWFwcGluZyBhcyBhIDxzcGFuIGNsYXNzPSJib2xkIj5FbWJlZGRlZDwvc3Bhbj4uCi08cD5UaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ARW1iZWRkZWQ8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTUgcjFjMy10MTUiPkVtYmVkZGVkPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDE1IiBoZWFkZXJzPSJyMWMxLXQxNSI+QXR0cmlidXRlIE92ZXJyaWRlczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE1IHIxYzItdDE1Ij5TcGVjaWZ5IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG1hcHBpbmcgb2YgYW4gZW50aXR5J3MgYXR0cmlidXRlLiBTZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIERlZmF1bHQ8L3NwYW4+LjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE1IHIxYzMtdDE1Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MTUiIGhlYWRlcnM9InIxYzEtdDE1Ij5Db2x1bW5zPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTUgcjFjMi10MTUiPlRoZSBkYXRhYmFzZSBjb2x1bW4gKGFuZCBpdHMgdGFibGUpIG1hcHBlZCB0byB0aGUgZW50aXR5IGF0dHJpYnV0ZS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0dDQkhCIj4iQ29sdW1uIjwvYT4gZm9yIGRldGFpbHMuCi08dWw+Ci08bGk+Ci08cD5OYW1lICZuZGFzaDsgTmFtZSBvZiB0aGUgZGF0YWJhc2UgY29sdW1uLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UYWJsZSAmbmRhc2g7IE5hbWUgb2YgdGhlIGRhdGFiYXNlIHRhYmxlLjwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTUgcjFjMy10MTUiPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+PC9saT4KLTwvb2w+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9ucyB0byB0aGUgZmllbGQ6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQEVtYmVkZGVkCi1AQXR0cmlidXRlT3ZlcnJpZGUoY29sdW1uPUBDb2x1bW4odGFibGU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtDT0xVTU5fVEFCTEUmZ3Q7PC9zcGFuPiIsIG5hbWUgPSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iKSkKLTwvcHJlPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI0JBQkJESkZJIj5VbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzPC9hPjxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDEuaHRtI0JBQkJHRkpHIj5VbmRlcnN0YW5kaW5nIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDExLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxMS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNjJlYWIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDExLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+RW1iZWRkZWQgSUQgbWFwcGluZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDZaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iRW1iZWRkZWQgSUQgbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJSERJQUVFIiBuYW1lPSJDSUhESUFFRSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+RW1iZWRkZWQgSUQgbWFwcGluZzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTIxIiBuYW1lPSJzdGhyZWYxMjEiPjwvYT48YSBpZD0ic3RocmVmMTIyIiBuYW1lPSJzdGhyZWYxMjIiPjwvYT48YSBpZD0ic3RocmVmMTIzIiBuYW1lPSJzdGhyZWYxMjMiPjwvYT48YSBpZD0ic3RocmVmMTI0IiBuYW1lPSJzdGhyZWYxMjQiPjwvYT5Vc2UgYW4gPHNwYW4gY2xhc3M9ImJvbGQiPkVtYmVkZGVkIElEIE1hcHBpbmc8L3NwYW4+IHRvIHNwZWNpZnkgdGhlIHByaW1hcnkga2V5IG9mIGFuIGVtYmVkZGVkIElELiBUaGVzZSBtYXBwaW5ncyBtYXkgYmUgdXNlZCB3aXRoIGEgPGEgaHJlZj0idGFza3MwMDYuaHRtI0JBQkZFSUNFIj5FbWJlZGRhYmxlPC9hPiBlbnRpdGllcy48L3A+Ci08b2w+Ci08bGk+Ci08cD5JbiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+LCBzZWxlY3QgdGhlIGZpZWxkIHRvIG1hcC48L3A+Ci08L2xpPgotPGxpPgotPHA+UmlnaHQtY2xpY2sgdGhlIGZpZWxkIGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIEFzICZndDsgRW1iZWRkZWQgSWQ8L3NwYW4+LiBUaGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPiBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHNlbGVjdGVkIGZpZWxkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgcmVtYWluaW5nIGZpZWxkcyBvbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgaW4gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIxOSUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMzglIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MTYiPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQxNiI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDE2Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxNiIgaGVhZGVycz0icjFjMS10MTYiPkVudGl0eSBNYXBwaW5nIEh5cGVybGluazwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE2IHIxYzItdDE2Ij5EZWZpbmVzIHRoaXMgbWFwcGluZyBhcyBhIDxzcGFuIGNsYXNzPSJib2xkIj5FbWJlZGRlZCBJZDwvc3Bhbj4uCi08cD5UaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ARW1iZWRkZWRJZDwvY29kZT4gYW5ub3RhdGlvbi48L3A+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQxNiByMWMzLXQxNiI+RW1iZWRkZWQgSWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPjwvbGk+Ci08L29sPgotPHA+RWNsaXBzZSBhZGRzIHRoZSBmb2xsb3dpbmcgYW5ub3RhdGlvbnMgdG8gdGhlIGZpZWxkOjwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLUBFbWJlZGRlZElkCi08L3ByZT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSNCQUJCREpGSSI+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvYT48YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAxLmh0bSNCQUJCR0ZKRyI+VW5kZXJzdGFuZGluZyBFSkIgMy4wIEphdmEgUGVyc2lzdGVuY2UgQVBJPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxMi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2ZjYjZmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxMi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5JRCBtYXBwaW5nPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0NloiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJJRCBtYXBwaW5nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCR0NCSEciIG5hbWU9IkJBQkdDQkhHIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5JRCBtYXBwaW5nPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYxMjUiIG5hbWU9InN0aHJlZjEyNSI+PC9hPjxhIGlkPSJzdGhyZWYxMjYiIG5hbWU9InN0aHJlZjEyNiI+PC9hPjxhIGlkPSJzdGhyZWYxMjciIG5hbWU9InN0aHJlZjEyNyI+PC9hPjxhIGlkPSJzdGhyZWYxMjgiIG5hbWU9InN0aHJlZjEyOCI+PC9hPlVzZSBhbiA8c3BhbiBjbGFzcz0iYm9sZCI+SUQgTWFwcGluZzwvc3Bhbj4gdG8gc3BlY2lmeSB0aGUgcHJpbWFyeSBrZXkgb2YgYW4gZW50aXR5LiBJRCBtYXBwaW5ncyBtYXkgYmUgdXNlZCB3aXRoIGEgPGEgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIj5FbnRpdHk8L2E+IG9yIDxhIGhyZWY9InRhc2tzMDA3Lmh0bSNCQUJEQUdDSSI+TWFwcGVkIHN1cGVyY2xhc3M8L2E+LiBFYWNoIDxhIGhyZWY9InRhc2tzMDA1Lmh0bSNCQUJHQklFRSI+RW50aXR5PC9hPiBtdXN0IGhhdmUgYW4gSUQgbWFwcGluZy48L3A+Ci08b2w+Ci08bGk+Ci08cD5JbiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+LCBzZWxlY3QgdGhlIGZpZWxkIHRvIG1hcC48L3A+Ci08L2xpPgotPGxpPgotPHA+UmlnaHQgY2xpY2sgdGhlIGZpbGVkIGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIGFzICZndDsgSUQ8L3NwYW4+LiBUaGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPiBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHNlbGVjdGVkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDQkhGSUoiPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+IGZpZWxkcyBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgaW4gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgZGlyPSJsdHIiIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGZyYW1lPSJib3JkZXIiIHJ1bGVzPSJhbGwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCI+Ci08Y29sIHdpZHRoPSIyMiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPGNvbCB3aWR0aD0iMzUlIiAvPgotPHRoZWFkPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMS10MTciPlByb3BlcnR5PC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMyLXQxNyI+RGVzY3JpcHRpb248L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzMtdDE3Ij5EZWZhdWx0PC90aD4KLTwvdHI+Ci08L3RoZWFkPgotPHRib2R5PgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyMmMxLXQxNyIgaGVhZGVycz0icjFjMS10MTciPkVudGl0eSBNYXBwaW5nIEh5cGVybGluazwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE3IHIxYzItdDE3Ij5EZWZpbmVzIHRoaXMgbWFwcGluZyBhcyBhbiA8c3BhbiBjbGFzcz0iYm9sZCI+SUQgTWFwcGluZzwvc3Bhbj4uCi08cD5UaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ASWQ8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTcgcjFjMy10MTciPklEPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDE3IiBoZWFkZXJzPSJyMWMxLXQxNyI+Q29sdW1uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTcgcjFjMi10MTciPlRoZSBkYXRhYmFzZSBjb2x1bW4gbWFwcGVkIHRvIHRoZSBlbnRpdHkgYXR0cmlidXRlLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDR0NCSEIiPiJDb2x1bW4iPC9hPiBmb3IgZGV0YWlscy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQxNyByMWMzLXQxNyI+QnkgZGVmYXVsdCwgdGhlIENvbHVtbiBpcyBhc3N1bWVkIHRvIGJlIG5hbWVkIGlkZW50aWNhbGx5IHRvIHRoZSBhdHRyaWJ1dGUuPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDE3IiBoZWFkZXJzPSJyMWMxLXQxNyI+VGFibGU8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxNyByMWMyLXQxNyI+VGhlIGRhdGFiYXNlIHRhYmxlIG1hcHBlZCB0byB0aGUgZW50aXR5IGF0dHJpYnV0ZS48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxNyByMWMzLXQxNyI+QnkgZGVmYXVsdCwgdGhlIFRhYmxlIGlzIGFzc3VtZWQgdG8gYmUgaWRlbnRpY2FsIHRvIHRoZSB0YWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGl0eS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MTciIGhlYWRlcnM9InIxYzEtdDE3Ij5UZW1wb3JhbDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDE3IHIxYzItdDE3Ij5TcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGF0YS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0VBSkdEIj4iVGVtcG9yYWwiPC9hPiBmb3IgZGV0YWlscy4KLTx1bD4KLTxsaT4KLTxwPkRhdGU8L3A+Ci08L2xpPgotPGxpPgotPHA+VGltZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UaW1lc3RhbXA8L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDE3IHIxYzMtdDE3Ij48YnIgLz48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPjwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgZmllbGRzIGluIDxhIGhyZWY9InJlZl9wcmltYXJ5X2tleS5odG0jQ0FDRkNDQUIiPlByaW1hcnkgS2V5IEdlbmVyYXRpb24gaW5mb3JtYXRpb248L2E+IGFyZWEgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5KUEEgRGV0YWlsczwvc3Bhbj4gdmlldy48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJSdWxlSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgaW4gdGhlIFBLIEdlbmVyYXRpb24gdGFiLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQSyBHZW5lcmF0aW9uIHRhYi4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjIlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjM1JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDE4Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MTgiPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQxOCI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MTgiIGhlYWRlcnM9InIxYzEtdDE4Ij5QcmltYXJ5IEtleSBHZW5lcmF0aW9uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTggcjFjMi10MTgiPlRoZXNlIGZpZWxkcyBkZWZpbmUgaG93IHRoZSBwcmltYXJ5IGtleSBpcyBnZW5lcmF0ZWQuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTggcjFjMy10MTgiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQxOCIgaGVhZGVycz0icjFjMS10MTgiPiZuYnNwOyZuYnNwO1N0cmF0ZWd5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTggcjFjMi10MTgiPlNlZSA8YSBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtI0NBQ0JBSkJDIj4iUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+QXV0bzwvcD4KLTwvbGk+Ci08bGk+Ci08cD5TZXF1ZW5jZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5JZGVudGl0eTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UYWJsZTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTggcjFjMy10MTgiPkF1dG88L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MTgiIGhlYWRlcnM9InIxYzEtdDE4Ij4mbmJzcDsmbmJzcDtHZW5lcmF0b3ImbmJzcDtOYW1lPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTggcjFjMi10MTgiPk5hbWUgb2YgdGhlIHByaW1hcnkga2V5IGdlbmVyYXRvciBzcGVjaWZpZWQgaW4gdGhlIDxzcGFuIGNsYXNzPSJib2xkIj5TdHJhdGVneTwvc3Bhbj48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQxOCByMWMzLXQxOCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPC9vbD4KLTxwPkFkZGl0aW9uYWwgZmllbGRzIHdpbGwgYXBwZWFyIGluIHRoZSA8YSBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtI0NBQ0ZDQ0FCIj5QcmltYXJ5IEtleSBHZW5lcmF0aW9uIGluZm9ybWF0aW9uPC9hPiBhcmVhLCBkZXBlbmRpbmcgb24gdGhlIHNlbGVjdGVkIFN0cmF0ZWd5LiBTZWUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+IkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKSI8L2E+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD4KLTxwPkVjbGlwc2UgYWRkcyB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zIHRvIHRoZSBmaWVsZDo8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci1ASWQKLUBDb2x1bW4obmFtZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iLCB0YWJsZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1RBQkxFX05BTUUmZ3Q7PC9zcGFuPiIsIGluc2VydGFibGU9PHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0lOU0VSVEFCTEUmZ3Q7PC9zcGFuPiwKLSAgICB1cGRhdGFibGU9PHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1VQREFUQUJMRSZndDs8L3NwYW4+KQotQFRlbXBvcmFsKDxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtURU1QT1JBTCZndDs8L3NwYW4+KQotQEdlbmVyYXRlZFZhbHVlKHN0cmF0ZWd5PUdlbmVyYXRvclR5cGUuPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1NUUkFURUdZJmd0Ozwvc3Bhbj4sIGdlbmVyYXRvcj0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0dFTkVSQVRPUl9OQU1FJmd0Ozwvc3Bhbj4iKUBUYWJsZUdlbmVyYXRvcihuYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFCTEVfR0VORVJBVE9SX05BTUUmZ3Q7PC9zcGFuPiIsIHRhYmxlID0gIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtUQUJMRV9HRU5FUkFUT1JfVEFCTEUmZ3Q7PC9zcGFuPiIsIAotICAgIHBrQ29sdW1uTmFtZSA9ICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFCTEVfR0VORVJBVE9SX1BLJmd0Ozwvc3Bhbj4iLCAKLSAgICB2YWx1ZUNvbHVtbk5hbWUgPSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1RBQkxFX0dFTkVSQVRPUl9WQUxVRV9DT0xVTU4mZ3Q7PC9zcGFuPiIsIAotICAgIHBrQ29sdW1uVmFsdWUgPSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1RBQkxFX0dFTkVSQVRPUl9QS19DT0xVTU5fVkFMVUUmZ3Q7PC9zcGFuPiIpQFNlcXVlbmNlR2VuZXJhdG9yKG5hbWU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtTRVFVRU5DRV9HRU5FUkFUT1JfTkFNRSZndDs8L3NwYW4+IiwgCi0gICAgc2VxdWVuY2VOYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7U0VRVUVOQ0VfR0VORVJBVE9SX1NFUVVFTkNFJmd0Ozwvc3Bhbj4iKQotPC9wcmU+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hcHBpbmcuaHRtI0JBQkRHQklKIj5NYXBwaW5nIGFuIGVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0jQkFCQkRKRkkiPlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3M8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMS5odG0jQkFCQkdGSkciPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTMuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDEzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyNzc3Mi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTMuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+TWFueS10by1tYW55IG1hcHBpbmc8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ2WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik1hbnktdG8tbWFueSBtYXBwaW5nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCRUlFR0QiIG5hbWU9IkJBQkVJRUdEIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5NYW55LXRvLW1hbnkgbWFwcGluZzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTI5IiBuYW1lPSJzdGhyZWYxMjkiPjwvYT48YSBpZD0ic3RocmVmMTMwIiBuYW1lPSJzdGhyZWYxMzAiPjwvYT48YSBpZD0ic3RocmVmMTMxIiBuYW1lPSJzdGhyZWYxMzEiPjwvYT48YSBpZD0ic3RocmVmMTMyIiBuYW1lPSJzdGhyZWYxMzIiPjwvYT5Vc2UgYSA8c3BhbiBjbGFzcz0iYm9sZCI+TWFueS10by1NYW55IE1hcHBpbmc8L3NwYW4+IHRvIGRlZmluZSBhIG1hbnktdmFsdWVkIGFzc29jaWF0aW9uIHdpdGggbWFueS10by1tYW55IG11bHRpcGxpY2l0eS4gQSBtYW55LXRvLW1hbnkgbWFwcGluZyBoYXMgdHdvIHNpZGVzOiB0aGUgPHNwYW4gY2xhc3M9Iml0YWxpYyI+b3duaW5nIHNpZGU8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iaXRhbGljIj5ub24tb3duaW5nIHNpZGU8L3NwYW4+LiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBqb2luIHRhYmxlIG9uIHRoZSBvd25pbmcgc2lkZS4gRm9yIGJpZGlyZWN0aW9uYWwgbWFwcGluZ3MsIGVpdGhlciBzaWRlIG1heSBiZSB0aGUgb3duaW5nIHNpZGUuPC9wPgotPG9sPgotPGxpPgotPHA+SW4gdGhlIDxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPiwgc2VsZWN0IHRoZSBmaWVsZCB0byBtYXAuPC9wPgotPC9saT4KLTxsaT4KLTxwPlJpZ2h0LWNsaWNrIHRoZSBmaWVsZCBhbmQgdGhlbiBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcCBBcyAmZ3Q7IE1hbnktdG8tTWFueTwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+IGRpc3BsYXlzIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgc2VsZWN0ZWQgZmllbGQuPC9wPgotPC9saT4KLTxsaT4KLTxwPlVzZSB0aGlzIHRhYmxlIHRvIGNvbXBsZXRlIHRoZSA8YSBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNCSEZJSiI+R2VuZXJhbCBpbmZvcm1hdGlvbjwvYT4gZmllbGRzIG9mIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQxOSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDE5Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MTkiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDE5IiBoZWFkZXJzPSJyMWMxLXQxOSI+TWFwcGluZyBFbnRpdHkgSHlwZXJsaW5rPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MTkgcjFjMi10MTkiPkRlZmluZXMgdGhpcyBtYXBwaW5nIGFzIGEgPHNwYW4gY2xhc3M9ImJvbGQiPk1hbnkgdG8gTWFueSBNYXBwaW5nPC9zcGFuPi4KLTxwPlRoaXMgZmllbGQgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBNYW55VG9NYW55PC9jb2RlPiBhbm5vdGF0aW9uLjwvcD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDE5IHIxYzMtdDE5Ij5NYW55IHRvIE1hbnk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij5UYXJnZXQgRW50aXR5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MTkgcjFjMi10MTkiPlRoZSBlbnRpdHkgdG8gd2hpY2ggdGhpcyBhdHRyaWJ1dGUgaXMgbWFwcGVkLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDE5IHIxYzMtdDE5Ij5udWxsCi08cD5Zb3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSB0YXJnZXQgZW50aXR5LCBzaW5jZSBpdCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgdHlwZSBvZiBvYmplY3QgYmVpbmcgcmVmZXJlbmNlZC48L3A+Ci08L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij5GZXRjaDwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDE5IHIxYzItdDE5Ij5EZWZpbmVzIGhvdyBkYXRhIGlzIGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0dHR0hCIj4iRmV0Y2ggVHlwZSI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RWFnZXI8L3A+Ci08L2xpPgotPGxpPgotPHA+TGF6eTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MTkgcjFjMy10MTkiPkxhenk8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij5NYXBwZWQgQnk8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQxOSByMWMyLXQxOSI+VGhlIGRhdGFiYXNlIGZpZWxkIHRoYXQgb3ducyB0aGUgcmVsYXRpb25zaGlwLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDE5IHIxYzMtdDE5Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjZjMS10MTkiIGhlYWRlcnM9InIxYzEtdDE5Ij5PcmRlciBCeTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDE5IHIxYzItdDE5Ij5TcGVjaWZ5IHRoZSBkZWZhdWx0IG9yZGVyIGZvciBvYmplY3RzIHJldHVybmVkIGZyb20gYSBxdWVyeS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0RBRElIIj4iT3JkZXIgQnkiPC9hPiBmb3IgZGV0YWlscy4KLTx1bD4KLTxsaT4KLTxwPk5vIG9yZGVyaW5nPC9wPgotPC9saT4KLTxsaT4KLTxwPlByaW1hcnkga2V5PC9wPgotPC9saT4KLTxsaT4KLTxwPkN1c3RvbTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MTkgcjFjMy10MTkiPk5vIG9yZGVyaW5nPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPGxpPgotPHA+VXNlIHRoaXMgdGFibGUgdG8gY29tcGxldGUgdGhlIGZpZWxkcyBpbiB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDExLmh0bSNDQUNCQUVCQyI+Sm9pbiBUYWJsZSBJbmZvcm1hdGlvbjwvYT4gYXJlYSBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkpQQSBEZXRhaWxzPC9zcGFuPiB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgSm9pbiBUYWJsZSB0YWIgb2YgdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBKb2luIFRhYmxlIHRhYiBvZiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIzOCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyMCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDIwIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjAiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIwIiBoZWFkZXJzPSJyMWMxLXQyMCI+TmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIwIHIxYzItdDIwIj5OYW1lIG9mIHRoZSBqb2luIHRhYmxlIHRoYXQgY29udGFpbnMgdGhlIGZvcmVpZ24ga2V5IGNvbHVtbi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyMCByMWMzLXQyMCI+WW91IG11c3Qgc3BlY2lmeSB0aGUgam9pbiB0YWJsZSBvbiB0aGUgb3duaW5nIHNpZGUuCi08cD5CeSBkZWZhdWx0LCB0aGUgbmFtZSBpcyBhc3N1bWVkIHRvIGJlIHRoZSBwcmltYXJ5IHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGl0aWVzIGNvbmNhdGVuYXRlZCB3aXRoIGFuIHVuZGVyc2NvcmUuPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDIwIiBoZWFkZXJzPSJyMWMxLXQyMCI+Sm9pbiBDb2x1bW5zPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MjAgcjFjMi10MjAiPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+T3ZlcnJpZGUgRGVmYXVsdDwvc3Bhbj4sIHRoZW4gQWRkLCBFZGl0LCBvciBSZW1vdmUgdGhlIGpvaW4gY29sdW1ucy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyMCByMWMzLXQyMCI+QnkgZGVmYXVsdCwgdGhlIG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUgcHJpbWFyeSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnRpdGllcyBjb25jYXRlbmF0ZWQgd2l0aCBhbiB1bmRlcnNjb3JlLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQyMCIgaGVhZGVycz0icjFjMS10MjAiPkludmVyc2UgSm9pbiBDb2x1bW5zPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjAgcjFjMi10MjAiPlNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+T3ZlcnJpZGUgRGVmYXVsdDwvc3Bhbj4sIHRoZW4gQWRkLCBFZGl0LCBvciBSZW1vdmUgdGhlIGpvaW4gY29sdW1ucy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMCByMWMzLXQyMCI+QnkgZGVmYXVsdCwgdGhlIG1hcHBpbmcgaXMgYXNzdW1lZCB0byBoYXZlIGEgc2luZ2xlIGpvaW4uPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPGxpPgotPHA+VG8gYWRkIGEgbmV3IEpvaW4gb3IgSW52ZXJzZSBKb2luIENvbHVtbiwgY2xpY2sgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtYWN0aW9uIj5BZGQ8L3NwYW4+LjwvcD4KLTxwPlRvIGVkaXQgYW4gZXhpc3RpbmcgSm9pbiBvciBJbnZlcnNlIEpvaW4gQ29sdW1uLCBzZWxlY3QgdGhlIGZpZWxkIHRvIGFuZCBjbGljayA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC1hY3Rpb24iPkVkaXQ8L3NwYW4+LjwvcD4KLTwvbGk+Ci08L29sPgotPHA+RWNsaXBzZSBhZGRzIHRoZSBmb2xsb3dpbmcgYW5ub3RhdGlvbnMgdG8gdGhlIGZpZWxkOjwvcD4KLTxwcmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY2xhc3M9Im9hY19ub193YXJuIj4KLUBKb2luVGFibGUoam9pbkNvbHVtbnM9QEpvaW5Db2x1bW4obmFtZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0pPSU5fQ09MVU1OJmd0Ozwvc3Bhbj4iKSwgCi0gICAgbmFtZSA9ICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Sk9JTl9UQUJMRV9OQU1FJmd0Ozwvc3Bhbj4iKQotQE1hbnlUb01hbnkoY2FzY2FkZT1DYXNjYWRlVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Q0FTQ0FERV9UWVBFJmd0Ozwvc3Bhbj4sIGZldGNoPUZldGNoVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RkVUQ0hfVFlQRSZndDs8L3NwYW4+LAotICAgIHRhcmdldEVudGl0eT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFSR0VUX0VOVElUWSZndDs8L3NwYW4+LCBtYXBwZWRCeSA9ICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7TUFQUEVEX0JZJmd0Ozwvc3Bhbj4iKQotQE9yZGVyQnkoIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtPUkRFUl9CWSZndDs8L3NwYW4+IikKLQotPC9wcmU+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hcHBpbmcuaHRtI0JBQkRHQklKIj5NYXBwaW5nIGFuIGVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0jQkFCQkRKRkkiPlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3M8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMS5odG0jQkFCQkdGSkciPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTQuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE0Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyNWJiNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTQuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+TWFueS10by1vbmUgbWFwcGluZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDZaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iTWFueS10by1vbmUgbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkhGQUZKIiBuYW1lPSJCQUJIRkFGSiI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+TWFueS10by1vbmUgbWFwcGluZzwvaDE+Ci08cD48YSBpZD0ic3RocmVmMTMzIiBuYW1lPSJzdGhyZWYxMzMiPjwvYT48YSBpZD0ic3RocmVmMTM0IiBuYW1lPSJzdGhyZWYxMzQiPjwvYT48YSBpZD0ic3RocmVmMTM1IiBuYW1lPSJzdGhyZWYxMzUiPjwvYT48YSBpZD0ic3RocmVmMTM2IiBuYW1lPSJzdGhyZWYxMzYiPjwvYT5Vc2UgYSA8c3BhbiBjbGFzcz0iYm9sZCI+TWFueS10by1PbmU8L3NwYW4+IG1hcHBpbmcgdG8gZGVmaW5lcyBhIHNpbmdsZS12YWx1ZWQgYXNzb2NpYXRpb24gdG8gYW5vdGhlciBlbnRpdHkgY2xhc3MgdGhhdCBoYXMgbWFueS10by1vbmUgbXVsdGlwbGljaXR5LjwvcD4KLTxvbD4KLTxsaT4KLTxwPkluIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT4sIHNlbGVjdCB0aGUgZmllbGQgdG8gbWFwLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5SaWdodCBjbGljayB0aGUgZmllbGQgYW5kIHRoZW4gc2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5NYXAgQXMgJmd0OyBNYW55LXRvLU9uZTwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+IGRpc3BsYXlzIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgc2VsZWN0ZWQuPC9wPgotPC9saT4KLTxsaT4KLTxwPlVzZSB0aGlzIHRhYmxlIHRvIGNvbXBsZXRlIHRoZSA8YSBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNCSEZJSiI+R2VuZXJhbCBpbmZvcm1hdGlvbjwvYT4gZmllbGRzIEpQQSBEZXRhaWxzIHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGlvbiB0aGUgR2VuZXJhbCB0YWIgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpb24gdGhlIEdlbmVyYWwgdGFiIGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyMSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDIxIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjEiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIxIiBoZWFkZXJzPSJyMWMxLXQyMSI+TWFwcGluZyBFbnRpdHkgSHlwZXJsaW5rPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjEgcjFjMi10MjEiPkRlZmluZXMgbWFwcGluZyBhcyA8c3BhbiBjbGFzcz0iYm9sZCI+TWFueS10by1PbmU8L3NwYW4+LiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ATWFueVRvT25lPC9jb2RlPiBhbm5vdGF0aW9uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDIxIHIxYzMtdDIxIj5NYW55LXRvLU9uZTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyM2MxLXQyMSIgaGVhZGVycz0icjFjMS10MjEiPlRhcmdldCBFbnRpdHk8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyMSByMWMyLXQyMSI+VGhlIGVudGl0eSB0byB3aGljaCB0aGlzIGF0dHJpYnV0ZSBpcyBtYXBwZWQuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MjEgcjFjMy10MjEiPm51bGwKLTxwPllvdSBkbyBub3QgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIHRhcmdldCBlbnRpdHksIHNpbmNlIGl0IGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0eXBlIG9mIG9iamVjdCBiZWluZyByZWZlcmVuY2VkLjwvcD4KLTwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQyMSIgaGVhZGVycz0icjFjMS10MjEiPkZldGNoPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjEgcjFjMi10MjEiPkRlZmluZXMgaG93IGRhdGEgaXMgbG9hZGVkIGZyb20gdGhlIGRhdGFiYXNlLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDR0dHSEIiPiJGZXRjaCBUeXBlIjwvYT4gZm9yIGRldGFpbHMuCi08dWw+Ci08bGk+Ci08cD5FYWdlcjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5MYXp5PC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMSByMWMzLXQyMSI+RWFnZXI8L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjVjMS10MjEiIGhlYWRlcnM9InIxYzEtdDIxIj5DYXNjYWRlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjEgcjFjMi10MjEiPlNlZSA8YSBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNKQUlIQiI+IkNhc2NhZGUgVHlwZSI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RGVmYXVsdDwvcD4KLTwvbGk+Ci08bGk+Ci08cD5BbGw8L3A+Ci08L2xpPgotPGxpPgotPHA+UGVyc2lzdDwvcD4KLTwvbGk+Ci08bGk+Ci08cD5NZXJnZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5SZW1vdmU8L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDIxIHIxYzMtdDIxIj5EZWZhdWx0PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI2YzEtdDIxIiBoZWFkZXJzPSJyMWMxLXQyMSI+T3B0aW9uYWw8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNmMxLXQyMSByMWMyLXQyMSI+U3BlY2lmaWVzIGlmIHRoaXMgZmllbGQgaXMgY2FuIGJlIG51bGwuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MjEgcjFjMy10MjEiPlllczwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+PC9saT4KLTxsaT4KLTxwPlVzZSB0aGlzIHRhYmxlIHRvIGNvbXBsZXRlIHRoZSBmaWVsZHMgb24gdGhlIDxhIGhyZWY9InJlZmVyZW5jZTAxMi5odG0jQ0FDRkNFSkMiPkpvaW4gQ29sdW1ucyBJbmZvcm1hdGlvbjwvYT4gdGFiIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyMiI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDIyIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjIiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIyIiBoZWFkZXJzPSJyMWMxLXQyMiI+Sm9pbiBDb2x1bW48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyMiByMWMyLXQyMiI+PGEgaWQ9InN0aHJlZjEzNyIgbmFtZT0ic3RocmVmMTM3Ij48L2E+PGEgaWQ9InN0aHJlZjEzOCIgbmFtZT0ic3RocmVmMTM4Ij48L2E+U3BlY2lmeSBhIG1hcHBlZCBjb2x1bW4gZm9yIGpvaW5pbmcgYW4gZW50aXR5IGFzc29jaWF0aW9uLiBUaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ASm9pbkNvbHVtPC9jb2RlPiBhdHRyaWJ1dGUuCi08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIERlZmF1bHQ8L3NwYW4+LCB0aGVuIEFkZCwgRWRpdCwgb3IgUmVtb3ZlIHRoZSBqb2luIGNvbHVtbnMuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjIgcjFjMy10MjIiPkJ5IGRlZmF1bHQsIHRoZSBtYXBwaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSBhIHNpbmdsZSBqb2luLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+PC9saT4KLTwvb2w+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9ucyB0byB0aGUgZmllbGQ6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQEpvaW5UYWJsZShqb2luQ29sdW1ucz1ASm9pbkNvbHVtbihuYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Sk9JTl9DT0xVTU4mZ3Q7PC9zcGFuPiIpLCAKLSAgICBuYW1lID0gIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtKT0lOX1RBQkxFX05BTUUmZ3Q7PC9zcGFuPiIpCi1ATWFueVRvT25lKHRhcmdldEVudGl0eT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFSR0VUX0VOVElUWSZndDs8L3NwYW4+LCBmZXRjaD08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RkVUQ0hfVFlQRSZndDs8L3NwYW4+LCAKLSAgICBjYXNjYWRlPTxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtDQVNDQURFX1RZUEUmZ3Q7PC9zcGFuPikKLTwvcHJlPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI0JBQkJESkZJIj5VbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzPC9hPjxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDEuaHRtI0JBQkJHRkpHIj5VbmRlcnN0YW5kaW5nIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE1Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxNS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYzU4MzQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE1Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk9uZS10by1tYW55IG1hcHBpbmc8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ3WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ik9uZS10by1tYW55IG1hcHBpbmciIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJIR0VCRCIgbmFtZT0iQkFCSEdFQkQiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPk9uZS10by1tYW55IG1hcHBpbmc8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjEzOSIgbmFtZT0ic3RocmVmMTM5Ij48L2E+PGEgaWQ9InN0aHJlZjE0MCIgbmFtZT0ic3RocmVmMTQwIj48L2E+PGEgaWQ9InN0aHJlZjE0MSIgbmFtZT0ic3RocmVmMTQxIj48L2E+PGEgaWQ9InN0aHJlZjE0MiIgbmFtZT0ic3RocmVmMTQyIj48L2E+VXNlIGEgPHNwYW4gY2xhc3M9ImJvbGQiPk9uZS10by1NYW55IE1hcHBpbmc8L3NwYW4+IHRvIGRlZmluZSBhIHJlbGF0aW9uc2hpcCB3aXRoIG9uZS10by1tYW55IG11bHRpcGxpY2l0eS48L3A+Ci08b2w+Ci08bGk+Ci08cD5JbiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+LCBzZWxlY3QgdGhlIGZpZWxkIHRvIG1hcC48L3A+Ci08L2xpPgotPGxpPgotPHA+UmlnaHQtY2xpY2sgdGhlIGZpZWxkIGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIEFzICZndDsgT25lLXRvLW1hbnk8L3NwYW4+LiBUaGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPiBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHNlbGVjdGVkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDQkhGSUoiPkdlbmVyYWwgaW5mb3JtYXRpb248L2E+IGZpZWxkcyBKUEEgRGV0YWlscyB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIzOCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyMyI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDIzIj5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjMiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIzIiBoZWFkZXJzPSJyMWMxLXQyMyI+TWFwcGluZyBFbnRpdHkgVHlwZSBIeXBlcmxpbms8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyMyByMWMyLXQyMyI+RGVmaW5lcyBtYXBwaW5nIGFzIDxzcGFuIGNsYXNzPSJib2xkIj5PbmUtdG8tTWFueTwvc3Bhbj4uIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBPbmVUb01hbnk8L2NvZGU+IGFubm90YXRpb24uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjMgcjFjMy10MjMiPk9uZS10by1NYW55PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDIzIiBoZWFkZXJzPSJyMWMxLXQyMyI+VGFyZ2V0IEVudGl0eTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDIzIHIxYzItdDIzIj5UaGUgZW50aXR5IHRvIHdoaWNoIHRoaXMgYXR0cmlidXRlIGlzIG1hcHBlZC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyMyByMWMzLXQyMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDIzIiBoZWFkZXJzPSJyMWMxLXQyMyI+Q2FzY2FkZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDIzIHIxYzItdDIzIj5TZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDSkFJSEIiPiJDYXNjYWRlIFR5cGUiPC9hPiBmb3IgZGV0YWlscy4KLTx1bD4KLTxsaT4KLTxwPkRlZmF1bHQ8L3A+Ci08L2xpPgotPGxpPgotPHA+QWxsPC9wPgotPC9saT4KLTxsaT4KLTxwPlBlcnNpc3Q8L3A+Ci08L2xpPgotPGxpPgotPHA+TWVyZ2U8L3A+Ci08L2xpPgotPGxpPgotPHA+UmVtb3ZlPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyMyByMWMzLXQyMyI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDIzIiBoZWFkZXJzPSJyMWMxLXQyMyI+RmV0Y2g8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyMyByMWMyLXQyMyI+RGVmaW5lcyBob3cgZGF0YSBpcyBsb2FkZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFNlZSA8YSBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNHR0dIQiI+IkZldGNoIFR5cGUiPC9hPiBmb3IgZGV0YWlscy4KLTx1bD4KLTxsaT4KLTxwPkVhZ2VyPC9wPgotPC9saT4KLTxsaT4KLTxwPkxhenk8L3A+Ci08L2xpPgotPC91bD4KLTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI1YzEtdDIzIHIxYzMtdDIzIj5FYWdlcjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNmMxLXQyMyIgaGVhZGVycz0icjFjMS10MjMiPk1hcHBlZCBCeTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI2YzEtdDIzIHIxYzItdDIzIj5UaGUgZGF0YWJhc2UgZmllbGQgdGhhdCBvd25zIHRoZSByZWxhdGlvbnNoaXAuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjZjMS10MjMgcjFjMy10MjMiPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyN2MxLXQyMyIgaGVhZGVycz0icjFjMS10MjMiPk9yZGVyIEJ5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjdjMS10MjMgcjFjMi10MjMiPlNwZWNpZnkgdGhlIGRlZmF1bHQgb3JkZXIgZm9yIG9iamVjdHMgcmV0dXJuZWQgZnJvbSBhIHF1ZXJ5LiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDREFESUgiPiJPcmRlciBCeSI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+Tm8gb3JkZXJpbmc8L3A+Ci08L2xpPgotPGxpPgotPHA+UHJpbWFyeSBrZXk8L3A+Ci08L2xpPgotPGxpPgotPHA+Q3VzdG9tPC9wPgotPC9saT4KLTwvdWw+Ci08L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyN2MxLXQyMyByMWMzLXQyMyI+Tm8gb3JkZXJpbmc8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiIC0tPjwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgPGEgaHJlZj0icmVmZXJlbmNlMDExLmh0bSNDQUNCQUVCQyI+Sm9pbiBUYWJsZSBJbmZvcm1hdGlvbjwvYT4gZmllbGRzIGluIHRoZSBKUEEgRGV0YWlscyB2aWV3LjwvcD4KLTxkaXYgY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCI+Ci08dGFibGUgY2xhc3M9IlJ1bGVJbmZvcm1hbCIgdGl0bGU9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgSm9pbiBUYWJsZSB0YWIgb2YgdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBKb2luIFRhYmxlIHRhYiBvZiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSIzOCUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyNCI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDI0Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjQiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDI0IiBoZWFkZXJzPSJyMWMxLXQyNCI+TmFtZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI0IHIxYzItdDI0Ij5OYW1lIG9mIHRoZSBqb2luIHRhYmxlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjQgcjFjMy10MjQiPkJ5IGRlZmF1bHQsIHRoZSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIHByaW1hcnkgdGFibGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW50aXRpZXMgY29uY2F0ZW5hdGVkIHdpdGggYW4gdW5kZXJzY29yZS48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjNjMS10MjQiIGhlYWRlcnM9InIxYzEtdDI0Ij5Kb2luIENvbHVtbnM8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNCByMWMyLXQyNCI+U3BlY2lmeSB0d28gb3IgbW9yZSBqb2luIGNvbHVtbnMgKHRoYXQgaXMsIGEgcHJpbWFyeSBrZXkpLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDI0IHIxYzMtdDI0Ij48YnIgLz48L3RkPgotPC90cj4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjRjMS10MjQiIGhlYWRlcnM9InIxYzEtdDI0Ij5JbnZlcnNlIEpvaW4gQ29sdW1uczwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDI0IHIxYzItdDI0Ij5UaGUgam9pbiBjb2x1bW4gb24gdGhlIG93bmVkIChvciBpbnZlcnNlKSBzaWRlIG9mIHRoZSBhc3NvY2lhdGlvbjogdGhlIG93bmVkIGVudGl0eSdzIHByaW1hcnkga2V5IGNvbHVtbi48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNGMxLXQyNCByMWMzLXQyNCI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPC9vbD4KLTxwPkVjbGlwc2UgYWRkcyB0aGUgZm9sbG93aW5nIGFubm90YXRpb25zIHRvIHRoZSBmaWVsZDo8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci1AT25lVG9NYW55KHRhcmdldEVudGl0eT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFSR0VUX0VOVElUWSZndDs8L3NwYW4+KQotQENvbHVtbihuYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Q09MVU1OJmd0Ozwvc3Bhbj4iKQotCi0KLUBPbmVUb01hbnkodGFyZ2V0RW50aXR5PTxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtUQVJHRVRfRU5USVRZJmd0Ozwvc3Bhbj4uY2xhc3MsIGNhc2NhZGU9Q2FzY2FkZVR5cGUuPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NBU0NBREVfVFlQRSZndDs8L3NwYW4+LCAKLSAgICBmZXRjaCA9IEZldGNoVHlwZS48c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7RkVUQ0hfVFlQRSZndDs8L3NwYW4+LCBtYXBwZWRCeSA9ICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7TUFQUEVEX0JZJmd0Ozwvc3Bhbj4iKUBPcmRlckJ5KCI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7T1JERVJfQlkmZ3Q7PC9zcGFuPiIpCi1ASm9pblRhYmxlKG5hbWU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtKT0lOX1RBQkxFX05BTUUmZ3Q7PC9zcGFuPiIsIGpvaW5Db2x1bW5zPUBKb2luQ29sdW1uKG5hbWU9Ci0gICAgIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtKT0lOX0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0pPSU5fQ09MVU1OX1JFRkVSRU5DRURfQ09MVU1OJmd0Ozwvc3Bhbj4iKSwgCi0gICAgaW52ZXJzZUpvaW5Db2x1bW5zPUBKb2luQ29sdW1uKG5hbWU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtJTlZFUlNFX0pPSU5fQ09MVU1OX05BTUUmZ3Q7PC9zcGFuPiIsIAotICAgIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7SU5WRVJTRV9KT0lOX0NPTFVNTl9SRUZFUkVOQ0VEX0NPTFVNTiZndDs8L3NwYW4+IikpCi0KLTwvcHJlPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+TWFwcGluZyBhbiBlbnRpdHk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsci5wbmciIGFsdD0iUmVsYXRlZCByZWZlcmVuY2UiIHRpdGxlPSJSZWxhdGVkIHJlZmVyZW5jZSIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+PGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI0JBQkJESkZJIj5VbmRlcnN0YW5kaW5nIE9SIG1hcHBpbmdzPC9hPjxiciAvPgotPGEgaHJlZj0iY29uY2VwdHMwMDEuaHRtI0JBQkJHRkpHIj5VbmRlcnN0YW5kaW5nIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEk8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE2Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxNi5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMDY3N2QuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE2Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPk9uZS10by1vbmUgbWFwcGluZzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NDdaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iT25lLXRvLW9uZSBtYXBwaW5nIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCRkhCQ0oiIG5hbWU9IkJBQkZIQkNKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDIiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5PbmUtdG8tb25lIG1hcHBpbmc8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjE0MyIgbmFtZT0ic3RocmVmMTQzIj48L2E+PGEgaWQ9InN0aHJlZjE0NCIgbmFtZT0ic3RocmVmMTQ0Ij48L2E+PGEgaWQ9InN0aHJlZjE0NSIgbmFtZT0ic3RocmVmMTQ1Ij48L2E+PGEgaWQ9InN0aHJlZjE0NiIgbmFtZT0ic3RocmVmMTQ2Ij48L2E+VXNlIGEgPHNwYW4gY2xhc3M9ImJvbGQiPk9uZS10by1PbmUgTWFwcGluZzwvc3Bhbj4gdG8gZGVmaW5lIGEgcmVsYXRpb25zaGlwIHdpdGggb25lLXRvLW1hbnkgbXVsdGlwbGljaXR5LjwvcD4KLTxvbD4KLTxsaT4KLTxwPkluIHRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT4sIHNlbGVjdCB0aGUgZmllbGQgdG8gbWFwLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5SaWdodC1jbGljayB0aGUgZmllbGQgYW5kIHRoZW4gc2VsZWN0IDxzcGFuIGNsYXNzPSJib2xkIj5NYXAgQXMgJmd0OyBPbmUtdG8tT25lPC9zcGFuPi4gVGhlIDxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT4gZGlzcGxheXMgdGhlIHByb3BlcnRpZXMgZm9yIHRoZSBzZWxlY3RlZC48L3A+Ci08L2xpPgotPGxpPgotPHA+VXNlIHRoaXMgdGFibGUgdG8gY29tcGxldGUgdGhlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0JIRklKIj5HZW5lcmFsIGluZm9ybWF0aW9uPC9hPiBmaWVsZHMgaW4gdGhlIEpQQSBEZXRhaWxzIHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyNSI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDI1Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjUiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+TWFwcGVkIEVudGl0eSBIeXBlcmxpbms8L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyNSByMWMyLXQyNSI+RGVmaW5lcyBtYXBwaW5nIGFzIDxzcGFuIGNsYXNzPSJib2xkIj5PbmUtdG8tT25lPC9zcGFuPi4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgPGNvZGU+QE9uZVRvT25lPC9jb2RlPiBhbm5vdGF0aW9uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI1IHIxYzMtdDI1Ij5PbmUtdG8tT25lPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+VGFyZ2V0IEVudGl0eTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIzYzEtdDI1IHIxYzItdDI1Ij5UaGUgZW50aXR5IHRvIHdoaWNoIHRoaXMgYXR0cmlidXRlIGlzIG1hcHBlZC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNSByMWMzLXQyNSI+bnVsbAotPHA+WW91IGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgdGFyZ2V0IGVudGl0eSwgc2luY2UgaXQgY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIHR5cGUgb2Ygb2JqZWN0IGJlaW5nIHJlZmVyZW5jZWQuPC9wPgotPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI0YzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+RmV0Y2ggVHlwZTwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InI0YzEtdDI1IHIxYzItdDI1Ij5EZWZpbmVzIGhvdyBkYXRhIGlzIGxvYWRlZCBmcm9tIHRoZSBkYXRhYmFzZS4gU2VlIDxhIGhyZWY9InJlZl9tYXBwaW5nX2dlbmVyYWwuaHRtI0NBQ0dHR0hCIj4iRmV0Y2ggVHlwZSI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RWFnZXI8L3A+Ci08L2xpPgotPGxpPgotPHA+TGF6eTwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjUgcjFjMy10MjUiPkVhZ2VyPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InI1YzEtdDI1IiBoZWFkZXJzPSJyMWMxLXQyNSI+TWFwcGVkIEJ5PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjUgcjFjMi10MjUiPlRoZSBkYXRhYmFzZSBmaWVsZCB0aGF0IG93bnMgdGhlIHJlbGF0aW9uc2hpcC48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyNWMxLXQyNSByMWMzLXQyNSI+PGJyIC8+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT4KLTxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIiAtLT48L2xpPgotPGxpPgotPHA+VXNlIHRoaXMgdGFibGUgdG8gY29tcGxldGUgdGhlIDxhIGhyZWY9InJlZmVyZW5jZTAxMi5odG0jQ0FDRkNFSkMiPkpvaW4gQ29sdW1ucyBJbmZvcm1hdGlvbjwvYT4gZmllbGRzIGluIHRoZSA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC10aXRsZSI+SlBBIERldGFpbHM8L3NwYW4+IHZpZXcuPC9wPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIHN1bW1hcnk9IlRoaXMgdGFibGUgbGlzdHMgdGhlIGZpZWxkcyBpbiB0aGUgUGVyc2lzdGVuY2UgUHJvcGVydGllcyB2aWV3IGZvciB0aGlzIG1hcHBpbmcuIiBkaXI9Imx0ciIgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgZnJhbWU9ImJvcmRlciIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTxjb2wgd2lkdGg9IjE5JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08Y29sIHdpZHRoPSI0MSUiIC8+Ci08dGhlYWQ+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMxLXQyNiI+UHJvcGVydHk8L3RoPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzItdDI2Ij5EZXNjcmlwdGlvbjwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMy10MjYiPkRlZmF1bHQ8L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDI2IiBoZWFkZXJzPSJyMWMxLXQyNiI+Sm9pbiBDb2x1bW48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyMmMxLXQyNiByMWMyLXQyNiI+PGEgaWQ9InN0aHJlZjE0NyIgbmFtZT0ic3RocmVmMTQ3Ij48L2E+PGEgaWQ9InN0aHJlZjE0OCIgbmFtZT0ic3RocmVmMTQ4Ij48L2E+U3BlY2lmeSBhIG1hcHBlZCBjb2x1bW4gZm9yIGpvaW5pbmcgYW4gZW50aXR5IGFzc29jaWF0aW9uLiBUaGlzIGZpZWxkIGNvcnJlc3BvbmRzIHRvIHRoZSA8Y29kZT5ASm9pbkNvbHVtPC9jb2RlPiBhdHRyaWJ1dGUuCi08cD5TZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk92ZXJyaWRlIERlZmF1bHQ8L3NwYW4+LCB0aGVuIEFkZCwgRWRpdCwgb3IgUmVtb3ZlIHRoZSBqb2luIGNvbHVtbnMuPC9wPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MjYgcjFjMy10MjYiPkJ5IGRlZmF1bHQsIHRoZSBtYXBwaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSBhIHNpbmdsZSBqb2luLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+PC9saT4KLTwvb2w+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9ucyB0byB0aGUgZmllbGQ6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQE9uZVRvT25lKHRhcmdldEVudGl0eT08c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7VEFSR0VUX0VOVElUWSZndDs8L3NwYW4+LCBjYXNjYWRlPUNhc2NhZGVUeXBlLjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtDQVNDQURFX1RZUEUmZ3Q7PC9zcGFuPiwgCi0gICAgZmV0Y2ggPSBGZXRjaFR5cGUuPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0ZFVENIX1RZUEUmZ3Q7PC9zcGFuPiwgbWFwcGVkQnkgPSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O01BUFBFRF9CWSZndDs8L3NwYW4+IikKLUBKb2luQ29sdW1uKG5hbWU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtKT0lOX0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iLCByZWZlcmVuY2VkQ29sdW1uTmFtZT0KLSAgICAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0pPSU5fQ09MVU1OX1JFRkVSRU5DRURfQ09MVU1OJmd0Ozwvc3Bhbj4iLCBpbnNlcnRhYmxlID0gPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0lOU0VSVEFCTEUmZ3Q7PC9zcGFuPiwgCi0gICAgdXBkYXRhYmxlID0gPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1VQREFUQUJMRSZndDs8L3NwYW4+KQotCi08L3ByZT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSNCQUJCREpGSSI+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvYT48YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAxLmh0bSNCQUJCR0ZKRyI+VW5kZXJzdGFuZGluZyBFSkIgMy4wIEphdmEgUGVyc2lzdGVuY2UgQVBJPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxNy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTcuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDk1MjQ1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxNy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPlRyYW5zaWVudCBtYXBwaW5nPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0N1oiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJUcmFuc2llbnQgbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkhGSEVJIiBuYW1lPSJCQUJIRkhFSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+VHJhbnNpZW50IG1hcHBpbmc8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjE0OSIgbmFtZT0ic3RocmVmMTQ5Ij48L2E+PGEgaWQ9InN0aHJlZjE1MCIgbmFtZT0ic3RocmVmMTUwIj48L2E+PGEgaWQ9InN0aHJlZjE1MSIgbmFtZT0ic3RocmVmMTUxIj48L2E+PGEgaWQ9InN0aHJlZjE1MiIgbmFtZT0ic3RocmVmMTUyIj48L2E+VXNlIHRoZSBUcmFuc2llbnQgTWFwcGluZyB0byBzcGVjaWZ5IGEgZmllbGQgb2YgdGhlIGVudGl0eSBjbGFzcyB0aGF0IDxzcGFuIGNsYXNzPSJpdGFsaWMiPmlzIG5vdDwvc3Bhbj4gcGVyc2lzdGVudC48L3A+Ci08cD5UbyBjcmVhdGUgYSB0cmFuc2llbnQgbWFwcGluZzo8L3A+Ci08b2w+Ci08bGk+Ci08cD5JbiB0aGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX291dGxpbmUuaHRtI0JBQkVHR0ZFIj5KUEEgU3RydWN0dXJlIHZpZXc8L2E+LCBzZWxlY3QgdGhlIGZpZWxkIHRvIG1hcC48L3A+Ci08L2xpPgotPGxpPgotPHA+UmlnaHQtY2xpY2sgdGhlIGZpZWxkIGFuZCB0aGVuIHNlbGVjdCA8c3BhbiBjbGFzcz0iYm9sZCI+TWFwIEFzIFRyYW5zaWVudDwvc3Bhbj4uIFRoZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj5KUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcyk8L2E+IGRpc3BsYXlzIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgc2VsZWN0ZWQuPC9wPgotPC9saT4KLTwvb2w+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9uIHRvIHRoZSBmaWVsZDo8L3A+Ci08cHJlIHhtbDpzcGFjZT0icHJlc2VydmUiIGNsYXNzPSJvYWNfbm9fd2FybiI+Ci1AVHJhbnNpZW50Ci08L3ByZT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InRhc2tfbWFwcGluZy5odG0jQkFCREdCSUoiPk1hcHBpbmcgYW4gZW50aXR5PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPjxiciAvPgotPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbGMucG5nIiBhbHQ9IlJlbGF0ZWQgY29uY2VwdCIgdGl0bGU9IlJlbGF0ZWQgY29uY2VwdCIgLz48YnIgLz4KLTxiciAvPgotPGEgaHJlZj0iY29uY2VwdF9tYXBwaW5nLmh0bSNCQUJCREpGSSI+VW5kZXJzdGFuZGluZyBPUiBtYXBwaW5nczwvYT48YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRzMDAxLmh0bSNCQUJCR0ZKRyI+VW5kZXJzdGFuZGluZyBFSkIgMy4wIEphdmEgUGVyc2lzdGVuY2UgQVBJPC9hPjwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxOC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTguaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFiZDM5Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAxOC5odG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5WZXJzaW9uIG1hcHBpbmc8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ3WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlZlcnNpb24gbWFwcGluZyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkJBQkhJQklJIiBuYW1lPSJCQUJISUJJSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+VmVyc2lvbiBtYXBwaW5nPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYxNTMiIG5hbWU9InN0aHJlZjE1MyI+PC9hPjxhIGlkPSJzdGhyZWYxNTQiIG5hbWU9InN0aHJlZjE1NCI+PC9hPjxhIGlkPSJzdGhyZWYxNTUiIG5hbWU9InN0aHJlZjE1NSI+PC9hPjxhIGlkPSJzdGhyZWYxNTYiIG5hbWU9InN0aHJlZjE1NiI+PC9hPlVzZSBhIDxzcGFuIGNsYXNzPSJib2xkIj5WZXJzaW9uIE1hcHBpbmc8L3NwYW4+IHRvIHNwZWNpZnkgdGhlIGZpZWxkIHVzZWQgZm9yIG9wdGltaXN0aWMgbG9ja2luZy4gSWYgdGhlIGVudGl0eSBpcyBhc3NvY2lhdGVkIHdpdGggbXVsdGlwbGUgdGFibGVzLCB5b3Ugc2hvdWxkIHVzZSBhIHZlcnNpb24gbWFwcGluZyBvbmx5IHdpdGggdGhlIHByaW1hcnkgdGFibGUuIFlvdSBzaG91bGQgaGF2ZSBvbmx5IGEgc2luZ2xlIHZlcnNpb24gbWFwcGluZyBwZXIgcGVyc2lzdGVudCBlbnRpdHkuIFZlcnNpb24gbWFwcGluZ3MgbWF5IGJlIHVzZWQgb25seSB3aXRoIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIHR5cGVzOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxjb2RlPmludDwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+SW50ZWdlcjwvY29kZT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGNvZGU+c2hvcnQsIFNob3J0PC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5sb25nLCBMb25nPC9jb2RlPjwvcD4KLTwvbGk+Ci08bGk+Ci08cD48Y29kZT5UaW1lc3RhbXA8L2NvZGU+PC9wPgotPC9saT4KLTwvdWw+Ci08cD5UbyBjcmVhdGUgYSB2ZXJzaW9uIG1hcHBpbmc6PC9wPgotPG9sPgotPGxpPgotPHA+SW4gdGhlIDxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9vdXRsaW5lLmh0bSNCQUJFR0dGRSI+SlBBIFN0cnVjdHVyZSB2aWV3PC9hPiwgc2VsZWN0IHRoZSBmaWVsZCB0byBtYXAuPC9wPgotPC9saT4KLTxsaT4KLTxwPlJpZ2h0LWNsaWNrIHRoZSBmaWVsZCBhbmQgdGhlbiBzZWxlY3QgPHNwYW4gY2xhc3M9ImJvbGQiPk1hcCBBcyAmZ3Q7IFZlcnNpb248L3NwYW4+LiBUaGUgPGEgaHJlZj0icmVmX3BlcnNpc3RlbmNlX21hcF92aWV3Lmh0bSNCQUJJRkJBRiI+SlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpPC9hPiBkaXNwbGF5cyB0aGUgcHJvcGVydGllcyBmb3IgdGhlIHNlbGVjdGVkLjwvcD4KLTwvbGk+Ci08bGk+Ci08cD5Vc2UgdGhpcyB0YWJsZSB0byBjb21wbGV0ZSB0aGUgcmVtYWluaW5nIGZpZWxkcyBpbiB0aGUgSlBBIERldGFpbHMgdmlldy48L3A+Ci08ZGl2IGNsYXNzPSJpbmZ0YmxydWxlaW5mb3JtYWwiPgotPHRhYmxlIGNsYXNzPSJSdWxlSW5mb3JtYWwiIHRpdGxlPSJUaGlzIHRhYmxlIGxpc3RzIHRoZSBmaWVsZHMgaW4gdGhlIFBlcnNpc3RlbmNlIFByb3BlcnRpZXMgdmlldyBmb3IgdGhpcyBtYXBwaW5nLiIgc3VtbWFyeT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgZmllbGRzIGluIHRoZSBQZXJzaXN0ZW5jZSBQcm9wZXJ0aWVzIHZpZXcgZm9yIHRoaXMgbWFwcGluZy4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMTklIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTxjb2wgd2lkdGg9IjM4JSIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDI3Ij5Qcm9wZXJ0eTwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MjciPkRlc2NyaXB0aW9uPC90aD4KLTx0aCBhbGlnbj0ibGVmdCIgdmFsaWduPSJib3R0b20iIGlkPSJyMWMzLXQyNyI+RGVmYXVsdDwvdGg+Ci08L3RyPgotPC90aGVhZD4KLTx0Ym9keT4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRkIGFsaWduPSJsZWZ0IiBpZD0icjJjMS10MjciIGhlYWRlcnM9InIxYzEtdDI3Ij5NYXBwZWQgRW50aXR5IEh5cGVybGluazwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI3IHIxYzItdDI3Ij5EZWZpbmVzIHRoZSBtYXBwaW5nIGFzIFZlcnNpb24uIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIDxjb2RlPkBWZXJzaW9uPC9jb2RlPiBhbm5vdGF0aW9uLjwvdGQ+Ci08dGQgYWxpZ249ImxlZnQiIGhlYWRlcnM9InIyYzEtdDI3IHIxYzMtdDI3Ij5WZXJzaW9uPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDI3IiBoZWFkZXJzPSJyMWMxLXQyNyI+Q29sdW1uPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjNjMS10MjcgcjFjMi10MjciPlRoZSBkYXRhYmFzZSBjb2x1bW4gbWFwcGVkIHRvIHRoZSBlbnRpdHkgYXR0cmlidXRlLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDR0NCSEIiPiJDb2x1bW4iPC9hPiBmb3IgZGV0YWlscy48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyNyByMWMzLXQyNyI+QnkgZGVmYXVsdCwgdGhlIENvbHVtbiBpcyBhc3N1bWVkIHRvIGJlIG5hbWVkIGlkZW50aWNhbGx5IHRvIHRoZSBhdHRyaWJ1dGUgYW5kIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgPGNvZGU+SU5TRVJUPC9jb2RlPiBhbmQgPGNvZGU+VVBEQVRFPC9jb2RlPiBzdGF0ZW1lbnRzLjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNGMxLXQyNyIgaGVhZGVycz0icjFjMS10MjciPlRhYmxlPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjcgcjFjMi10MjciPk5hbWUgb2YgdGhlIGRhdGFiYXNlIHRhYmxlLiBUaGlzIG11c3QgYmUgdGhlIHByaW1hcnkgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGUncyBlbnRpdHkuPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjRjMS10MjcgcjFjMy10MjciPjxiciAvPjwvdGQ+Ci08L3RyPgotPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08dGQgYWxpZ249ImxlZnQiIGlkPSJyNWMxLXQyNyIgaGVhZGVycz0icjFjMS10MjciPlRlbXBvcmFsPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjcgcjFjMi10MjciPlNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhLiBTZWUgPGEgaHJlZj0icmVmX21hcHBpbmdfZ2VuZXJhbC5odG0jQ0FDRUFKR0QiPiJUZW1wb3JhbCI8L2E+IGZvciBkZXRhaWxzLgotPHVsPgotPGxpPgotPHA+RGF0ZTwvcD4KLTwvbGk+Ci08bGk+Ci08cD5UaW1lPC9wPgotPC9saT4KLTxsaT4KLTxwPlRpbWVzdGFtcDwvcD4KLTwvbGk+Ci08L3VsPgotPC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjVjMS10MjcgcjFjMy10MjciPjxiciAvPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+PC9saT4KLTwvb2w+Ci08cD5FY2xpcHNlIGFkZHMgdGhlIGZvbGxvd2luZyBhbm5vdGF0aW9ucyB0byB0aGUgZmllbGQ6PC9wPgotPHByZSB4bWw6c3BhY2U9InByZXNlcnZlIiBjbGFzcz0ib2FjX25vX3dhcm4iPgotQFZlcnNpb24KLUBDb2x1bW4odGFibGU9IjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtDT0xVTU5fVEFCTEUmZ3Q7PC9zcGFuPiIsIG5hbWU9IiZsdDs8c3BhbiBjbGFzcz0iaXRhbGljIj5DT0xVTU5fTkFNRTwvc3Bhbj4mZ3Q7IikKLQotPC9wcmU+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX21hcHBpbmcuaHRtI0JBQkRHQklKIj5NYXBwaW5nIGFuIGVudGl0eTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiPkpQQSBTdHJ1Y3R1cmUgdmlldzwvYT48YnIgLz4KLTxhIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiPkpQQSBEZXRhaWxzIHZpZXcgKGZvciBhdHRyaWJ1dGVzKTwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfbWFwcGluZy5odG0jQkFCQkRKRkkiPlVuZGVyc3RhbmRpbmcgT1IgbWFwcGluZ3M8L2E+PGJyIC8+Ci08YSBocmVmPSJjb25jZXB0czAwMS5odG0jQkFCQkdGSkciPlVuZGVyc3RhbmRpbmcgRUpCIDMuMCBKYXZhIFBlcnNpc3RlbmNlIEFQSTwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QyIiAtLT4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTkuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDE5Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViZGJmNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMTkuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5HZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0N1oiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJHZW5lcmF0aW5nIGVudGl0aWVzIGZyb20gdGFibGVzIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQkFCQkFHRkkiIG5hbWU9IkJBQkJBR0ZJIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPgotPGgxPkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXM8L2gxPgotPHA+PGEgaWQ9InN0aHJlZjE1NyIgbmFtZT0ic3RocmVmMTU3Ij48L2E+PGEgaWQ9InN0aHJlZjE1OCIgbmFtZT0ic3RocmVmMTU4Ij48L2E+VXNlIHRoaXMgcHJvY2VkdXJlIHRvIGdlbmVyYXRlIEphdmEgcGVyc2lzdGVudCBlbnRpdGllcyBmcm9tIGRhdGFiYXNlIHRhYmxlcy4gWW91IG11c3QgY3JlYXRlIGEgSlBBIHByb2plY3QgYW5kIGVzdGFibGlzaCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gPHNwYW4gY2xhc3M9Iml0YWxpYyI+YmVmb3JlPC9zcGFuPiBnZW5lcmF0aW5nIHBlcnNpc3RlbnQgZW50aXRpZXMuIFNlZSA8YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPiJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjxhIGlkPSJzdGhyZWYxNTkiIG5hbWU9InN0aHJlZjE1OSI+PC9hPjxhIGlkPSJzdGhyZWYxNjAiIG5hbWU9InN0aHJlZjE2MCI+PC9hPjwvcD4KLTxvbD4KLTxsaT4KLTxwPlJpZ2h0LWNsaWNrIHRoZSBKUEEgcHJvamVjdCBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPlByb2plY3QgRXhwbG9yZXI8L3NwYW4+IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtYWN0aW9uIj5KUEEgVG9vbHMgJmd0OyBHZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlczwvc3Bhbj4uPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTYxIiBuYW1lPSJzdGhyZWYxNjEiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5HZW5lcmF0aW5nIEVudGl0aWVzPC9wPgotPGltZyBzcmM9ImltZy9nZW5lcmF0ZV9lbnRpdGllcy5wbmciIGFsdD0iVXNpbmcgdGhlIEpQQSBUb29scyAmZ3Q7IEdlbmVyYXRlIEVudGl0aWVzIG1lbnUgb3B0aW9uLiIgdGl0bGU9IlVzaW5nIHRoZSBKUEEgVG9vbHMgJmd0OyBHZW5lcmF0ZSBFbnRpdGllcyBtZW51IG9wdGlvbi4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5PbiB0aGUgPGEgaHJlZj0icmVmX3NlbGVjdFRhYmxlcy5odG0jQ0lBSENHRUUiPlNlbGVjdCBUYWJsZXM8L2E+IHBhZ2UsIHNlbGVjdCB5b3VyIGRhdGFiYXNlIGNvbm5lY3Rpb24gYW5kIHNjaGVtYS48L3A+Ci08cD5UbyBjcmVhdGUgYSBuZXcgZGF0YWJhc2UgY29ubmVjdGlvbiwgY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCBjb25uZWN0aW9uPC9zcGFuPi48L3A+Ci08cD5JZiB5b3UgYXJlIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkIHRvIHRoZSBkYXRhYmFzZSwgdGhlIERhdGFiYXNlIENvbm5lY3Rpb24gcGFnZSBhcHBlYXJzLiBTZWxlY3QgeW91ciBkYXRhYmFzZSBjb25uZWN0aW9uIGFuZCBzY2hlbWEsIGFuZCBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+UmVjb25uZWN0PC9zcGFuPi48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYxNjIiIG5hbWU9InN0aHJlZjE2MiI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlNlbGVjdCBUYWJsZXM8L3A+Ci08aW1nIHNyYz0iaW1nL3NlbGVjdF90YWJsZXMucG5nIiBhbHQ9IiIgdGl0bGU9IiIgLz48YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImZpZ3VyZSIgLS0+PC9saT4KLTxsaT4KLTxwPkFmdGVyIHNlbGVjdGluZyBhIHNjaGVtYSwgc2VsZWN0IHRoZSB0YWJsZXMgZnJvbSB3aGljaCB0byBnZW5lcmF0ZSBKYXZhIHBlcnNpc3RlbnQgZW50aXRpZXMgYW5kIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+T24gdGhlIDxhIGhyZWY9InJlZl90YWJsZUFzc29jaWF0aW9ucy5odG0jQ0lBQ0RJQ0IiPlRhYmxlIEFzc29jaWF0aW9uczwvYT4gcGFnZSwgc2VsZWN0IHRoZSBhc3NvY2lhdGlvbnMgdG8gZ2VuZXJhdGUuIFlvdSBjYW4gc3BlY2lmeSB0byBnZW5lcmF0ZSBzcGVjaWZpYyByZWZlcmVuY2VzIGZvciBlYWNoIGFzc29jaWF0aW9uLjwvcD4KLTxwPlRvIGNyZWF0ZSBhIG5ldyBhc3NvY2lhdGlvbiwgY2xpY2sgPHNwYW4gY2xhc3M9ImJvbGQiPkFkZCBBc3NvY2lhdGlvbjwvc3Bhbj4uIFVzZSB0aGUgPGEgaHJlZj0icmVmX2NyZWF0ZV9uZXdfYXNzb2NpYXRpb25fd2l6YXJkLmh0bSNDSUFGR0hJRiI+Q3JlYXRlIE5ldyBBc3NvY2lhdGlvbjwvYT4gd2l6YXJkIHRvIGRlZmluZSB0aGUgYXNzb2NpYXRpb24uPC9wPgotPGRpdiBjbGFzcz0iZmlndXJlIj48YSBpZD0ic3RocmVmMTYzIiBuYW1lPSJzdGhyZWYxNjMiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5UYWJsZSBBc3NvY2lhdGlvbnM8L3A+Ci08aW1nIHNyYz0iaW1nL3RhYmxlX2Fzc29jaWF0aW9ucy5wbmciIGFsdD0iIiB0aXRsZT0iIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT48L2xpPgotPGxpPgotPHA+QWZ0ZXIgZWRpdGluZyB0aGUgdGFibGUgYXNzb2NpYXRpb25zLCBjbGljayA8c3BhbiBjbGFzcz0iYm9sZCI+TmV4dDwvc3Bhbj4uPC9wPgotPC9saT4KLTxsaT4KLTxwPk9uIHRoZSA8YSBocmVmPSJyZWZfY3VzdG9taXplRGVmYXVsdEVudGl0eUdlbmVyYXRpb24uaHRtI0NJQUVKREJFIj5DdXN0b21pemUgRGVmYXVsdCBFbnRpdHkgR2VuZXJhdGlvbjwvYT4gcGFnZSwgY3VzdG9taXplIHRoZSBtYXBwaW5nIGFuZCBjbGFzcyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBnZW5lcmF0ZWQgZW50aXR5LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjE2NCIgbmFtZT0ic3RocmVmMTY0Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+Q3VzdG9taXplIERlZmF1bHQgRW50aXR5IEdlbmVyYXRpb248L3A+Ci08aW1nIHNyYz0iaW1nL2N1c3RvbWl6ZV9kZWZhdWx0X2VudGl0eV9nZW5lcmF0aW9uLnBuZyIgYWx0PSIiIHRpdGxlPSIiIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5BZnRlciBjdXN0b21pemluZyB0aGUgbWFwcGluZ3MsIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5OZXh0PC9zcGFuPi48L3A+Ci08L2xpPgotPGxpPgotPHA+T24gdGhlIDxhIGhyZWY9InJlZl9jdXN0b21pekluZGl2aWR1YWxFbnRpdGllcy5odG0jQ0lBQ0lHRUUiPkN1c3RvbWl6ZSBJbmRpdmlkdWFsIEVudGl0aWVzPC9hPiBwYWdlLCByZXZpZXcgdGhlIG1hcHBpbmcgYW5kIGNsYXNzIGluZm9ybWF0aW9uIGZvciBlYWNoIGVudGl0eSB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkLCB0aGVuIGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5GaW5pc2g8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjE2NSIgbmFtZT0ic3RocmVmMTY1Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+Q3VzdG9taXplIEluZGl2aWR1YWwgRW50aXRpZXM8L3A+Ci08aW1nIHNyYz0iaW1nL2N1c3RvbWl6ZV9pbmRpdmlkdWFsX2VudGl0aWVzLnBuZyIgYWx0PSIiIHRpdGxlPSIiIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08L29sPgotPHA+RWNsaXBzZSBjcmVhdGVzIGEgSmF2YSBwZXJzaXN0ZW50IGVudGl0eSBmb3IgZWFjaCBkYXRhYmFzZSB0YWJsZS4gRWFjaCBlbnRpdHkgY29udGFpbnMgZmllbGRzIGJhc2VkIG9uIHRoZSB0YWJsZSdzIGNvbHVtbnMuIEVjbGlwc2Ugd2lsbCBhbHNvIGdlbmVyYXRlIGVudGl0eSByZWxhdGlvbnNoaXBzIChzdWNoIGFzIG9uZS10by1vbmUpIGJhc2VkIG9uIHRoZSB0YWJsZSBjb25zdHJhaW50cy4gPGEgaHJlZj0iI0NJSEpJSkpDIj5GaWd1cmU6IEdlbmVyYXRpbmcgRW50aXRpZXMgZnJvbSBUYWJsZXM8L2E+IGlsbHVzdHJhdGVzIGhvdyBFY2xpcHNlIGdlbmVyYXRlcyBlbnRpdGllcyBmcm9tIHRhYmxlcy48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJDSUhKSUpKQyIgbmFtZT0iQ0lISklKSkMiPjwvYT4KLTxwIGNsYXNzPSJ0aXRsZWluZmlndXJlIj5HZW5lcmF0aW5nIEVudGl0aWVzIGZyb20gVGFibGVzPC9wPgotPGltZyBzcmM9ImltZy90YWJsZV9lbnRpdHkucG5nIiBhbHQ9IlRoaXMgZmlndXJlIHNob3dzIHRoZSBFTVBMT1lFRSBhbmQgQUREUkVTUyBlbnRpdGllcyBnZW5lcmF0ZWQgZnJvbSBkYXRhYmFzZSB0YWJsZXMuIiB0aXRsZT0iVGhpcyBmaWd1cmUgc2hvd3MgdGhlIEVNUExPWUVFIGFuZCBBRERSRVNTIGVudGl0aWVzIGdlbmVyYXRlZCBmcm9tIGRhdGFiYXNlIHRhYmxlcy4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHQucG5nIiBhbHQ9IlJlbGF0ZWQgdGFzayIgdGl0bGU9IlJlbGF0ZWQgdGFzayIgLz48YnIgLz4KLTxwPjxhIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSNDSUhIRUpDSiI+Q3JlYXRpbmcgYSBuZXcgSlBBIHByb2plY3Q8L2E+PC9wPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI0JBQkpIQkNJIj5Qcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAmbmRhc2g7IEphdmEgUGVyc2lzdGVuY2UgT3B0aW9uczwvYT48L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMjAuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDIwLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5MGVjYi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMjAuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5HZW5lcmF0aW5nIHRhYmxlcyBmcm9tIGVudGl0aWVzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJHZW5lcmF0aW5nIHRhYmxlcyBmcm9tIGVudGl0aWVzIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0lISklHQkUiIG5hbWU9IkNJSEpJR0JFIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5HZW5lcmF0aW5nIHRhYmxlcyBmcm9tIGVudGl0aWVzPC9oMT4KLTxwPldoZW4gdXNpbmcgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0sIHlvdSBjYW4gY3JlYXRlIGEgRERMIHNjcmlwdCBmcm9tIHlvdXIgcGVyc2lzdGVudCBlbnRpdGllcy48L3A+Ci08ZGl2IGFsaWduPSJjZW50ZXIiPgotPGRpdiBjbGFzcz0iaW5mdGJsbm90ZSI+PGJyIC8+Ci08dGFibGUgY2xhc3M9Ik5vdGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIj4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+Ci08cCBjbGFzcz0ibm90ZXAxIj5Ob3RlOjwvcD4KLVRoZSBEREwgc2NyaXB0IHdpdGggRFJPUCBleGlzdGluZyB0YWJsZXMgb24gdGhlIGRhdGFiYXNlIGFuZCBDUkVBVEUgbmV3IHRhYmxlcywgYmFzZWQgb24gdGhlIGVudGl0aWVzIGluIHlvdXIgcHJvamVjdC48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPgotPGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJpbmZ0Ymxub3RlIiAtLT48L2Rpdj4KLTxwPlRvIGdlbmVyYXRlIGEgRERMIHNjcmlwdDo8L3A+Ci08cD5SaWdodC1jbGljayB0aGUgSlBBIHByb2plY3QgaW4gdGhlIDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LXRpdGxlIj5Qcm9qZWN0IEV4cGxvcmVyPC9zcGFuPiBhbmQgc2VsZWN0IDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LWFjdGlvbiI+SlBBIFRvb2xzICZndDsgR2VuZXJhdGUgVGFibGVzIGZyb20gRW50aXRpZXM8L3NwYW4+LjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWx0LnBuZyIgYWx0PSJSZWxhdGVkIHRhc2siIHRpdGxlPSJSZWxhdGVkIHRhc2siIC8+PGJyIC8+Ci08cD48YSBocmVmPSJ0YXNrX2NyZWF0ZV9qcGFfZW50aXR5Lmh0bSNCQUJGQkpCRyI+Q3JlYXRpbmcgYSBKUEEgRW50aXR5PC9hPjwvcD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxyLnBuZyIgYWx0PSJSZWxhdGVkIHJlZmVyZW5jZSIgdGl0bGU9IlJlbGF0ZWQgcmVmZXJlbmNlIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSNCQUJKSEJDSSI+UHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgJm5kYXNoOyBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnM8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDIxLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyMS5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjNhM2UuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDIxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VmFsaWRhdGluZyBtYXBwaW5ncyBhbmQgcmVwb3J0aW5nIHByb2JsZW1zPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJWYWxpZGF0aW5nIG1hcHBpbmdzIGFuZCByZXBvcnRpbmcgcHJvYmxlbXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJGQUlCQSIgbmFtZT0iQkFCRkFJQkEiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+Ci08aDE+VmFsaWRhdGluZyBtYXBwaW5ncyBhbmQgcmVwb3J0aW5nIHByb2JsZW1zPC9oMT4KLTxwPjxhIGlkPSJzdGhyZWYxNjYiIG5hbWU9InN0aHJlZjE2NiI+PC9hPjxhIGlkPSJzdGhyZWYxNjciIG5hbWU9InN0aHJlZjE2NyI+PC9hPjxhIGlkPSJzdGhyZWYxNjgiIG5hbWU9InN0aHJlZjE2OCI+PC9hPjxhIGlkPSJzdGhyZWYxNjkiIG5hbWU9InN0aHJlZjE2OSI+PC9hPkVycm9ycyBhbmQgd2FybmluZ3Mgb24gcGVyc2lzdGVudCBlbnRpdGllcyBhbmQgbWFwcGluZ3MgYXJlIGluZGljYXRlZCB3aXRoIGEgcmVkIGVycm9yIG9yIHllbGxvdyB3YXJuaW5nIG5leHQgdG8gdGhlIHJlc291cmNlIHdpdGggdGhlIGVycm9yLCBhcyB3ZWxsIGFzIHRoZSBwYXJlbnQgY29udGFpbmVycyB1cCB0byB0aGUgcHJvamVjdC48L3A+Ci08ZGl2IGNsYXNzPSJmaWd1cmUiPjxhIGlkPSJzdGhyZWYxNzAiIG5hbWU9InN0aHJlZjE3MCI+PC9hPgotPHAgY2xhc3M9InRpdGxlaW5maWd1cmUiPlNhbXBsZSBFcnJvcnMgYW5kIFdhcm5pbmdzPC9wPgotPGltZyBzcmM9ImltZy9lcnJvcl9zYW1wbGUucG5nIiBhbHQ9IlRoaXMgZmlndXJlIHNob3dzIHNhbXBsZSBlcnJvciBhbmQgd2FybmluZyBpY29ucyBpbiB0aGUgRXhwbG9yZXIgdmlldy4iIHRpdGxlPSJUaGlzIGZpZ3VyZSBzaG93cyBzYW1wbGUgZXJyb3IgYW5kIHdhcm5pbmcgaWNvbnMgaW4gdGhlIEV4cGxvcmVyIHZpZXcuIiAvPjxiciAvPjwvZGl2PgotPCEtLSBjbGFzcz0iZmlndXJlIiAtLT4KLTxwPlRoaXMgc2VjdGlvbiBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgZm9sbG93aW5nOjwvcD4KLTx1bD4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDIyLmh0bSNDSUhGRURFSSI+RXJyb3IgbWVzc2FnZXM8L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9InRhc2tzMDIzLmh0bSNDSUhHRUFJSiI+V2FybmluZyBtZXNzYWdlczwvYT48L3A+Ci08L2xpPgotPC91bD4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08cD48YSBocmVmPSIuLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jcHJidmlldy5odG0iPlByb2JsZW1zIHZpZXc8L2E+PC9wPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT48L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyMi5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMjIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTM5Zjc2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyMi5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkVycm9yIG1lc3NhZ2VzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJFcnJvciBtZXNzYWdlcyIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNJSEZFREVJIiBuYW1lPSJDSUhGRURFSSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QyIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+RXJyb3IgbWVzc2FnZXM8YSBpZD0ic3RocmVmMTcxIiBuYW1lPSJzdGhyZWYxNzEiPjwvYT48L2gxPgotPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGVycm9yIG1lc3NhZ2VzIChpbmNsdWRpbmcgaG93IHRvIHJlc29sdmUgdGhlIGlzc3VlKSB5b3UgbWF5IGVuY291bnRlciB3aGlsZSB3b3JraW5nIHdpdGggRGFsaS48L3A+Ci08YSBpZD0ic3RocmVmMTcyIiBuYW1lPSJzdGhyZWYxNzIiPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+QXR0cmlidXRlICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7QVRUUklCVVRFX19OQU1FJmd0Ozwvc3Bhbj4iIGhhcyBpbnZhbGlkIG1hcHBpbmcgdHlwZSBpbiB0aGlzIGNvbnRleHQ8L3A+Ci08cD5UaGUgbWFwcGVkIGF0dHJpYnV0ZSBpcyBpbnZhbGlkLiBFaXRoZXIgY2hhbmdlIHRoZSBtYXBwaW5nIHR5cGUgb3IgY2hhbmdlIHRoZSBlbnRpdHkgdHlwZS48L3A+Ci08cD5TZWUgPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+Ik1hcHBpbmcgYW4gZW50aXR5IjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGEgaWQ9InN0aHJlZjE3MyIgbmFtZT0ic3RocmVmMTczIj48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkF0dHJpYnV0ZSAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0FUVFJJQlVURV9OQU1FJmd0Ozwvc3Bhbj4iIGNhbm5vdCBiZSByZXNvbHZlZC48L3A+Ci08cD5EYWxpIGNhbm5vdCBtYXAgdGhlIGF0dHJpYnV0ZSB0byBhIGRhdGFiYXNlIHRhYmxlIGFuZCBjb2x1bW4uIFZlcmlmeSB0aGF0IHlvdSBkYXRhYmFzZSBjb25uZWN0aW9uIGluZm9ybWF0aW9uIGlzIGNvcnJlY3QuPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSNDSUhIRUpDSiI+IkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0IjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGEgaWQ9InN0aHJlZjE3NCIgbmFtZT0ic3RocmVmMTc0Ij48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkNsYXNzICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Q0xBU1NfTkFNRSZndDs8L3NwYW4+IiBpcyBub3QgYW5ub3RhdGVkIGFzIGEgcGVyc2lzdGVudCBjbGFzcy48L3A+Ci08cD5UaGUgY2xhc3MgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgYXMgYSBwZXJzaXN0ZW50IGNsYXNzLiBDb25maWd1cmUgdGhlIGNsYXNzIGFzIGFuIEVudGl0eSwgTWFwcGVkIFN1cGVyY2xhc3MsIG9yIEVtYmVkZGFibGUgcGVyc2lzdGVudCBlbnRpdHkuPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIjwvYT4uPC9wPgotPGEgaWQ9InN0aHJlZjE3NSIgbmFtZT0ic3RocmVmMTc1Ij48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkNvbHVtbiAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iIGNhbm5vdCBiZSByZXNvbHZlZC48L3A+Ci08cD5Zb3UgbWFwcGVkIGFuIGVudGl0eSdzIGZpZWxkIHRvIGFuIGluY29ycmVjdCBvciBpbnZhbGlkIGNvbHVtbiBpbiB0aGUgZGF0YWJhc2UgdGFibGUuIEJ5IGRlZmF1bHQsIERhbGkgd2lsbCBhdHRlbXB0IHRvIG1hcCBlYWNoIGZpZWxkIGluIHRoZSBlbnRpdHkgd2l0aCBhbiBpZGVudGljYWxseSBuYW1lZCByb3cgaW4gdGhlIGRhdGFiYXNlIHRhYmxlLiBJZiB0aGUgZmllbGQncyBuYW1lIGRpZmZlcnMgZnJvbSB0aGUgcm93J3MgbmFtZSwgeW91IG11c3QgZXhwbGljaXRseSBjcmVhdGUgdGhlIG1hcHBpbmcuPC9wPgotPHA+TWFwIHRoZSBmaWVsZCB0byBhIHZhbGlkIHJvdyBpbiB0aGUgZGF0YWJhc2UgdGFibGUgYXMgc2hvd24gaW4gPGEgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiI+Ik1hcHBpbmcgYW4gZW50aXR5IjwvYT4uPC9wPgotPGEgaWQ9InN0aHJlZjE3NiIgbmFtZT0ic3RocmVmMTc2Ij48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkR1cGxpY2F0ZSBjbGFzcyAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NMQVNTX05BTUUmZ3Q7PC9zcGFuPiIuPC9wPgotPHA+WW91IGNyZWF0ZWQgdG8gcGVyc2lzdGVuY2UgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIG5hbWUuIEVhY2ggSmF2YSBjbGFzcyBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4gU2VlIDxhIGhyZWY9InRhc2tfYWRkX3BlcnNpc3RlbmNlLmh0bSNCQUJISUNBSSI+IkFkZGluZyBwZXJzaXN0ZW5jZSB0byBhIGNsYXNzIjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGEgaWQ9InN0aHJlZjE3NyIgbmFtZT0ic3RocmVmMTc3Ij48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPkVudGl0eSBkb2VzIG5vdCBoYXZlIGFuIElkIG9yIEVtYmVkZGVkIElkLjwvcD4KLTxwPllvdSBjcmVhdGVkIGEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aG91dCBpZGVudGlmeWluZyBpdHMgcHJpbWFyeSBrZXkuIEEgcGVyc2lzdGVudCBlbnRpdHkgbXVzdCBoYXZlIGEgcHJpbWFyeSBrZXkgZmllbGQgZGVzaWduYXRlZCB3aXRoIGFuIDxjb2RlPkBJZDwvY29kZT4gb3IgPGNvZGU+QEVtYmVkZGVkSWQ8L2NvZGU+IGFubm90YXRpb24uPC9wPgotPHA+QWRkIGFuIElEIG1hcHBpbmcgdG8gdGhlIGVudGl0eSBhcyBzaG93biBpbiA8YSBocmVmPSJ0YXNrczAxMi5odG0jQkFCR0NCSEciPiJJRCBtYXBwaW5nIjwvYT4gb3IgPGEgaHJlZj0idGFza3MwMTEuaHRtI0NJSERJQUVFIj4iRW1iZWRkZWQgSUQgbWFwcGluZyI8L2E+LjwvcD4KLTxhIGlkPSJzdGhyZWYxNzgiIG5hbWU9InN0aHJlZjE3OCI+PC9hPgotPHAgY2xhc3M9InN1YmhlYWQyIj5NdWx0aXBsZSBwZXJzaXN0ZW5jZS54bWwgZmlsZXMgaW4gcHJvamVjdC48L3A+Ci08cD5Zb3UgY3JlYXRlZCBhIEpQQSBwcm9qZWN0IHdpdGggbW9yZSB0aGFuIG9uZSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuIEVhY2ggSlBBIHByb2plY3QgbXVzdCBjb250YWluIGEgPHNwYW4gY2xhc3M9Iml0YWxpYyI+c2luZ2xlPC9zcGFuPiA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfbWFuYWdlX3BlcnNpc3RlbmNlLmh0bSNDSUhEQUpJRCI+Ik1hbmFnaW5nIHRoZSBwZXJzaXN0ZW5jZS54bWwgZmlsZSI8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KLTxhIGlkPSJzdGhyZWYxNzkiIG5hbWU9InN0aHJlZjE3OSI+PC9hPgotPHAgY2xhc3M9InN1YmhlYWQyIj5ObyBwZXJzaXN0ZW5jZSB1bml0IGRlZmluZWQuPC9wPgotPHA+VGhlcmUgaXMgbm8gcGVyc2lzdGVuY2UgdW5pdCBkZWZpbmVkIGluIHRoZSA8Y29kZT5wZXJzaXN0ZW5jZS54bWw8L2NvZGU+IGZpbGUuIFVzZSB0aGUgJmx0O3BlcnNpc3RlbmNlLXVuaXQgbmFtZT0iPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O1BFUlNJU1RFTkNFX1VOSVRfTkFNRSZndDs8L3NwYW4+IiB0YWcgdG8gZGVmaW5lIHRoZSBwZXJzaXN0ZW50IHVuaXQuPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfbWFuYWdlX29ybS5odG0jQ0lIREdEQ0QiPiJNYW5hZ2luZyB0aGUgb3JtLnhtbCBmaWxlIjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGEgaWQ9InN0aHJlZjE4MCIgbmFtZT0ic3RocmVmMTgwIj48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPk5vIHBlcnNpc3RlbmNlLnhtbCBmaWxlIGluIHByb2plY3QuPC9wPgotPHA+WW91IGNyZWF0ZWQgYSBKUEEgcHJvamVjdCB3aXRob3V0IGEgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlLiBFYWNoIEpQQSBwcm9qZWN0IG11c3QgY29udGFpbiBhIDxzcGFuIGNsYXNzPSJpdGFsaWMiPnNpbmdsZTwvc3Bhbj4gPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlLjwvcD4KLTxwPlNlZSA8YSBocmVmPSJ0YXNrX21hbmFnZV9wZXJzaXN0ZW5jZS5odG0jQ0lIREFKSUQiPiJNYW5hZ2luZyB0aGUgcGVyc2lzdGVuY2UueG1sIGZpbGUiPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08YSBpZD0ic3RocmVmMTgxIiBuYW1lPSJzdGhyZWYxODEiPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+UmVmZXJlbmNlZCBjb2x1bW4gIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtDT0xVTU5fTkFNRSZndDs8L3NwYW4+IiBpbiBqb2luIGNvbHVtbiAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0NPTFVNTl9OQU1FJmd0Ozwvc3Bhbj4iIGNhbm5vdCBiZSByZXNvbHZlZC48L3A+Ci08cD5UaGUgY29sdW1uIHRoYXQgeW91IHNlbGVjdGVkIHRvIGpvaW4gYSByZWxhdGlvbnNoaXAgbWFwcGluZyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZGF0YWJhc2UgdGFibGUuIEVpdGhlciBzZWxlY3QgYSBkaWZmZXJlbnQgY29sdW1uIG9uIHRoZSA8YSBocmVmPSJyZWZlcmVuY2UwMTEuaHRtI0NBQ0JBRUJDIj5Kb2luIFRhYmxlIEluZm9ybWF0aW9uPC9hPiBvciBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb2x1bW4gb24gdGhlIGRhdGFiYXNlIHRhYmxlLjwvcD4KLTxwPlNlZSA8YSBocmVmPSJyZWZfcGVyc2lzdGVuY2VfbWFwX3ZpZXcuaHRtI0JBQklGQkFGIj4iSlBBIERldGFpbHMgdmlldyAoZm9yIGF0dHJpYnV0ZXMpIjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPGEgaWQ9InN0aHJlZjE4MiIgbmFtZT0ic3RocmVmMTgyIj48L2E+Ci08cCBjbGFzcz0ic3ViaGVhZDIiPlNjaGVtYSAiJmx0OzxzcGFuIGNsYXNzPSJpdGFsaWMiPlNDSEVNQV9OQU1FPC9zcGFuPiZndDsiIGNhbm5vdCBiZSByZXNvbHZlZCBmb3IgdGFibGUvam9pbiB0YWJsZSAiJmx0OzxzcGFuIGNsYXNzPSJpdGFsaWMiPlRBQkxFX05BTUU8L3NwYW4+Jmd0OyIuPC9wPgotPHA+RGVmaW5lIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHNjaGVtYSBpbmZvcm1hdGlvbiBpbiB0aGUgcGVyc2lzdGVuY2UgdW5pdC48L3A+Ci08cD5TZWUgPGEgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSNDSUhER0RDRCI+Ik1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08YSBpZD0ic3RocmVmMTgzIiBuYW1lPSJzdGhyZWYxODMiPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+VGFibGUgIjxzcGFuIGNsYXNzPSJpdGFsaWMiPiZsdDtUQUJMRV9OQU1FJmd0Ozwvc3Bhbj4iIGNhbm5vdCBiZSByZXNvbHZlZC48L3A+Ci08cD5Zb3UgYXNzb2NpYXRlZCBhIHBlcnNpc3RlbnQgZW50aXR5IHRvIGFuIGluY29ycmVjdCBvciBpbnZhbGlkIGRhdGFiYXNlIHRhYmxlLiBCeSBkZWZhdWx0LCBEYWxpIHdpbGwgYXR0ZW1wdCB0byBhc3NvY2lhdGUgZWFjaCBwZXJzaXN0ZW50IGVudGl0eSB3aXRoIGFuIGlkZW50aWNhbGx5IG5hbWVkIGRhdGFiYXNlIHRhYmxlLiBJZiB0aGUgZW50aXR5J3MgbmFtZSBkaWZmZXJzIGZyb20gdGhlIHRhYmxlJ3MgbmFtZSwgeW91IG11c3QgZXhwbGljaXRseSBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLjwvcD4KLTxwPkFzc29jaWF0ZSB0aGUgZW50aXR5IHdpdGggYSB2YWxpZCBkYXRhYmFzZSB0YWJsZSBhcyBzaG93biBpbiA8YSBocmVmPSJ0YXNrX2FkZF9wZXJzaXN0ZW5jZS5odG0jQkFCSElDQUkiPiJBZGRpbmcgcGVyc2lzdGVuY2UgdG8gYSBjbGFzcyI8L2E+LjwvcD4KLTxhIGlkPSJzdGhyZWYxODQiIG5hbWU9InN0aHJlZjE4NCI+PC9hPgotPHAgY2xhc3M9InN1YmhlYWQyIj5VbnJlc29sdmVkIGdlbmVyYXRvciAiPHNwYW4gY2xhc3M9Iml0YWxpYyI+Jmx0O0dFTkVSQVRPUl9OQU1FJmd0Ozwvc3Bhbj4iIGlzIGRlZmluZWQgaW4gcGVyc2lzdGVuY2UgdW5pdC48L3A+Ci08cD5Zb3UgY3JlYXRlZCBhIHBlcnNpc3RlbmNlIGVudGl0eSB0aGF0IHVzZXMgc2VxdWVuY2luZyBvciBhIHRhYmxlIGdlbmVyYXRvciwgYnV0IGRpZCBub3QgZGVmaW5lIHRoZSBnZW5lcmF0b3IgaW4gdGhlIHBlcnNpc3RlbmNlIHVuaXQuIEVpdGhlciBkZWZpbmUgdGhlIGdlbmVyYXRvciBieSB1c2luZyBhbiBhbm5vdGF0aW9uIG9yIGluY2x1ZGluZyBpdCBpbiB0aGUgWE1MIG1hcHBpbmcgZmlsZS48L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsYy5wbmciIGFsdD0iUmVsYXRlZCBjb25jZXB0IiB0aXRsZT0iUmVsYXRlZCBjb25jZXB0IiAvPjxiciAvPgotPHA+PGEgaHJlZj0iLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvY29uY2VwdHMvY3ByYnZpZXcuaHRtIj5Qcm9ibGVtcyB2aWV3PC9hPjwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDIiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyMy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGFza3MwMjMuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGE1YTg4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyMy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPldhcm5pbmcgbWVzc2FnZXM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjQ4WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9Ildhcm5pbmcgbWVzc2FnZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSUhHRUFJSiIgbmFtZT0iQ0lIR0VBSUoiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MiI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPldhcm5pbmcgbWVzc2FnZXM8L2gxPgotPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHdhcm5pbmcgbWVzc2FnZXMgKGluY2x1ZGluZyBob3cgdG8gcmVzb2x2ZSB0aGUgaXNzdWUpIHlvdSBtYXkgZW5jb3VudGVyIHdoaWxlIHdvcmtpbmcgd2l0aCBEYWxpLjwvcD4KLTxhIGlkPSJzdGhyZWYxODUiIG5hbWU9InN0aHJlZjE4NSI+PC9hPgotPHAgY2xhc3M9InN1YmhlYWQyIj5Db25uZWN0aW9uICI8c3BhbiBjbGFzcz0iaXRhbGljIj4mbHQ7Q09OTkVDVElPTl9OQU1FJmd0Ozwvc3Bhbj4iIGlzIG5vdCBhY3RpdmUuIE5vIHZhbGlkYXRpb24gd2lsbCBiZSBkb25lIGFnYWluc3QgdGhlIGRhdGEgc291cmNlLjwvcD4KLTxwPlRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIHlvdSBzcGVjaWZpZWQgdG8gdXNlIHdpdGggdGhlIEpQQSBwcm9qZWN0IGlzIG5vdCBhY3RpdmUuIFRoZSBKUEEgcHJvamVjdCByZXF1aXJlcyBhbiBhY3RpdmUgY29ubmVjdGlvbi48L3A+Ci08YSBpZD0ic3RocmVmMTg2IiBuYW1lPSJzdGhyZWYxODYiPjwvYT4KLTxwIGNsYXNzPSJzdWJoZWFkMiI+Tm8gY29ubmVjdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSBwcm9qZWN0LiBObyBkYXRhLXNwZWNpZmljIHZhbGlkYXRpb24gd2lsbCBiZSBwZXJmb3JtZWQuPC9wPgotPHA+WW91IGNyZWF0ZWQgYSBKUEEgcHJvamVjdCB3aXRob3V0IHNwZWNpZnlpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uLiBUaGUgSlBBIHByb2plY3QgcmVxdWlyZXMgYW4gYWN0aXZlIGNvbm5lY3Rpb24uPC9wPgotPHA+U2VlIDxhIGhyZWY9InRhc2tfY3JlYXRlX25ld19wcm9qZWN0Lmh0bSNDSUhIRUpDSiI+IkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0IjwvYT4gb3IgPGEgaHJlZj0idGFza3MwMjQuaHRtI0JBQkRCQ0JJIj4iTW9kaWZ5aW5nIHBlcnNpc3RlbnQgcHJvamVjdCBwcm9wZXJ0aWVzIjwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIHNwZWNpZnlpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uLjwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08cD48YSBocmVmPSIuLi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MudXNlci9jb25jZXB0cy9jcHJidmlldy5odG0iPlByb2JsZW1zIHZpZXc8L2E+PC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MiIgLS0+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDI0Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90YXNrczAyNC5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTY1N2IuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3Rhc2tzMDI0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+TW9kaWZ5aW5nIHBlcnNpc3RlbnQgcHJvamVjdCBwcm9wZXJ0aWVzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo0OFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJNb2RpZnlpbmcgcGVyc2lzdGVudCBwcm9qZWN0IHByb3BlcnRpZXMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJCQUJEQkNCSSIgbmFtZT0iQkFCREJDQkkiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPk1vZGlmeWluZyBwZXJzaXN0ZW50IHByb2plY3QgcHJvcGVydGllczwvaDE+Ci08cD5FYWNoIHBlcnNpc3RlbnQgcHJvamVjdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24uIFRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSBjb25uZWN0aW9uLCBjbGljayA8c3BhbiBjbGFzcz0iZ3VpLW9iamVjdC1hY3Rpb24iPkRhdGFiYXNlIENvbm5lY3Rpb248L3NwYW4+IHVzZSB0aGUgTmV3IENvbm5lY3Rpb24gd2l6YXJkLjwvcD4KLTxwPlVzZSB0aGlzIHByb2NlZHVyZSB0byBtb2RpZnkgdGhlIHZlbmRlci1zcGVjaWZpYyBwbGF0Zm9ybSBhbmQgZGF0YWJhc2UgY29ubmVjdGlvbiBhc3NvY2lhdGVkIHdpdGggeW91ciBKUEEgcHJvamVjdC48L3A+Ci08b2w+Ci08bGk+Ci08cD5SaWdodC1jbGljayB0aGUgcHJvamVjdCBpbiB0aGUgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtdGl0bGUiPkV4cGxvcmVyPC9zcGFuPiB2aWV3IGFuZCBzZWxlY3QgPHNwYW4gY2xhc3M9Imd1aS1vYmplY3QtYWN0aW9uIj5Qcm9wZXJ0aWVzPC9zcGFuPi4gVGhlIFByb3BlcnRpZXMgcGFnZSBhcHBlYXJzLjwvcD4KLTxkaXYgY2xhc3M9ImZpZ3VyZSI+PGEgaWQ9InN0aHJlZjE4NyIgbmFtZT0ic3RocmVmMTg3Ij48L2E+Ci08cCBjbGFzcz0idGl0bGVpbmZpZ3VyZSI+VGhlIFByb3BlcnRpZXMgUGFnZTwvcD4KLTxpbWcgc3JjPSJpbWcvcHJvamVjdF9wcm9wZXJ0aWVzX3Rhc2tzLnBuZyIgYWx0PSJUaGUgUGVyc2lzdGVuY2UgcGFnZS4iIHRpdGxlPSJUaGUgUGVyc2lzdGVuY2UgcGFnZS4iIC8+PGJyIC8+PC9kaXY+Ci08IS0tIGNsYXNzPSJmaWd1cmUiIC0tPjwvbGk+Ci08bGk+Ci08cD5Db21wbGV0ZSBlYWNoIGZpZWxkIG9uIHRoZSA8YSBocmVmPSJyZWZfcHJvamVjdF9wcm9wZXJ0aWVzLmh0bSNCQUJKSEJDSSI+UHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgJm5kYXNoOyBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnM8L2E+IGNsaWNrIDxzcGFuIGNsYXNzPSJib2xkIj5PSzwvc3Bhbj4uPC9wPgotPC9saT4KLTwvb2w+Ci08cD4mbmJzcDs8L3A+Ci08aW1nIHNyYz0iaW1nL25ncmVsdC5wbmciIGFsdD0iUmVsYXRlZCB0YXNrIiB0aXRsZT0iUmVsYXRlZCB0YXNrIiAvPjxiciAvPgotPGJyIC8+Ci08YSBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiPkNyZWF0aW5nIGEgbmV3IEpQQSBwcm9qZWN0PC9hPgotPHA+Jm5ic3A7PC9wPgotPGltZyBzcmM9ImltZy9uZ3JlbHIucG5nIiBhbHQ9IlJlbGF0ZWQgcmVmZXJlbmNlIiB0aXRsZT0iUmVsYXRlZCByZWZlcmVuY2UiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI0JBQkpIQkNJIj5Qcm9qZWN0IFByb3BlcnRpZXMgcGFnZSAmbmRhc2g7IEphdmEgUGVyc2lzdGVuY2UgT3B0aW9uczwvYT4KLTxwPiZuYnNwOzwvcD4KLTxpbWcgc3JjPSJpbWcvbmdyZWxjLnBuZyIgYWx0PSJSZWxhdGVkIGNvbmNlcHQiIHRpdGxlPSJSZWxhdGVkIGNvbmNlcHQiIC8+PGJyIC8+Ci08YnIgLz4KLTxhIGhyZWY9ImNvbmNlcHRfcGVyc2lzdGVuY2UuaHRtI0JBQkNBSElDIj5VbmRlcnN0YW5kaW5nIEphdmEgcGVyc2lzdGVuY2U8L2E+PC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3RpcHNfYW5kX3RyaWNrcy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGlwc19hbmRfdHJpY2tzLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmNjMwMC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdGlwc19hbmRfdHJpY2tzLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+VGlwcyBhbmQgdHJpY2tzPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1NFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSIgVGlwcyBhbmQgdHJpY2tzIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0hESEdIQkYiIG5hbWU9IkNIREhHSEJGIj48L2E+PC9wPgotPGgxPlRpcHMgYW5kIHRyaWNrczwvaDE+Ci08cD5UaGUgZm9sbG93aW5nIHRpcHMgYW5kIHRyaWNrcyBnaXZlIHNvbWUgaGVscGZ1bCBpZGVhcyBmb3IgaW5jcmVhc2luZyB5b3VyIHByb2R1Y3Rpdml0eS48L3A+Ci08dWw+Ci08bGk+Ci08cD48YSBocmVmPSIjQkFCRklJSEEiPjxzcGFuIGNsYXNzPSJib2xkIj5EYXRhYmFzZSBDb25uZWN0aW9uczwvc3Bhbj48L2E+PC9wPgotPC9saT4KLTxsaT4KLTxwPjxhIGhyZWY9IiNCQUJDSEFIRiI+PHNwYW4gY2xhc3M9ImJvbGQiPlNjaGVtYS1iYXNlZCBwZXJzaXN0ZW5jZS54bWw8L3NwYW4+PC9hPjwvcD4KLTwvbGk+Ci08L3VsPgotPGRpdiBjbGFzcz0iaW5mdGJscnVsZWluZm9ybWFsIj4KLTx0YWJsZSBjbGFzcz0iUnVsZUluZm9ybWFsIiB0aXRsZT0iVGhpcyB0YWJsZSBsaXN0cyB0aGUgdGlwcyBhbmQgdHJpY2tzIGluIHRoaXMgY2F0ZWdvcnkuIiBzdW1tYXJ5PSJUaGlzIHRhYmxlIGxpc3RzIHRoZSB0aXBzIGFuZCB0cmlja3MgaW4gdGhpcyBjYXRlZ29yeS4iIGRpcj0ibHRyIiBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBmcmFtZT0iYm9yZGVyIiBydWxlcz0iYWxsIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPgotPGNvbCB3aWR0aD0iMjclIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0aGVhZD4KLTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPHRoIGFsaWduPSJsZWZ0IiB2YWxpZ249ImJvdHRvbSIgaWQ9InIxYzEtdDIiPlRpcDwvdGg+Ci08dGggYWxpZ249ImxlZnQiIHZhbGlnbj0iYm90dG9tIiBpZD0icjFjMi10MiI+RGVzY3JpcHRpb248L3RoPgotPC90cj4KLTwvdGhlYWQ+Ci08dGJvZHk+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIyYzEtdDIiIGhlYWRlcnM9InIxYzEtdDIiPjxhIGlkPSJCQUJGSUlIQSIgbmFtZT0iQkFCRklJSEEiPjwvYT48c3BhbiBjbGFzcz0iYm9sZCI+RGF0YWJhc2UgQ29ubmVjdGlvbnM8L3NwYW4+PC90ZD4KLTx0ZCBhbGlnbj0ibGVmdCIgaGVhZGVycz0icjJjMS10MiByMWMyLXQyIj5XaGVuIHN0YXJ0aW5nIGEgbmV3IHdvcmtiZW5jaCBzZXNzaW9uLCBiZSBzdXJlIHRvIDxhIGhyZWY9Ii4uL29yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZG9jLnVzZXIvZG9jL2h0bWwvYXNjMTIyOTcwMDM0MzM1Mi5odG1sIj5yZWNvbm5lY3QgdG8geW91ciBkYXRhYmFzZTwvYT4gKGlmIHlvdSBhcmUgd29ya2luZyBvbmxpbmUpLiBUaGlzIGFsbG93cyBEYWxpIHRvIHByb3ZpZGUgZGF0YWJhc2UtcmVsYXRlZCBtYXBwaW5nIGFzc2lzdGFuY2UgYW5kIHZhbGlkYXRpb24uPC90ZD4KLTwvdHI+Ci08dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTx0ZCBhbGlnbj0ibGVmdCIgaWQ9InIzYzEtdDIiIGhlYWRlcnM9InIxYzEtdDIiPjxhIGlkPSJCQUJDSEFIRiIgbmFtZT0iQkFCQ0hBSEYiPjwvYT48c3BhbiBjbGFzcz0iYm9sZCI+U2NoZW1hLWJhc2VkIHBlcnNpc3RlbmNlLnhtbDwvc3Bhbj48L3RkPgotPHRkIGFsaWduPSJsZWZ0IiBoZWFkZXJzPSJyM2MxLXQyIHIxYzItdDIiPklmIHlvdSBhcmUgYmVoaW5kIGEgZmlyZXdhbGwsIHlvdSBtYXkgbmVlZCB0byBjb25maWd1cmUgeW91ciBFY2xpcHNlIHdvcmtzcGFjZSBwcm94eSBpbiB0aGUgPGEgaHJlZj0iLi4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLnVzZXIvcmVmZXJlbmNlL3JlZi03Mi5odG0iPlByZWZlcmVuY2VzIGRpYWxvZzwvYT4gKDxzcGFuIGNsYXNzPSJndWktb2JqZWN0LWFjdGlvbiI+UHJlZmVyZW5jZXMgJmd0OyBJbnRlcm5ldCAmZ3Q7IFByb3h5IFNldHRpbmdzPC9zcGFuPikgdG8gcHJvcGVybHkgdmFsaWRhdGUgYSBzY2hlbWEtYmFzZWQgPGNvZGU+cGVyc2lzdGVuY2UueG1sPC9jb2RlPiBmaWxlLjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+Ci08YnIgLz48L2Rpdj4KLTwhLS0gY2xhc3M9ImluZnRibHJ1bGVpbmZvcm1hbCIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3RvYy54bWwgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdG9jLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI1MWNjOS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+Ci08IS0tIFVzZXIgR3VpZGUgLS0+Ci0gIDx0b2MgbGFiZWw9IkRhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBVc2VyIEd1aWRlIj4KLSAgICA8dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bSIgbGFiZWw9IkdldHRpbmcgc3RhcnRlZCI+Ci0gICAgICA8dG9waWMgaHJlZj0iZ2V0dGluZ19zdGFydGVkMDAxLmh0bSNCQUJFRkhDRCIgbGFiZWw9IlJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbGF0aW9uIiAvPgotICAgICAgPHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwMi5odG0jQkFCSUdDSkEiIGxhYmVsPSJEYWxpIHF1aWNrIHN0YXJ0Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwMy5odG0jQkFCREZIREEiIGxhYmVsPSJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9ImdldHRpbmdfc3RhcnRlZDAwNC5odG0jQkFCRkdEREciIGxhYmVsPSJDcmVhdGluZyBhIEphdmEgcGVyc2lzdGVudCBlbnRpdHkgd2l0aCBwZXJzaXN0ZW50IGZpZWxkcyIgLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgPC90b3BpYz4KLSAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMuaHRtIiBsYWJlbD0iIENvbmNlcHRzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0X3BlcnNpc3RlbmNlLmh0bSNCQUJDQUhJQyIgbGFiZWw9IlVuZGVyc3RhbmRpbmcgSmF2YSBwZXJzaXN0ZW5jZSIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0X21hcHBpbmcuaHRtI0JBQkJESkZJIiBsYWJlbD0iVW5kZXJzdGFuZGluZyBPUiBtYXBwaW5ncyIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJjb25jZXB0czAwMS5odG0jQkFCQkdGSkciIGxhYmVsPSJVbmRlcnN0YW5kaW5nIEVKQiAzLjAgSmF2YSBQZXJzaXN0ZW5jZSBBUEkiPgotICAgICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMwMDIuaHRtI0NIREhBR0lIIiBsYWJlbD0iVGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0iY29uY2VwdHMwMDMuaHRtI0NIREJJSkFDIiBsYWJlbD0iVGhlIG9ybS54bWwgZmlsZSIgLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgPC90b3BpYz4KLSAgICA8dG9waWMgaHJlZj0idGFza3MuaHRtIiBsYWJlbD0iIFRhc2tzIj4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrX2NyZWF0ZV9uZXdfcHJvamVjdC5odG0jQ0lISEVKQ0oiIGxhYmVsPSJDcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdCIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAwMS5odG0jQkVJQkFESEgiIGxhYmVsPSJDb252ZXJ0aW5nIGEgSmF2YSBQcm9qZWN0IHRvIGEgSlBBIFByb2plY3QiIC8+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza19jcmVhdGVfanBhX2VudGl0eS5odG0jQkFCRkJKQkciIGxhYmVsPSJDcmVhdGluZyBhIEpQQSBFbnRpdHkiIC8+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza19tYW5hZ2VfcGVyc2lzdGVuY2UuaHRtI0NJSERBSklEIiBsYWJlbD0iTWFuYWdpbmcgdGhlIHBlcnNpc3RlbmNlLnhtbCBmaWxlIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDAyLmh0bSNDSUhGRUJBSSIgbGFiZWw9IlN5bmNocm9uaXppbmcgY2xhc3NlcyIgLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza19tYW5hZ2Vfb3JtLmh0bSNDSUhER0RDRCIgbGFiZWw9Ik1hbmFnaW5nIHRoZSBvcm0ueG1sIGZpbGUiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMDMuaHRtI3N0aHJlZjU5IiBsYWJlbD0iQ3JlYXRpbmcgYW4gb3JtLnhtbCBmaWxlIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMDQuaHRtI0NJSEJDRENFIiBsYWJlbD0iV29ya2luZyB3aXRoIG9ybS54bWwgZmlsZSIgLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza19hZGRfcGVyc2lzdGVuY2UuaHRtI0JBQkhJQ0FJIiBsYWJlbD0iQWRkaW5nIHBlcnNpc3RlbmNlIHRvIGEgY2xhc3MiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMDUuaHRtI0JBQkdCSUVFIiBsYWJlbD0iRW50aXR5IiAvPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMDYuaHRtI0JBQkZFSUNFIiBsYWJlbD0iRW1iZWRkYWJsZSIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDA3Lmh0bSNCQUJEQUdDSSIgbGFiZWw9Ik1hcHBlZCBzdXBlcmNsYXNzIiAvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrX2FkZGl0b25hbF90YWJsZXMuaHRtI0NJSEdCSUVJIiBsYWJlbD0iU3BlY2lmeWluZyBhZGRpdGlvbmFsIHRhYmxlcyIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrX2luaGVyaXRhbmNlLmh0bSNDSUhDQ0NKRCIgbGFiZWw9IlNwZWNpZnlpbmcgZW50aXR5IGluaGVyaXRhbmNlIiAvPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDA4Lmh0bSNCQUJJR0JHRyIgbGFiZWw9IkNyZWF0aW5nIE5hbWVkIFF1ZXJpZXMiIC8+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza19tYXBwaW5nLmh0bSNCQUJER0JJSiIgbGFiZWw9Ik1hcHBpbmcgYW4gZW50aXR5Ij4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDA5Lmh0bSNCQUJCQUJDRSIgbGFiZWw9IkJhc2ljIG1hcHBpbmciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAxMC5odG0jQkFCQ0JIREYiIGxhYmVsPSJFbWJlZGRlZCBtYXBwaW5nIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMTEuaHRtI0NJSERJQUVFIiBsYWJlbD0iRW1iZWRkZWQgSUQgbWFwcGluZyIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDEyLmh0bSNCQUJHQ0JIRyIgbGFiZWw9IklEIG1hcHBpbmciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAxMy5odG0jQkFCRUlFR0QiIGxhYmVsPSJNYW55LXRvLW1hbnkgbWFwcGluZyIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDE0Lmh0bSNCQUJIRkFGSiIgbGFiZWw9Ik1hbnktdG8tb25lIG1hcHBpbmciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAxNS5odG0jQkFCSEdFQkQiIGxhYmVsPSJPbmUtdG8tbWFueSBtYXBwaW5nIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMTYuaHRtI0JBQkZIQkNKIiBsYWJlbD0iT25lLXRvLW9uZSBtYXBwaW5nIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMTcuaHRtI0JBQkhGSEVJIiBsYWJlbD0iVHJhbnNpZW50IG1hcHBpbmciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAxOC5odG0jQkFCSElCSUkiIGxhYmVsPSJWZXJzaW9uIG1hcHBpbmciIC8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGhyZWY9InRhc2tzMDE5Lmh0bSNCQUJCQUdGSSIgbGFiZWw9IkdlbmVyYXRpbmcgZW50aXRpZXMgZnJvbSB0YWJsZXMiIC8+Ci0gICAgICA8dG9waWMgaHJlZj0idGFza3MwMjAuaHRtI0NJSEpJR0JFIiBsYWJlbD0iR2VuZXJhdGluZyB0YWJsZXMgZnJvbSBlbnRpdGllcyIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAyMS5odG0jQkFCRkFJQkEiIGxhYmVsPSJWYWxpZGF0aW5nIG1hcHBpbmdzIGFuZCByZXBvcnRpbmcgcHJvYmxlbXMiPgotICAgICAgICA8dG9waWMgaHJlZj0idGFza3MwMjIuaHRtI0NJSEZFREVJIiBsYWJlbD0iRXJyb3IgbWVzc2FnZXMiIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAyMy5odG0jQ0lIR0VBSUoiIGxhYmVsPSJXYXJuaW5nIG1lc3NhZ2VzIiAvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBocmVmPSJ0YXNrczAyNC5odG0jQkFCREJDQkkiIGxhYmVsPSJNb2RpZnlpbmcgcGVyc2lzdGVudCBwcm9qZWN0IHByb3BlcnRpZXMiIC8+Ci0gICAgPC90b3BpYz4KLSAgICA8dG9waWMgbGFiZWw9IiBSZWZlcmVuY2UiPgotICAgICAgPHRvcGljIGxhYmVsPSJXaXphcmRzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9uZXdfanBhX3Byb2plY3Rfd2l6YXJkLmh0bSNDQUNCSkdCRyIgbGFiZWw9IkNyZWF0ZSBOZXcgSlBBIFByb2plY3Qgd2l6YXJkIj4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmX25ld19qcGFfcHJvamVjdC5odG0jQ0FDQkpBR0MiIGxhYmVsPSJOZXcgSlBBIFByb2plY3QgcGFnZSIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmX2phdmFfcGFnZS5odG0jQ0lBR0VCQUEiIGxhYmVsPSJKYXZhIFBhZ2UiIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl9qcGFfZmFjZXQuaHRtI0NBQ0lGRElGIiBsYWJlbD0iSlBBIEZhY2V0IHBhZ2UiIC8+Ci0gICAgICAgIDwvdG9waWM+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWZfY3JlYXRlX2pwYV9lbnRpdHlfd2l6YXJkLmh0bSNDSUFHR0dERiIgbGFiZWw9IkNyZWF0ZSBKUEEgRW50aXR5IHdpemFyZCI+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl9FbnRpdHlDbGFzc1BhZ2UuaHRtI0NJQUZFSUdGIiBsYWJlbD0iRW50aXR5IENsYXNzIHBhZ2UiIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl9FbnRpdHlQcm9wZXJ0aWVzUGFnZS5odG0jQ0lBREVDSUEiIGxhYmVsPSJFbnRpdHkgUHJvcGVydGllcyBwYWdlIiAvPgotICAgICAgICA8L3RvcGljPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDAyLmh0bSNDSUFJSkNDRSIgbGFiZWw9Ik1hcHBpbmcgRmlsZSBXaXphcmQiPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDMuaHRtI0NJQUpFSURKIiBsYWJlbD0iTWFwcGluZyBGaWxlIiAvPgotICAgICAgICA8L3RvcGljPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDA0Lmh0bSNDSUFHSENHQSIgbGFiZWw9IkdlbmVyYXRlIFRhYmxlcyBmcm9tIEVudGl0aWVzIFdpemFyZCIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0jQ0lBR0JGSkUiIGxhYmVsPSJHZW5lcmF0ZSBFbnRpdGllcyBmcm9tIFRhYmxlcyBXaXphcmQiPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZfc2VsZWN0VGFibGVzLmh0bSNDSUFIQ0dFRSIgbGFiZWw9IlNlbGVjdCBUYWJsZXMiIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl90YWJsZUFzc29jaWF0aW9ucy5odG0jQ0lBQ0RJQ0IiIGxhYmVsPSJUYWJsZSBBc3NvY2lhdGlvbnMiIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl9jdXN0b21pemVEZWZhdWx0RW50aXR5R2VuZXJhdGlvbi5odG0jQ0lBRUpEQkUiIGxhYmVsPSJDdXN0b21pemUgRGVmYXVsdCBFbnRpdHkgR2VuZXJhdGlvbiIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmX2N1c3RvbWl6SW5kaXZpZHVhbEVudGl0aWVzLmh0bSNDSUFDSUdFRSIgbGFiZWw9IkN1c3RvbWl6ZSBJbmRpdmlkdWFsIEVudGl0aWVzIiAvPgotICAgICAgICA8L3RvcGljPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmX2NyZWF0ZV9uZXdfYXNzb2NpYXRpb25fd2l6YXJkLmh0bSNDSUFGR0hJRiIgbGFiZWw9IkNyZWF0ZSBOZXcgQXNzb2NpYXRpb24iPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZfYXNzb2NpYXRpb25fdGFibGUuaHRtI0NJQUdKSERDIiBsYWJlbD0iQXNzb2NpYXRpb24gVGFibGVzIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZfam9pbl9jb2x1bW5zLmh0bSNDSUFFR0VFRyIgbGFiZWw9IkpvaW4gQ29sdW1ucyIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmX2Fzc29jaWF0aW9uX2NhcmRpbmFsaXR5Lmh0bSNDSUFGSUlGSCIgbGFiZWw9IkFzc29jaWF0aW9uIENhcmRpbmFsaXR5IiAvPgotICAgICAgICA8L3RvcGljPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0iUHJvcGVydHkgcGFnZXMiPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3Byb3Bfdmlldy5odG0jQkFCRkFFQkIiIGxhYmVsPSJKUEEgRGV0YWlscyB2aWV3IChmb3IgZW50aXRpZXMpIj4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDA2Lmh0bSNDQUNDQUdHQyIgbGFiZWw9IkdlbmVyYWwgaW5mb3JtYXRpb24iIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAwNy5odG0jQ0FDSUpCR0giIGxhYmVsPSJBdHRyaWJ1dGUgb3ZlcnJpZGVzIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDguaHRtI0NBQ0JISURBIiBsYWJlbD0iU2Vjb25kYXJ5IHRhYmxlIGluZm9ybWF0aW9uIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMDkuaHRtI0NBQ0ZIR0hFIiBsYWJlbD0iSW5oZXJpdGFuY2UgaW5mb3JtYXRpb24iIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAxMC5odG0jc3RocmVmMjI2IiBsYWJlbD0iUXVlcmllcyIgLz4KLSAgICAgICAgPC90b3BpYz4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9tYXBfdmlldy5odG0jQkFCSUZCQUYiIGxhYmVsPSJKUEEgRGV0YWlscyB2aWV3IChmb3IgYXR0cmlidXRlcykiPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZfbWFwcGluZ19nZW5lcmFsLmh0bSNDQUNCSEZJSiIgbGFiZWw9IkdlbmVyYWwgaW5mb3JtYXRpb24iIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAxMS5odG0jQ0FDQkFFQkMiIGxhYmVsPSJKb2luIFRhYmxlIEluZm9ybWF0aW9uIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTIuaHRtI0NBQ0ZDRUpDIiBsYWJlbD0iSm9pbiBDb2x1bW5zIEluZm9ybWF0aW9uIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZfcHJpbWFyeV9rZXkuaHRtI0NBQ0ZDQ0FCIiBsYWJlbD0iUHJpbWFyeSBLZXkgR2VuZXJhdGlvbiBpbmZvcm1hdGlvbiIgLz4KLSAgICAgICAgPC90b3BpYz4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9kZXRhaWxzX29ybS5odG0jQ0FDR0RHSEMiIGxhYmVsPSJKUEEgRGV0YWlscyB2aWV3IChmb3Igb3JtLnhtbCkiPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTMuaHRtI0NBQ0NBQ0dIIiBsYWJlbD0iR2VuZXJhbCBpbmZvcm1hdGlvbiIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDE0Lmh0bSNDQUNFQUdCRyIgbGFiZWw9IlBlcnNpc3RlbmNlIFVuaXQgaW5mb3JtYXRpb24iIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAxNS5odG0jQ0lBRkdBSUoiIGxhYmVsPSJHZW5lcmF0b3JzIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTYuaHRtI0NJQUlCQUFKIiBsYWJlbD0iUXVlcmllcyIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDE3Lmh0bSNDSUFER0NJRCIgbGFiZWw9IkNvbnZlcnRlcnMiIC8+Ci0gICAgICAgIDwvdG9waWM+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2Vfb3V0bGluZS5odG0jQkFCRUdHRkUiIGxhYmVsPSJKUEEgU3RydWN0dXJlIHZpZXciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWZfcGVyc2lzdGVuY2VfeG1sbF9lZGl0b3IuaHRtI0NJQUNDSElEIiBsYWJlbD0icGVyc2lzdGVuY2UueG1sIEVkaXRvciI+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZl9wZXJzaXN0ZW5jZV9nZW5lcmFsLmh0bSNDSUFDSUZHSiIgbGFiZWw9IkdlbmVyYWwiIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAxOC5odG0jQ0lBRkZKSUUiIGxhYmVsPSJDb25uZWN0aW9uIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMTkuaHRtI0NJQUpBRkVHIiBsYWJlbD0iQ3VzdG9taXphdGlvbiIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDIwLmh0bSNDSUFCRURDSCIgbGFiZWw9IkNhY2hpbmciIC8+Ci0gICAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAyMS5odG0jQ0lBQkdISEkiIGxhYmVsPSJMb2dnaW5nIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMjIuaHRtI0NJQUZKQ0hFIiBsYWJlbD0iT3B0aW9ucyIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDIzLmh0bSNDSUFDQ0ZDQiIgbGFiZWw9IlNjaGVtYSBHZW5lcmF0aW9uIiAvPgotICAgICAgICAgIDx0b3BpYyBocmVmPSJyZWZlcmVuY2UwMjQuaHRtI0NJQUhKREZGIiBsYWJlbD0iUHJvcGVydGllcyIgLz4KLSAgICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDI1Lmh0bSNDSUFIQ0pBSCIgbGFiZWw9IlNvdXJjZSIgLz4KLSAgICAgICAgPC90b3BpYz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9IlByZWZlcmVuY2VzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9wcm9qZWN0X3Byb3BlcnRpZXMuaHRtI0JBQkpIQkNJIiBsYWJlbD0iUHJvamVjdCBQcm9wZXJ0aWVzIHBhZ2UgLSBKYXZhIFBlcnNpc3RlbmNlIE9wdGlvbnMiIC8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJEaWFsb2dzIj4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAyOC5odG0jQ0FDQ0dFSEMiIGxhYmVsPSJFZGl0IEpvaW4gQ29sdW1ucyBEaWFsb2ciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWZfc2VsZWN0X2Nhc2NhZGVfZGlhbG9nLmh0bSNDSUFGREdJSiIgbGFiZWw9IlNlbGVjdCBDYXNjYWRlIGRpYWxvZyIgLz4KLSAgICAgICAgPHRvcGljIGhyZWY9InJlZl9lY2xpcHNlbGlua19tYXBwaW5nX2ZpbGUuaHRtI0NJQUVERUpGIiBsYWJlbD0iTmV3IEVjbGlwc2VMaW5rIE1hcHBpbmcgRmlsZSBkaWFsb2ciIC8+Ci0gICAgICAgIDx0b3BpYyBocmVmPSJyZWZfYWRkX2NvbnZlcnRlci5odG0jQ0lBR0NHSUoiIGxhYmVsPSJBZGQgQ29udmVydGVyIGRpYWxvZyIgLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgaHJlZj0icmVmX3BlcnNpc3RlbmNlX3BlcnNwZWN0aXZlLmh0bSNCQUJJRkJEQiIgbGFiZWw9IkpQQSBEZXZlbG9wbWVudCBwZXJzcGVjdGl2ZSIgLz4KLSAgICAgIDx0b3BpYyBsYWJlbD0iSWNvbnMgYW5kIGJ1dHRvbnMiPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDMwLmh0bSNDQUNHRUFDRyIgbGFiZWw9Ikljb25zIiAvPgotICAgICAgICA8dG9waWMgaHJlZj0icmVmZXJlbmNlMDMxLmh0bSNDQUNESkNFSSIgbGFiZWw9IkJ1dHRvbnMiIC8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGhyZWY9InJlZmVyZW5jZTAzMi5odG0jQ0FDQkJESUIiIGxhYmVsPSJEYWxpIERldmVsb3BlciBEb2N1bWVudGF0aW9uIiAvPgotICAgIDwvdG9waWM+Ci0gICAgPHRvcGljIGhyZWY9InRpcHNfYW5kX3RyaWNrcy5odG0iIGxhYmVsPSJUaXBzIGFuZCB0cmlja3MiPgotICAgICAgPHRvcGljIGhyZWY9IndoYXRzX25ldzAwMS5odG0jQ0pBQ0VEREUiIGxhYmVsPSJKUEEgTGlicmFyeSBNYW5hZ2VtZW50IiAvPgotICAgICAgPHRvcGljIGhyZWY9IndoYXRzX25ldzAwMi5odG0jQ0pBRElGSEoiIGxhYmVsPSJOZXcgR2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkIiAvPgotICAgICAgPHRvcGljIGhyZWY9IndoYXRzX25ldzAwMy5odG0jQ0pBQklKRUMiIGxhYmVsPSJDb252ZXJzaW9uIG9mIEphdmEgUHJvamVjdHMgdG8gSlBBIFByb2plY3RzIiAvPgotICAgICAgPHRvcGljIGhyZWY9IndoYXRzX25ldzAwNC5odG0jQ0pBQ0pCREEiIGxhYmVsPSJFY2xpcHNlTGluayAxLjEgU3VwcG9ydCIgLz4KLSAgICAgIDx0b3BpYyBocmVmPSJ3aGF0c19uZXcwMDUuaHRtI3N0aHJlZjI4NiIgbGFiZWw9IlRhYmxlLXBlci1Db25jcmV0ZS1DbGFzcyBJbmhlcml0YW5jZSIgLz4KLSAgICA8L3RvcGljPgotICAgIDx0b3BpYyBocmVmPSJsZWdhbC5odG0iIGxhYmVsPSIgTGVnYWwiPgotICAgICAgPHRvcGljIGhyZWY9ImFib3V0Lmh0bSNzdGhyZWYyODgiIGxhYmVsPSJBYm91dCB0aGlzIGNvbnRlbnQiIC8+Ci0gICAgPC90b3BpYz4KLTwvdG9jPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3doYXRzX25ldy5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcwYWFjYy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+V2hhdCdzIG5ldzwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iIFdoYXQncyBuZXciIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJzdGhyZWYyODUiIG5hbWU9InN0aHJlZjI4NSI+PC9hPiBXaGF0J3MgbmV3PC9wPgotPHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIGRlc2NyaXB0aW9ucyBvZiB0aGUgZm9sbG93aW5nIG5ldyBmZWF0dXJlcyBhbmQgc2lnbmlmaWNhbnQgY2hhbmdlcyBtYWRlIHRvIHRoZSBEYWxpIE9SIE1hcHBpbmcgVG9vbCBmb3IgUmVsZWFzZSAyLjI6PC9wPgotPHVsPgotPGxpPgotPHA+PGEgaHJlZj0id2hhdHNfbmV3MDAxLmh0bSNDSkFDRURERSI+SlBBIExpYnJhcnkgTWFuYWdlbWVudDwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0id2hhdHNfbmV3MDAyLmh0bSNDSkFESUZISiI+TmV3IEdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIFdpemFyZDwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0id2hhdHNfbmV3MDAzLmh0bSNDSkFCSUpFQyI+Q29udmVyc2lvbiBvZiBKYXZhIFByb2plY3RzIHRvIEpQQSBQcm9qZWN0czwvYT48L3A+Ci08L2xpPgotPGxpPgotPHA+PGEgaHJlZj0id2hhdHNfbmV3MDA0Lmh0bSNDSkFDSkJEQSI+RWNsaXBzZUxpbmsgMS4xIFN1cHBvcnQ8L2E+PC9wPgotPC9saT4KLTwvdWw+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3doYXRzX25ldzAwMS5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDAxLmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI0ZDEwMy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDAxLmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+SlBBIExpYnJhcnkgTWFuYWdlbWVudDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik9yYWNsZSBEQVJCIFhIVE1MIENvbnZlcnRlciAoTW9kZSA9IG9oai9vaHcpIC0gVmVyc2lvbiA1LjEuMSBCdWlsZCAwMDQiIC8+Ci08bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDA5LTA1LTAxVDg6MTI6NTRaIiAvPgotPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2FyY2hpdmUiIC8+Ci08bWV0YSBuYW1lPSJkb2N0aXRsZSIgY29udGVudD0iSlBBIExpYnJhcnkgTWFuYWdlbWVudCIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPHA+PGEgaWQ9IkNKQUNFRERFIiBuYW1lPSJDSkFDRURERSI+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InNlY3QxIj48IS0tIGluZm9sZXZlbD0iYWxsIiBpbmZvdHlwZT0iR2VuZXJhbCIgLS0+Ci08aDE+SlBBIExpYnJhcnkgTWFuYWdlbWVudDwvaDE+Ci08cD5Vc2UgdGhlIG5ldyA8YSBocmVmPSJyZWZfanBhX2ZhY2V0Lmh0bSNDQUNJRkRJRiI+SlBBIEZhY2V0IHBhZ2U8L2E+IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIEpQQSBsaWJyYXJpZXMgd2hlbiBjcmVhdGluZyBhIG5ldyBKUEEgcHJvamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgSlBBIGxpYnJhcnkgY29uZmlndXJhdGlvbiBmcm9tIGEgc2VsZWN0ZWQgSlBBIGltcGxlbWVudGF0aW9uLCBvciBjcmVhdGUgYSBjdXN0b20gbGlicmFyeS48L3A+Ci08cD5UaGUgRGFsaSBPUiBNYXBwaW5nIFRvb2wgd2lsbCBhdXRvbWF0aWNhbGx5IHZhbGlkYXRlIHRoZSBsaWJyYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGNsYXNzZXMgYXJlIGF2YWlsYWJsZSBmb3IgYSBnaXZlbiBwbGF0Zm9ybS48L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDAyLmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci93aGF0c19uZXcwMDIuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmRhZWIzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci93aGF0c19uZXcwMDIuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5OZXcgR2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iT3JhY2xlIERBUkIgWEhUTUwgQ29udmVydGVyIChNb2RlID0gb2hqL29odykgLSBWZXJzaW9uIDUuMS4xIEJ1aWxkIDAwNCIgLz4KLTxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMDktMDUtMDFUODoxMjo1NFoiIC8+Ci08bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vYXJjaGl2ZSIgLz4KLTxtZXRhIG5hbWU9ImRvY3RpdGxlIiBjb250ZW50PSJOZXcgR2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkIiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0pBRElGSEoiIG5hbWU9IkNKQURJRkhKIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5OZXcgR2VuZXJhdGUgRW50aXRpZXMgZnJvbSBUYWJsZXMgV2l6YXJkPC9oMT4KLTxwPlVzZSB0aGUgbmV3IDxhIGhyZWY9InJlZl9jcmVhdGVfY3VzdG9tX2VudGl0aWVzX3dpemFyZC5odG0jQ0lBR0JGSkUiPkdlbmVyYXRlIEVudGl0aWVzIGZyb20gVGFibGVzIFdpemFyZDwvYT4gdG8gY3JlYXRlIEpQQSBlbnRpdGllcyBmcm9tIHlvdXIgZGF0YWJhc2UgdGFibGVzLjwvcD4KLTxwPlRoZSBEYWxpIE9SIE1hcHBpbmcgVG9vbCBhbGxvd3MgeW91IHRvIHNlbGVjdCB0aGUgdGFibGVzIGZyb20gd2hpY2ggdG8gZ2VuZXJhdGUgZW50aXRpZXMsIHRoZSB0YWJsZSBhc3NvY2lhdGlvbnMsIGFuZCBkZWZhdWx0IGVudGl0eSBwcm9wZXJ0aWVzLiBZb3UgY2FuIHRoZW4gY3VzdG9taXplIGVhY2ggaW5kaXZpZHVhbCBlbnRpdHkgYmVpbmcgZ2VuZXJhdGVkLjwvcD4KLTwvZGl2PgotPCEtLSBjbGFzcz0ic2VjdDEiIC0tPgotPCEtLSBTdGFydCBGb290ZXIgLS0+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPHRhYmxlIGNsYXNzPSJzaW1wbGUgb2FjX25vX3dhcm4iIHN1bW1hcnk9IiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci08Y29sIHdpZHRoPSI4NiUiIC8+Ci08Y29sIHdpZHRoPSIqIiAvPgotPHRyPgotPHRkIGFsaWduPSJsZWZ0Ij48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+Q29weXJpZ2h0Jm5ic3A7JmNvcHk7Jm5ic3A7MjAwNiwgMjAwOSwmbmJzcDtPcmFjbGUmbmJzcDthbmQvb3ImbmJzcDtpdHMmbmJzcDthZmZpbGlhdGVzLiZuYnNwO0FsbCZuYnNwO3JpZ2h0cyZuYnNwO3Jlc2VydmVkLjwvc3Bhbj48YnIgLz4KLTxhIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkxlZ2FsIE5vdGljZXM8L3NwYW4+PC9hPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLTwvZGl2PgotPCEtLSBjbGFzcz0iZm9vdGVyIiAtLT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci93aGF0c19uZXcwMDMuaHRtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3doYXRzX25ldzAwMy5odG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxM2ExODYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3doYXRzX25ldzAwMy5odG0KKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgotICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiIC8+Ci0gCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3JpcHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0IiAvPgotPHRpdGxlPkNvbnZlcnNpb24gb2YgSmF2YSBQcm9qZWN0cyB0byBKUEEgUHJvamVjdHM8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjU0WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkNvbnZlcnNpb24gb2YgSmF2YSBQcm9qZWN0cyB0byBKUEEgUHJvamVjdHMiIC8+Ci08bWV0YSBuYW1lPSJyZWxudW0iIGNvbnRlbnQ9IlJlbGVhc2UgMi4yIiAvPgotPG1ldGEgbmFtZT0iY29weXJpZ2h0IiBjb250ZW50PSJDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggb3JhY2xlIC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuIENvbnRyaWJ1dG9yczogT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIiAvPgotPGxpbmsgcmVsPSJjb3B5cmlnaHQiIGhyZWY9ImRjb21tb24vaHRtbC9jcHlyLmh0bSIgdGl0bGU9IkNvcHlyaWdodCIgdHlwZT0idGV4dC9odG1sIiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkY29tbW9uL2Nzcy9ibGFmZG9jLmNzcyIgdGl0bGU9Ik9yYWNsZSBCTEFGRG9jIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KLTwhLS0gY29udGVudHMgLS0+Ci08L2hlYWQ+Ci08Ym9keT4KLTxwPjxhIGlkPSJDSkFCSUpFQyIgbmFtZT0iQ0pBQklKRUMiPjwvYT48L3A+Ci08ZGl2IGNsYXNzPSJzZWN0MSI+PCEtLSBpbmZvbGV2ZWw9ImFsbCIgaW5mb3R5cGU9IkdlbmVyYWwiIC0tPgotPGgxPkNvbnZlcnNpb24gb2YgSmF2YSBQcm9qZWN0cyB0byBKUEEgUHJvamVjdHM8L2gxPgotPHA+VGhlIERhbGkgT1IgTWFwcGluZyBUb29sIG5vdyB1c2VzIHRoZSBFY2xpcHNlIDxzcGFuIGNsYXNzPSJib2xkIj5Db25maWd1cmU8L3NwYW4+IG1lbnUgdG8gY29udmVydCBleGlzdGluZyBKYXZhIHByb2plY3RzIHRvIEpQQSBwcm9qZWN0cy48L3A+Ci08cD5TZWUgPGEgaHJlZj0idGFza3MwMDEuaHRtI0JFSUJBREhIIj4iQ29udmVydGluZyBhIEphdmEgUHJvamVjdCB0byBhIEpQQSBQcm9qZWN0IjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmRvYy51c2VyL3doYXRzX25ldzAwNC5odG0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDA0Lmh0bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0MjczYi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDA0Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSIgLz4KLSAKLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiIC8+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNjcmlwdC1UeXBlIiBjb250ZW50PSJ0ZXh0L2phdmFzY3JpcHQiIC8+Ci08dGl0bGU+RWNsaXBzZUxpbmsgMS4xIFN1cHBvcnQ8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjU0WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IkVjbGlwc2VMaW5rIDEuMSBTdXBwb3J0IiAvPgotPG1ldGEgbmFtZT0icmVsbnVtIiBjb250ZW50PSJSZWxlYXNlIDIuMiIgLz4KLTxtZXRhIG5hbWU9ImNvcHlyaWdodCIgY29udGVudD0iQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IG9yYWNsZSAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLiBDb250cmlidXRvcnM6IE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiIgLz4KLTxsaW5rIHJlbD0iY29weXJpZ2h0IiBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iIHRpdGxlPSJDb3B5cmlnaHQiIHR5cGU9InRleHQvaHRtbCIgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGNvbW1vbi9jc3MvYmxhZmRvYy5jc3MiIHRpdGxlPSJPcmFjbGUgQkxBRkRvYyIgdHlwZT0idGV4dC9jc3MiIC8+Ci08IS0tIGNvbnRlbnRzIC0tPgotPC9oZWFkPgotPGJvZHk+Ci08cD48YSBpZD0iQ0pBQ0pCREEiIG5hbWU9IkNKQUNKQkRBIj48L2E+PC9wPgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT4KLTxoMT5FY2xpcHNlTGluayAxLjEgU3VwcG9ydDwvaDE+Ci08cD5SZWxlYXNlIDIuMiBwcm92aWRlcyBzdXBwb3J0IG9mIHRoZSBmb2xsb3dpbmcgRWNsaXBzZUxpbmsgMS4xIGZlYXR1cmVzLjwvcD4KLTx1bD4KLTxsaT4KLTxwPkVjbGlwc2VMaW5rIFhNTCBtYXBwaW5nIGZpbGUgYW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnM8L3A+Ci08L2xpPgotPGxpPgotPHA+T25lLXRvLU1hbnkgbWFwcGluZyA8c3BhbiBjbGFzcz0iaXRhbGljIj53aXRob3V0PC9zcGFuPiBhIGpvaW4gdGFibGUuPC9wPgotPC9saT4KLTwvdWw+Ci08cD5FY2xpcHNlTGluayAodGhlIEVjbGlwc2UgUGVyc2lzdGVuY2UgU2VydmljZXMgUHJvamVjdCkgaXMgYSBjb21wbGV0ZSBwZXJzaXN0ZW5jZSBmcmFtZSB3b3JrLiBSZWZlciB0byA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2VsaW5rLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lY2xpcHNlbGluay88L2E+PC9jb2RlPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9InNlY3QxIiAtLT4KLTwhLS0gU3RhcnQgRm9vdGVyIC0tPgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTx0YWJsZSBjbGFzcz0ic2ltcGxlIG9hY19ub193YXJuIiBzdW1tYXJ5PSIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgotPGNvbCB3aWR0aD0iODYlIiAvPgotPGNvbCB3aWR0aD0iKiIgLz4KLTx0cj4KLTx0ZCBhbGlnbj0ibGVmdCI+PHNwYW4gY2xhc3M9ImNvcHlyaWdodGxvZ28iPkNvcHlyaWdodCZuYnNwOyZjb3B5OyZuYnNwOzIwMDYsIDIwMDksJm5ic3A7T3JhY2xlJm5ic3A7YW5kL29yJm5ic3A7aXRzJm5ic3A7YWZmaWxpYXRlcy4mbmJzcDtBbGwmbmJzcDtyaWdodHMmbmJzcDtyZXNlcnZlZC48L3NwYW4+PGJyIC8+Ci08YSBocmVmPSJkY29tbW9uL2h0bWwvY3B5ci5odG0iPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5MZWdhbCBOb3RpY2VzPC9zcGFuPjwvYT48L3RkPgotPC90cj4KLTwvdGFibGU+Ci08L2Rpdj4KLTwhLS0gY2xhc3M9ImZvb3RlciIgLS0+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZG9jLnVzZXIvd2hhdHNfbmV3MDA1Lmh0bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci93aGF0c19uZXcwMDUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2NhNDg2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci93aGF0c19uZXcwMDUuaHRtCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIiAvPgotIAotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2NyaXB0LVR5cGUiIGNvbnRlbnQ9InRleHQvamF2YXNjcmlwdCIgLz4KLTx0aXRsZT5UYWJsZS1wZXItQ29uY3JldGUtQ2xhc3MgSW5oZXJpdGFuY2U8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJPcmFjbGUgREFSQiBYSFRNTCBDb252ZXJ0ZXIgKE1vZGUgPSBvaGovb2h3KSAtIFZlcnNpb24gNS4xLjEgQnVpbGQgMDA0IiAvPgotPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAwOS0wNS0wMVQ4OjEyOjU0WiIgLz4KLTxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9hcmNoaXZlIiAvPgotPG1ldGEgbmFtZT0iZG9jdGl0bGUiIGNvbnRlbnQ9IlRhYmxlLXBlci1Db25jcmV0ZS1DbGFzcyBJbmhlcml0YW5jZSIgLz4KLTxtZXRhIG5hbWU9InJlbG51bSIgY29udGVudD0iUmVsZWFzZSAyLjIiIC8+Ci08bWV0YSBuYW1lPSJjb3B5cmlnaHQiIGNvbnRlbnQ9IkNvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBvcmFjbGUgLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4gQ29udHJpYnV0b3JzOiBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iIC8+Ci08bGluayByZWw9ImNvcHlyaWdodCIgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIiB0aXRsZT0iQ29weXJpZ2h0IiB0eXBlPSJ0ZXh0L2h0bWwiIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRjb21tb24vY3NzL2JsYWZkb2MuY3NzIiB0aXRsZT0iT3JhY2xlIEJMQUZEb2MiIHR5cGU9InRleHQvY3NzIiAvPgotPCEtLSBjb250ZW50cyAtLT4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBjbGFzcz0ic2VjdDEiPjwhLS0gaW5mb2xldmVsPSJhbGwiIGluZm90eXBlPSJHZW5lcmFsIiAtLT48YSBpZD0ic3RocmVmMjg2IiBuYW1lPSJzdGhyZWYyODYiPjwvYT4KLTxoMT5UYWJsZS1wZXItQ29uY3JldGUtQ2xhc3MgSW5oZXJpdGFuY2U8L2gxPgotPHA+VGhlIERhbGkgT1IgTWFwcGluZyBUb29sIG5vdyBzdXBwb3J0cyB0aGUgSlBBIDEuMC1vcHRpb25hbCB0YWJsZS1wZXItY29uY3JldGUtY2xhc3MgaW5oZXJpdGFuY2Ugb3B0aW9uLiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIHJlcXVpcmVkIGluIEpQQSAyLjAuPC9wPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJzZWN0MSIgLS0+Ci08IS0tIFN0YXJ0IEZvb3RlciAtLT4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08dGFibGUgY2xhc3M9InNpbXBsZSBvYWNfbm9fd2FybiIgc3VtbWFyeT0iIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KLTxjb2wgd2lkdGg9Ijg2JSIgLz4KLTxjb2wgd2lkdGg9IioiIC8+Ci08dHI+Ci08dGQgYWxpZ249ImxlZnQiPjxzcGFuIGNsYXNzPSJjb3B5cmlnaHRsb2dvIj5Db3B5cmlnaHQmbmJzcDsmY29weTsmbmJzcDsyMDA2LCAyMDA5LCZuYnNwO09yYWNsZSZuYnNwO2FuZC9vciZuYnNwO2l0cyZuYnNwO2FmZmlsaWF0ZXMuJm5ic3A7QWxsJm5ic3A7cmlnaHRzJm5ic3A7cmVzZXJ2ZWQuPC9zcGFuPjxiciAvPgotPGEgaHJlZj0iZGNvbW1vbi9odG1sL2NweXIuaHRtIj48c3BhbiBjbGFzcz0iY29weXJpZ2h0bG9nbyI+TGVnYWwgTm90aWNlczwvc3Bhbj48L2E+PC90ZD4KLTwvdHI+Ci08L3RhYmxlPgotPC9kaXY+Ci08IS0tIGNsYXNzPSJmb290ZXIiIC0tPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nLy5jdnNpZ25vcmUgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0NDg3Yy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJ1aWxkLnhtbApkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nLy5wcm9qZWN0IGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjlhN2M2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWVjMjlkLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gTWF5IDI3IDE1OjEwOjA5IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwYzhjMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmc7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMy4wLjAucXVhbGlmaWVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9hYm91dC5odG1sIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNjA2YjEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lIDA2LCAyMDA3PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvYWJvdXQuaW5pIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4OGI5ZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPWljb25zL1dUUF9pY29uX3gzMl92Mi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uICh0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0jIFByb3BlcnR5ICJ0aXBzQW5kVHJpY2tzSHJlZiIgY29udGFpbnMgdGhlIEhlbHAgdG9waWMgaHJlZiB0byBhIHRpcHMgYW5kIHRyaWNrcyBwYWdlIAotIyBvcHRpb25hbAotdGlwc0FuZFRyaWNrc0hyZWY9L29yZy5lY2xpcHNlLmpwdC5kb2MudXNlci90aXBzX2FuZF90cmlja3MuaHRtCi0KLQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL2Fib3V0Lm1hcHBpbmdzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGRhYWI0Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncwotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcwotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0wPUBidWlsZEAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvYWJvdXQucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9hYm91dC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBlMzZmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9hYm91dC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGFib3V0LnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGFib3V0LmluaQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBmaWxsLWlucyBhcmUgc3VwcGxpZWQgYnkgYWJvdXQubWFwcGluZ3MKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi1ibHVyYj1EYWxpIEphdmEgUGVyc2lzdGVuY2UgVG9vbHMgLSBFY2xpcHNlTGluayBTdXBwb3J0XG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBPcmFjbGUgY29udHJpYnV0b3JzIGFuZCBvdGhlcnMgMjAwNiwgMjAwOS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1WaXNpdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvYnVpbGQucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U0NTUwLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0LmluaSxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lm1hcHBpbmdzLFwKLSAgICAgICAgICAgICAgIGFib3V0LnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuYnJhbmRpbmcvaWNvbnMvV1RQX2ljb25feDMyX3YyLnBuZyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjA5YzJhLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9pY29ucy9XVFBfaWNvbl94MzJfdjIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmJyYW5kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2M2MGQzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5icmFuZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZS4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZSA9IERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyAtIEVjbGlwc2VMaW5rIFN1cHBvcnQKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vLmNsYXNzcGF0aCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAwY2U4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJsaWIiIHBhdGg9ImxpYi9wZXJzaXN0ZW5jZS5qYXIiIHNvdXJjZXBhdGg9Im9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbnNyYy56aXAiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuLy5jdnNpZ25vcmUgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVlODJkNy4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWJpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi8ucHJvamVjdCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2MzExZi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW48L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDFiYzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1dlZCBBcHIgMzAgMTc6MjQ6NDEgRURUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL01FVEEtSU5GL01BTklGRVNULk1GIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTM4MDBmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW47c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGxpYi9wZXJzaXN0ZW5jZS5qYXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IGphdmF4LnBlcnNpc3RlbmNlLAotIGphdmF4LnBlcnNpc3RlbmNlLnNwaSwKLSBvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL2Fib3V0Lmh0bWwgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxZjU4Ni4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgyPkFib3V0IFRoaXMgQ29udGVudDwvSDI+Ci0KLTxQPk1heSAwMiwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08aDM+VGhpcmQgUGFydHkgQ29udGVudDwvaDM+Ci08cD5UaGUgQ29udGVudCBpbmNsdWRlcyBpdGVtcyB0aGF0IGhhdmUgYmVlbiBzb3VyY2VkIGZyb20gdGhpcmQgcGFydGllcyBhcyBzZXQgCi0gIG91dCBiZWxvdy4gSWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCAKLSAgdGhlIGZvbGxvd2luZyBpcyBwcm92aWRlZCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LCBhbmQgeW91IHNob3VsZCBsb29rIAotICB0byB0aGUgUmVkaXN0cmlidXRvciYjODIxNztzIGxpY2Vuc2UgZm9yIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZS48L3A+Ci0KLTxoND48YSBuYW1lPSJKUEEiIGlkPSJKUEEiPjwvYT5KYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSB2MS4wPC9oND4KLQotPGJsb2NrcXVvdGU+Ci0gIDxwPlRoZSBKYXZhIFBlcnNpc3RlbmNlIEFQSSAoSlBBKSB3aGljaCBpcyBkaXN0cmlidXRlZCB1bmRlciA8YSBocmVmPSJodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvcHVibGljL0NEREx2MS4wLmh0bWwiPkNEREwgCi0gICAgdjEuMDwvYT4gaXMgcmVxdWlyZWQgYnkgdGhlIERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyBQcm9qZWN0IGluIG9yZGVyIAotICAgIHRvIHN1cHBvcnQgdGhpcyBzdGFuZGFyZC48L3A+Ci08L2Jsb2NrcXVvdGU+Ci08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vYnVpbGQucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjdiY2UzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotamF2YWNTb3VyY2U9MS41Ci1qYXZhY1RhcmdldD0xLjUKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBsaWIvcGVyc2lzdGVuY2UuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IC4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi9saWIvcGVyc2lzdGVuY2UuamFyIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL2xpYi9wZXJzaXN0ZW5jZS5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWIyMzIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL2xpYi9wZXJzaXN0ZW5jZS5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vcGx1Z2luLnByb3BlcnRpZXMgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5kZGxnZW4vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhM2VmMWQuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lID0gRGFsaSBKYXZhIFBlcnNpc3RlbmNlIFRvb2xzIC0gRWNsaXBzZUxpbmsgU3VwcG9ydCAtIERETCBHZW5lcmF0aW9uCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZWNsaXBzZWxpbmsvY29yZS9kZGxnZW4vTWFpbi5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZWNsaXBzZWxpbmsvY29yZS9kZGxnZW4vTWFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmYxYmZiLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5lY2xpcHNlbGluay5jb3JlLmRkbGdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2VjbGlwc2VsaW5rL2NvcmUvZGRsZ2VuL01haW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSogCi0qIENvbnRyaWJ1dG9yczoKLSogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmVjbGlwc2VsaW5rLmNvcmUuZGRsZ2VuOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuRW50aXR5TWFuYWdlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuUGVyc2lzdGVuY2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZWNsaXBzZWxpbmsuY29yZS5jb250ZXh0LnBlcnNpc3RlbmNlLnNjaGVtYS5nZW5lcmF0aW9uLlNjaGVtYUdlbmVyYXRpb247Ci0KLS8qKiAKLSAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhIEVjbGlwc2VMaW5rIDxjb2RlPkVudGl0eU1hbmFnZXJGYWN0b3J5PC9jb2RlPiwgCi0gKiBhbmQgZXhlY3V0ZXMgdGhlIERETCBnZW5lcmF0b3Igd2l0aCB0aGUgY29tbWFuZCBzZXQgaW4gdGhlIHByb3BlcnRpZXM6IAotICogICAgIDxjb2RlPmVjbGlwc2VsaW5rLmRkbC1nZW5lcmF0aW9uLm91dHB1dC1tb2RlPC9jb2RlPiAKLSAqICAgICA8Y29kZT5lY2xpcHNlbGluay5hcHBsaWNhdGlvbi1sb2NhdGlvbjwvY29kZT4KLSAqIAotICogQ3VycmVudCBjb21tYW5kLWxpbmUgYXJndW1lbnRzOgotICogICAgIFstcHUgcHVOYW1lXSAtIHBlcnNpc3RlbmNlIHVuaXQgbmFtZQotICogICAgIFstcCBwcm9wZXJ0aWVzRmlsZVBhdGhdIC0gcHJvcGVydGllcyBmb3IgRWNsaXBzZUxpbmsgRW50aXR5TWFuYWdlcgotICogIAotICogIEV4YW1wbGUgb2YgYSBwcm9wZXJ0aWVzIGZpbGU6Ci0gKiAgCWVjbGlwc2VsaW5rLmpkYmMuYmluZC1wYXJhbWV0ZXJzPWZhbHNlCi0gKiAgCWVjbGlwc2VsaW5rLmpkYmMuZHJpdmVyPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlcgotICogIAllY2xpcHNlbGluay5qZGJjLnVybD1qZGJjXDpkZXJieVw6Y1w6L2RlcmJ5ZGIvdGVzdGRiO2NyZWF0ZVw9dHJ1ZQotICogIAllY2xpcHNlbGluay5qZGJjLnVzZXI9dHJhbgotICogIAllY2xpcHNlbGluay5qZGJjLnBhc3N3b3JkPQotICogIAllY2xpcHNlbGluay5sb2dnaW5nLmxldmVsPUZJTkVTVAotICogIAllY2xpcHNlbGluay5sb2dnaW5nLnRpbWVzdGFtcD1mYWxzZQotICogIAllY2xpcHNlbGluay5sb2dnaW5nLnRocmVhZD1mYWxzZQotICogIAllY2xpcHNlbGluay5sb2dnaW5nLnNlc3Npb249ZmFsc2UKLSAqICAJZWNsaXBzZWxpbmsubG9nZ2luZy5leGNlcHRpb25zPXRydWUKLSAqICAJZWNsaXBzZWxpbmsub3JtLnRocm93LmV4Y2VwdGlvbnM9dHJ1ZQotICogIAllY2xpcHNlbGluay5kZGwtZ2VuZXJhdGlvbi5vdXRwdXQtbW9kZT1kYXRhYmFzZQotICogIAllY2xpcHNlbGluay5kZGwtZ2VuZXJhdGlvbj1kcm9wLWFuZC1jcmVhdGUtdGFibGVzCi0gKiAgCWVjbGlwc2VsaW5rLmFwcGxpY2F0aW9uLWxvY2F0aW9uPWNcOi9fUHJvamVjdHNfL0V4YW1wbGVEREwKLSAqLwotcHVibGljIGNsYXNzIE1haW4KLXsKLQlwcm90ZWN0ZWQgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwotCXByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBlY2xpcHNlTGlua1Byb3BlcnRpZXM7Ci0JcHJpdmF0ZSBTdHJpbmcgY3JlYXRlRERMRmlsZU5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgZHJvcERETEZpbGVOYW1lOwotCXByaXZhdGUgU3RyaW5nIGFwcExvY2F0aW9uOwotCXByaXZhdGUgU3RyaW5nIGVjbGlwc2VMaW5rUHJvcGVydGllc1BhdGg7Ci0JcHJpdmF0ZSBib29sZWFuIGlzRGVidWdNb2RlOwotCQotCS8vICoqKioqKioqKiogY29uc3RydWN0b3JzICoqKioqKioqKioKLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBNYWluKCkuZXhlY3V0ZShhcmdzKTsKLQl9Ci0KLQlwcml2YXRlIE1haW4oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLy8gKioqKioqKioqKiBiZWhhdmlvciAqKioqKioqKioqCi0JCi0JcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShTdHJpbmdbXSBhcmdzKSB7Ci0JCXRoaXMuaW5pdGlhbGl6ZVdpdGgoYXJncyk7Ci0JCQotCQl0aGlzLmVtZiA9IFBlcnNpc3RlbmNlLmNyZWF0ZUVudGl0eU1hbmFnZXJGYWN0b3J5KHRoaXMuZ2V0UFVOYW1lKGFyZ3MpLCB0aGlzLmVjbGlwc2VMaW5rUHJvcGVydGllcyk7Ci0JCXRoaXMucGVyZm9ybSgpOwotCQl0aGlzLmNsb3NlRW50aXR5TWFuYWdlckZhY3RvcnkoKTsKLQkJCi0JCXRoaXMuZGlzcG9zZSgpOwotCQlyZXR1cm47Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHBlcmZvcm0oKSB7Ci0JCS8vIGNyZWF0ZSBhbiBFTSB0byBnZW5lcmF0ZSBzY2hlbWEuCi0JCXRoaXMuZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKS5jbG9zZSgpOwotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBjbG9zZUVudGl0eU1hbmFnZXJGYWN0b3J5KCkgewotCQl0aGlzLmVtZi5jbG9zZSgpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZVdpdGgoU3RyaW5nW10gYXJncykgewotCi0JCXRoaXMuZWNsaXBzZUxpbmtQcm9wZXJ0aWVzUGF0aCA9IHRoaXMuZ2V0RWNsaXBzZUxpbmtQcm9wZXJ0aWVzUGF0aChhcmdzKTsKLQkJdGhpcy5lY2xpcHNlTGlua1Byb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXModGhpcy5lY2xpcHNlTGlua1Byb3BlcnRpZXNQYXRoKTsKLQkJCi0JCXRoaXMuY3JlYXRlRERMRmlsZU5hbWUgPSB0aGlzLmdldENvbmZpZ1Byb3BlcnR5QXNTdHJpbmcoIAotCQkJCQkJU2NoZW1hR2VuZXJhdGlvbi5FQ0xJUFNFTElOS19DUkVBVEVfRklMRV9OQU1FLCAKLQkJCQkJCXRoaXMuZWNsaXBzZUxpbmtQcm9wZXJ0aWVzLCAgCi0JCQkJCQlTY2hlbWFHZW5lcmF0aW9uLkRFRkFVTFRfU0NIRU1BX0dFTkVSQVRJT05fQ1JFQVRFX0ZJTEVfTkFNRSk7Ci0KLQkJdGhpcy5kcm9wRERMRmlsZU5hbWUgPSB0aGlzLmdldENvbmZpZ1Byb3BlcnR5QXNTdHJpbmcoCi0JCQkJCQlTY2hlbWFHZW5lcmF0aW9uLkVDTElQU0VMSU5LX0RST1BfRklMRV9OQU1FLCAKLQkJCQkJCXRoaXMuZWNsaXBzZUxpbmtQcm9wZXJ0aWVzLCAgCi0JCQkJCQlTY2hlbWFHZW5lcmF0aW9uLkRFRkFVTFRfU0NIRU1BX0dFTkVSQVRJT05fRFJPUF9GSUxFX05BTUUpOyAKLQkJCi0JCXRoaXMuYXBwTG9jYXRpb24gPSB0aGlzLmVjbGlwc2VMaW5rUHJvcGVydGllcy5nZXQoCi0JCQkJCQlTY2hlbWFHZW5lcmF0aW9uLkVDTElQU0VMSU5LX0FQUExJQ0FUSU9OX0xPQ0FUSU9OKTsKLQotCQl0aGlzLmlzRGVidWdNb2RlID0gdGhpcy5nZXREZWJ1Z01vZGUoYXJncyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkaXNwb3NlKCkgewotCi0JCWlmKCAhIHRoaXMuaXNEZWJ1Z01vZGUpIHsKLQkJCW5ldyBGaWxlKHRoaXMuYXBwTG9jYXRpb24gKyAiLyIgKyB0aGlzLmNyZWF0ZURETEZpbGVOYW1lKS5kZWxldGUoKTsKLQkJCW5ldyBGaWxlKHRoaXMuYXBwTG9jYXRpb24gKyAiLyIgKyB0aGlzLmRyb3BERExGaWxlTmFtZSkuZGVsZXRlKCk7Ci0JCQluZXcgRmlsZSh0aGlzLmVjbGlwc2VMaW5rUHJvcGVydGllc1BhdGgpLmRlbGV0ZSgpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRQcm9wZXJ0aWVzKFN0cmluZyBlY2xpcHNlTGlua1Byb3BlcnRpZXNQYXRoKSB7Ci0JCQotCQlTZXQ8RW50cnk8T2JqZWN0LCBPYmplY3Q+PiBwcm9wZXJ0aWVzU2V0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXByb3BlcnRpZXNTZXQgPSB0aGlzLmxvYWRFY2xpcHNlTGlua1Byb3BlcnRpZXMoZWNsaXBzZUxpbmtQcm9wZXJ0aWVzUGF0aCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJNaXNzaW5nOiAiICsgZWNsaXBzZUxpbmtQcm9wZXJ0aWVzUGF0aCwgZSk7Ci0JCX0KLQkJCi0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCQlmb3IoRW50cnk8T2JqZWN0LCBPYmplY3Q+IHByb3BlcnR5IDogcHJvcGVydGllc1NldCkgewotCQkJcHJvcGVydGllcy5wdXQoKFN0cmluZylwcm9wZXJ0eS5nZXRLZXkoKSwgKFN0cmluZylwcm9wZXJ0eS5nZXRWYWx1ZSgpKTsKLQkJfQotCQlyZXR1cm4gcHJvcGVydGllczsKLQl9Ci0KLSAgICBwcml2YXRlIFNldDxFbnRyeTxPYmplY3QsIE9iamVjdD4+IGxvYWRFY2xpcHNlTGlua1Byb3BlcnRpZXMoU3RyaW5nIGVjbGlwc2VMaW5rUHJvcGVydGllc1BhdGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCQotICAgICAgICBGaWxlSW5wdXRTdHJlYW0gc3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShlY2xpcHNlTGlua1Byb3BlcnRpZXNQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHByb3BlcnRpZXMubG9hZChzdHJlYW0pOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZW50cnlTZXQoKTsKLQl9Ci0KLQkvLyAqKioqKioqKioqIGFyZ3VtZW50IHF1ZXJpZXMgKioqKioqKioqKgotICAgIAotCXByaXZhdGUgU3RyaW5nIGdldFBVTmFtZShTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJcmV0dXJuIHRoaXMuZ2V0QXJndW1lbnRWYWx1ZSgiLXB1IiwgYXJncyk7Ci0JfQotCQotCXByaXZhdGUgU3RyaW5nIGdldEVjbGlwc2VMaW5rUHJvcGVydGllc1BhdGgoU3RyaW5nW10gYXJncykgewotCi0JCXJldHVybiB0aGlzLmdldEFyZ3VtZW50VmFsdWUoIi1wIiwgYXJncyk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGdldERlYnVnTW9kZShTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJcmV0dXJuIHRoaXMuYXJndW1lbnRFeGlzdHMoIi1kZWJ1ZyIsIGFyZ3MpOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRBcmd1bWVudFZhbHVlKFN0cmluZyBhcmd1bWVudCwgU3RyaW5nW10gYXJncykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBhcmcgPSBhcmdzW2ldOwotCQkJaWYgKGFyZy50b0xvd2VyQ2FzZSgpLmVxdWFscyhhcmd1bWVudCkpIHsKLQkJCQlpbnQgaiA9IGkgKyAxOwotCQkJCWlmIChqIDwgYXJncy5sZW5ndGgpIHsKLQkJCQkJcmV0dXJuIGFyZ3Nbal07Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gYXJndW1lbnRFeGlzdHMoU3RyaW5nIGFyZ3VtZW50LCBTdHJpbmdbXSBhcmdzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIGFyZyA9IGFyZ3NbaV07Ci0JCQlpZiAoYXJnLnRvTG93ZXJDYXNlKCkuZXF1YWxzKGFyZ3VtZW50KSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvLyAqKioqKiogdXRpbGl0eSBtZXRob2RzICoqKioqKioKLQkKLSAgICAvKioKLSAgICAgKiBDaGVjayB0aGUgcHJvdmlkZWQgbWFwIGZvciBhbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhhdCBvYmplY3QgaXMgbm90IGF2YWlsYWJsZSwgY2hlY2sgdGhlCi0gICAgICogU3lzdGVtIHByb3BlcnRpZXMuICBJZiBpdCBpcyBub3QgYXZhaWxhYmxlIGZyb20gZWl0aGVyIGxvY2F0aW9uLCByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuCi0gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IAotICAgICAqIEBwYXJhbSBtYXAgCi0gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAKLSAgICAgKiBAcmV0dXJuIAotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q29uZmlnUHJvcGVydHlBc1N0cmluZyhTdHJpbmcgcHJvcGVydHlLZXksIE1hcDxTdHJpbmcsIFN0cmluZz4gb3ZlcnJpZGVzLCBTdHJpbmcgZGVmYXVsdFZhbHVlKXsKLSAgICAJU3RyaW5nIHZhbHVlID0gdGhpcy5nZXRDb25maWdQcm9wZXJ0eUFzU3RyaW5nKHByb3BlcnR5S2V5LCBvdmVycmlkZXMpOwotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCl7Ci0gICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q29uZmlnUHJvcGVydHlBc1N0cmluZyhTdHJpbmcgcHJvcGVydHlLZXksIE1hcDxTdHJpbmcsIFN0cmluZz4gb3ZlcnJpZGVzKXsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gbnVsbDsKLSAgICAgICAgaWYgKG92ZXJyaWRlcyAhPSBudWxsKXsKLSAgICAgICAgICAgIHZhbHVlID0gKFN0cmluZylvdmVycmlkZXMuZ2V0KHByb3BlcnR5S2V5KTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCl7Ci0gICAgICAgICAgICB2YWx1ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLmNsYXNzcGF0aCBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyNTc0MS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InByb3BlcnR5X2ZpbGVzIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuLy5jdnNpZ25vcmUgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTZkZDcuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLUBkb3QKLXRlbXAuZm9sZGVyCi1idWlsZC54bWwKLWphdmFDb21waWxlci4uLmFyZ3MKLWphdmFDb21waWxlci4uLmFyZ3MuKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLnByb2plY3QgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJkNTA4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuZ2VuPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTVmZjIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgSmFuIDE1IDExOjEyOjA3IEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMWQ1MGEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTdW4gTWF5IDI3IDE0OjI4OjU0IEVEVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWI4Y2QwLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanB0LmdlbgotQnVuZGxlLVZlcnNpb246IDEuMy4xMDAucXVhbGlmaWVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpwdC51aSIsCi0gb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC5vbGQ7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuanB0LnVpIiwKLSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWw7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuanB0LnVpIgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmNvcmU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5O2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qcHQuZGI7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM7YnVuZGxlLXZlcnNpb249IjMuMi4wIiwKLSBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZztidW5kbGUtdmVyc2lvbj0iMi4xLjAiLAotIG9yZy5hcGFjaGUub3JvO2J1bmRsZS12ZXJzaW9uPSIyLjAuOCIsCi0gb3JnLmFwYWNoZS52ZWxvY2l0eTtidW5kbGUtdmVyc2lvbj0iMS41LjAiLAotIG9yZy5qZG9tO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotSW1wb3J0LVBhY2thZ2U6IGNvbS5pYm0uaWN1LnRleHQ7dmVyc2lvbj0iNC4wLjEiCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL2Fib3V0Lmh0bWwgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNTM0YmEuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDAyLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vYnVpbGQucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViNjAyNS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSMgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLyxcCi0gICAgICAgICAgICAgICBwcm9wZXJ0eV9maWxlcy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gLixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZW1wbGF0ZXMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL2NvbXBvbmVudC54bWwgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL2NvbXBvbmVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNGUwNGUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9jb21wb25lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y29tcG9uZW50ICB4bWxucz0iaHR0cDovL2VjbGlwc2Uub3JnL3d0cC9yZWxlbmcvdG9vbHMvY29tcG9uZW50LW1vZGVsIiBuYW1lPSJvcmcuZWNsaXBzZS5qcHQuZ2VuIj48ZGVzY3JpcHRpb24gdXJsPSIiPjwvZGVzY3JpcHRpb24+PGNvbXBvbmVudC1kZXBlbmRzIHVucmVzdHJpY3RlZD0idHJ1ZSI+PC9jb21wb25lbnQtZGVwZW5kcz48cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qcHQuZ2VuIiBmcmFnbWVudD0iZmFsc2UiLz48L2NvbXBvbmVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3BsdWdpbi5wcm9wZXJ0aWVzIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlMmQ4ZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyAgQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gCi0jICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSMgIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKLSMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgIAotIyAgQ29udHJpYnV0b3JzOiAKLSMgIAlPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgVG8gY29kZSBkZXZlbG9wZXI6Ci0jICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCi0jICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KLSMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKLSMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotcGx1Z2luTmFtZSA9IERhbGkgSmF2YSBQZXJzaXN0ZW5jZSBUb29scyAtIEVudGl0eSBHZW4KLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3Byb3BlcnR5X2ZpbGVzL2pwdF9nZW4ucHJvcGVydGllcyBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vcHJvcGVydHlfZmlsZXMvanB0X2dlbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWQyNGMxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vcHJvcGVydHlfZmlsZXMvanB0X2dlbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0jIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0jIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVBhY2thZ2VHZW5lcmF0b3JfdGFza05hbWU9R2VuZXJhdGUgRW50aXRpZXMKLUdlblNjb3BlX3Rhc2tOYW1lPUJ1aWxkIERhdGFiYXNlIE1vZGVsCi1FbnRpdHlHZW5lcmF0b3JfdGFza05hbWU9R2VuZXJhdGUgRW50aXR5OiB7MH0KLUVycm9yX0dlbmVyYXRpbmdfRW50aXRpZXMgPSBFcnJvciBHZW5lcmF0aW5nIEVudGl0aWVzCi0KLVRlbXBsYXRlc19ub3RGb3VuZCA9IFVuYWJsZSB0byBmaW5kIEpQQSBlbnRpdGllcyBnZW5lcmF0aW9uIHRlbXBsYXRlcyBpbiBwbHVnaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0Fzc29jaWF0aW9uLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0Fzc29jaWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWE1YTYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9Bc3NvY2lhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsLlN0cmluZ1V0aWw7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBPUk0gYXNzb2NpYXRpb24uCi0gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGFzc29jaWF0aW9uczoKLSAqIDx1bD48bGk+c2ltcGxlIGFzc29jaWF0aW9uOiBBbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHR3byBkYXRhYmFzZSB0YWJsZXMuCi0gKiBUaGUgPGVtPnJlZmVycmVyPC9jb2RlPiB0YWJsZSBpcyB0aGUgb25lIGNvbnRhaW5pbmcgdGhlIGZvcmVpZ24ga2V5Ci0gKiAsIHRoZSA8ZW0+cmVmZXJlbmNlZDwvY29kZT4gdGFibGUgaXMgdGhlIG90aGVyIHBhcnR5Ljxicj4KLSAqIAotICogPGxpPm1hbnkgdG8gbWFueSBhc3NvY2lhdGlvbjogQW4gYXNzb2NpYXRpb24gYmV0d2VlbiB0d28gdGFibGVzIGpvaW5lZCBieSAKLSAqIGEgPGVtPmpvaW4gdGFibGU8L2VtPi4KLSAqIEluIHRoZSBleGFtcGxlIEFVVEhPUiwgQk9PSywgQVVUSE9SX0JPT0ssIFRoZSByZWZlcnJlciBhbmQgcmVmZXJlbmNlZCBhcmUgCi0gKiBBVVRIT1IgYW5kICBCT09LLCBhbmQgdGhlIGpvaW4gdGFibGUgaXMgQVVUSE9SX0JPT0suCi0gKiA8L3VsPgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3NvY2lhdGlvbiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlCi17Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BTllfVE9fT05FID0gIm1hbnktdG8tb25lIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQU5ZX1RPX01BTlkgPSAibWFueS10by1tYW55IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPTkVfVE9fT05FID0gIm9uZS10by1vbmUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9ORV9UT19NQU5ZID0gIm9uZS10by1tYW55IjsKLQkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCSV9ESSA9ICJiaS1kaSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9STUFMX0RJID0gIm5vcm1hbC1kaSI7IC8vcmVmZXJyZXItPnJlZmVyZW5jZWQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFBPU0lURV9ESSA9ICJvcHBvc2l0ZS1kaSI7IC8vcmVmZXJlbmNlZC0+cmVmZXJyZXIKLQkKLQlwcml2YXRlIHRyYW5zaWVudCBPUk1HZW5DdXN0b21pemVyIG1DdXN0b21pemVyOwotCXByaXZhdGUgU3RyaW5nIG1SZWZlcnJlclRhYmxlTmFtZTsKLQlwcml2YXRlIFN0cmluZyBtUmVmZXJlbmNlZFRhYmxlTmFtZTsKLQlwcml2YXRlIFN0cmluZyBtSm9pblRhYmxlTmFtZTsKLQotCXByaXZhdGUgTGlzdDxTdHJpbmc+IG1SZWZlcnJlckNvbE5hbWVzOyAvKlN0cmluZyBvYmplY3RzKi8KLQlwcml2YXRlIExpc3Q8U3RyaW5nPiBtUmVmZXJlbmNlZENvbE5hbWVzOyAvKlN0cmluZyBvYmplY3RzKi8KLQlwcml2YXRlIExpc3Q8U3RyaW5nPiBtUmVmZXJyZXJKb2luQ29sTmFtZXM7IC8qU3RyaW5nIG9iamVjdHMqLwotCXByaXZhdGUgTGlzdDxTdHJpbmc+IG1SZWZlcmVuY2VkSm9pbkNvbE5hbWVzOyAvKlN0cmluZyBvYmplY3RzKi8KLQotCXByaXZhdGUgdHJhbnNpZW50IExpc3Q8T1JNR2VuQ29sdW1uPiBtUmVmZXJyZXJDb2xzOyAvKk9STUdlbkNvbHVtbiBvYmplY3RzKi8KLQlwcml2YXRlIHRyYW5zaWVudCBMaXN0PE9STUdlbkNvbHVtbj4gbVJlZmVyZW5jZWRDb2xzOyAvKk9STUdlbkNvbHVtbiBvYmplY3RzKi8KLQlwcml2YXRlIHRyYW5zaWVudCBMaXN0PE9STUdlbkNvbHVtbj4gbVJlZmVycmVySm9pbkNvbHM7IC8qT1JNR2VuQ29sdW1uIG9iamVjdHMqLwotCXByaXZhdGUgdHJhbnNpZW50IExpc3Q8T1JNR2VuQ29sdW1uPiBtUmVmZXJlbmNlZEpvaW5Db2xzOyAvKk9STUdlbkNvbHVtbiBvYmplY3RzKi8KLQkKLQlwcml2YXRlIFN0cmluZyBtQ2FyZGluYWxpdHk7Ci0JcHJpdmF0ZSBTdHJpbmcgbURpcmVjdGlvbmFsaXR5OwotCXByaXZhdGUgYnl0ZSBtRmxhZ3MgPSBHRU5FUkFURUQ7Ci0JCi0JcHJpdmF0ZSBBc3NvY2lhdGlvblJvbGUgbVJlZmVycmVyUm9sZTsKLQlwcml2YXRlIEFzc29jaWF0aW9uUm9sZSBtUmVmZXJlbmNlZFJvbGU7Ci0KLQlwcml2YXRlIHRyYW5zaWVudCBGb3JlaWduS2V5IG1Gb3JlaWduS2V5OwkKLQkKLQkvKmNvbnN0YW50cyBmb3IgbUZsYWdzKi8KLQkvKndoZXRoZXIgdGhlIGFzc29jaWF0aW9uIHNob3VsZCBiZSBnZW5lcmF0ZWQqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGUgR0VORVJBVEVEID0gMSA8PCAwOwotCS8qd2hldGhlciB0aGUgYXNzb2NpYXRpb24gaXMgY3VzdG9tIChpLmUgaXMgbm90IGF1dG8gY29tcHV0ZWQgZnJvbSBmb3JlaWduIGtleXMgcmVsYXRpb25zaGlwcykuKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlIENVU1RPTSA9IDEgPDwgMTsKLQkKLQkvKioKLQkgKiBUaGUgc2ltcGxlIGFzc29jaWF0aW9uIGNvbnN0cnVjdG9yLgotCSAqIFRoZSAyIHRhYmxlcyBhcmUgam9pbmVkIHdoZW4gdGhlIHZhbHVlcyBvZiBlYWNoIGNvbHVtbiBpbgotCSAqIHJlZmVycmVyQ29sTmFtZXMgbWF0Y2ggaXRzIGNvcnJlc3BvbmRpbmcgY29sdW1uIGluIHJlZmVyZW5jZWRDb2xOYW1lcy4KLQkgKiAKLQkgKiBAcGFyYW0gcmVmZXJyZXJUYWJsZU5hbWUgVGhlICJmb3JlaWduIGtleSIgdGFibGUuCi0JICogQHBhcmFtIHJlZmVycmVyQ29sTmFtZXMgVGhlIGNvbHVtbiBuYW1lcyBpbiB0aGUgcmVmZXJyZXIgdGFibGUuCi0JICogQHBhcmFtIHJlZmVyZW5jZWRUYWJsZU5hbWUgVGhlICJwcmltYXJ5IGtleSIgdGFibGUuCi0JICogQHBhcmFtIHJlZmVyZW5jZWRDb2xOYW1lcyBUaGUgY29sdW1uIG5hbWVzIGluIHRoZSByZWZlcmVuY2VkIHRhYmxlLgotCSAqLwotCXB1YmxpYyBBc3NvY2lhdGlvbihPUk1HZW5DdXN0b21pemVyIGN1c3RvbWl6ZXIsIFN0cmluZyByZWZlcnJlclRhYmxlTmFtZSwgTGlzdDxTdHJpbmc+IHJlZmVycmVyQ29sTmFtZXMKLQkJCSwgU3RyaW5nIHJlZmVyZW5jZWRUYWJsZU5hbWUsIExpc3Q8U3RyaW5nPiByZWZlcmVuY2VkQ29sTmFtZXMpICB7Ci0JCXN1cGVyKCk7Ci0JCQotCQltQ3VzdG9taXplciA9IGN1c3RvbWl6ZXI7Ci0JCW1SZWZlcnJlclRhYmxlTmFtZSA9IHJlZmVycmVyVGFibGVOYW1lOwotCQltUmVmZXJlbmNlZFRhYmxlTmFtZSA9IHJlZmVyZW5jZWRUYWJsZU5hbWU7Ci0JCW1SZWZlcnJlckNvbE5hbWVzID0gcmVmZXJyZXJDb2xOYW1lczsKLQkJbVJlZmVyZW5jZWRDb2xOYW1lcyA9IHJlZmVyZW5jZWRDb2xOYW1lczsKLQkJCi0JCW1DYXJkaW5hbGl0eSA9IE1BTllfVE9fT05FOwotCQltRGlyZWN0aW9uYWxpdHkgPSBCSV9ESTsKLQkJCi0JCXNldEN1c3RvbSh0cnVlKTsKLQl9Ci0JLyoqCi0JICogVGhlIG1hbnkgdG8gbWFueSBjb25zdHJ1Y3Rvci4KLQkgKiBUaGUgMiB0YWJsZXMgYXJlIGpvaW5lZCB3aGVuIHRoZSB2YWx1ZXMgb2YgZWFjaCBjb2x1bW4gaW4KLQkgKiByZWZlcnJlckNvbE5hbWVzIG1hdGNoIGl0cyBjb3JyZXNwb25kaW5nIGNvbHVtbiBpbiByZWZlcnJlckpvaW5Db2xOYW1lcwotCSAqICwgYW5kIGVhY2ggY29sdW1uIGluIHJlZmVyZW5jZWRDb2xOYW1lcyBtYXRjaCBpdHMgY29ycmVzcG9uZGluZyBjb2x1bW4gaW4gcmVmZXJlbmNlZEpvaW5Db2xOYW1lcy4KLQkgKgotCSAqLwotCXB1YmxpYyBBc3NvY2lhdGlvbihPUk1HZW5DdXN0b21pemVyIGN1c3RvbWl6ZXIsIFN0cmluZyByZWZlcnJlclRhYmxlTmFtZSwgTGlzdDxTdHJpbmc+IHJlZmVycmVyQ29sTmFtZXMKLQkJCSwgU3RyaW5nIHJlZmVyZW5jZWRUYWJsZU5hbWUsIExpc3Q8U3RyaW5nPiByZWZlcmVuY2VkQ29sTmFtZXMKLQkJCSwgU3RyaW5nIGpvaW5UYWJsZU5hbWUsIExpc3Q8U3RyaW5nPiByZWZlcnJlckpvaW5Db2xOYW1lcywgTGlzdDxTdHJpbmc+IHJlZmVyZW5jZWRKb2luQ29sTmFtZXMpIHsKLQkJc3VwZXIoKTsKLQkJCi0JCW1DdXN0b21pemVyID0gY3VzdG9taXplcjsKLQkJbVJlZmVycmVyVGFibGVOYW1lID0gcmVmZXJyZXJUYWJsZU5hbWU7Ci0JCW1SZWZlcmVuY2VkVGFibGVOYW1lID0gcmVmZXJlbmNlZFRhYmxlTmFtZTsKLQkJbVJlZmVycmVyQ29sTmFtZXMgPSByZWZlcnJlckNvbE5hbWVzOwotCQltUmVmZXJlbmNlZENvbE5hbWVzID0gcmVmZXJlbmNlZENvbE5hbWVzOwotCQltSm9pblRhYmxlTmFtZSA9IGpvaW5UYWJsZU5hbWU7Ci0JCW1SZWZlcnJlckpvaW5Db2xOYW1lcyA9IHJlZmVycmVySm9pbkNvbE5hbWVzOwotCQltUmVmZXJlbmNlZEpvaW5Db2xOYW1lcyA9IHJlZmVyZW5jZWRKb2luQ29sTmFtZXM7Ci0JCQotCQltQ2FyZGluYWxpdHkgPSBNQU5ZX1RPX01BTlk7CQotCQltRGlyZWN0aW9uYWxpdHkgPSBCSV9ESTsKLQkJCi0JCXNldEN1c3RvbSh0cnVlKTsKLQl9Ci0JLyoqCi0JICogRW1wdHkgY29uc3RydWN0b3IgbmVlZGVkIGJ5IHRoZSBkZXNlcmlhbGl6YXRpb24gKHNob3VsZCBub3QgYmUgdXNlZCBvdGhlcndpc2UpLgotCSAqLwotCXB1YmxpYyBBc3NvY2lhdGlvbigpIHsKLQl9Ci0JLyoqCi0JICogQ29tcHV0ZXMgdGhlIGNhcmRpbmFsaXR5IGJhc2Vkb24gdGhlIGZvcmlnbiBrZXkgZGVmaW5pdGlvbnMuCi0JICovCi0JcHVibGljIHZvaWQgY29tcHV0ZUNhcmRpbmFsaXR5KCkgIHsKLQkJLypieSBkZWZhdWx0IHRoZSBhc3NvY2lhdGlvbiBpcyBtYW55LXRvLW9uZSB1bmxlc3MgdGhlIGZvcmVpZ24ga2V5IAotCQkgKiBpcyBhbHNvIHRoZSBwcmltYXJ5IGtleSwgaW4gd2hpY2ggY2FzZSBpdCBpcyBhIG9uZS10by1vbmUuKi8KLQkJbUNhcmRpbmFsaXR5ID0gTUFOWV9UT19PTkU7Ci0JCQotCQlMaXN0PE9STUdlbkNvbHVtbj4gcmVmZXJyZXJDb2xzID0gZ2V0UmVmZXJyZXJDb2x1bW5zKCk7Ci0JCUxpc3Q8T1JNR2VuQ29sdW1uPiBwa0NvbHMgPSBnZXRSZWZlcnJlclRhYmxlKCkuZ2V0UHJpbWFyeUtleUNvbHVtbnMoKTsKLQkJaWYgKHBrQ29scy5zaXplKCkgPT0gcmVmZXJyZXJDb2xzLnNpemUoKSkgewotCQkJYm9vbGVhbiBpc0ZrUGsgPSB0cnVlOwotCQkJZm9yIChpbnQgaSA9IDAsIG4gPSBwa0NvbHMuc2l6ZSgpOyBpIDwgbjsgKytpKSB7Ci0JCQkJaWYgKCEoKE9STUdlbkNvbHVtbilwa0NvbHMuZ2V0KGkpKS5nZXROYW1lKCkuZXF1YWxzKCgoT1JNR2VuQ29sdW1uKXJlZmVycmVyQ29scy5nZXQoaSkpLmdldE5hbWUoKSkpIHsKLQkJCQkJaXNGa1BrID0gZmFsc2U7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChpc0ZrUGspIHsKLQkJCQltQ2FyZGluYWxpdHkgPSBPTkVfVE9fT05FOwotCQkJfQotCQl9Ci0JCQotCQlzZXRDdXN0b20oZmFsc2UpOwotCX0KLQkvKioKLQkgKiBDYWxsZWQgYWZ0ZXIgdGhlIGFzc2NvY2lhdGlvbnMgYXJlIGRlc2VyaWFsaXplZCB0byBhdHRhY2ggCi0JICogdGhlIGN1c3RvbWl6ZXIgb2JqZWN0LgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHJlc3RvcmUoT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyKSB7Ci0JCW1DdXN0b21pemVyID0gY3VzdG9taXplcjsKLQkJCi0JCWlmIChtUmVmZXJyZXJSb2xlICE9IG51bGwpIHsKLQkJCW1SZWZlcnJlclJvbGUucmVzdG9yZSh0aGlzKTsKLQkJfQotCQlpZiAobVJlZmVyZW5jZWRSb2xlICE9IG51bGwpIHsKLQkJCW1SZWZlcmVuY2VkUm9sZS5yZXN0b3JlKHRoaXMpOwotCQl9Ci0JfQotCXB1YmxpYyBPUk1HZW5UYWJsZSBnZXRSZWZlcnJlclRhYmxlKCkgIHsKLQkJcmV0dXJuIG1DdXN0b21pemVyLmdldFRhYmxlKG1SZWZlcnJlclRhYmxlTmFtZSk7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJyZXJUYWJsZU5hbWUoKSB7Ci0JCXJldHVybiBtUmVmZXJyZXJUYWJsZU5hbWU7Ci0JfQotCXB1YmxpYyBPUk1HZW5UYWJsZSBnZXRSZWZlcmVuY2VkVGFibGUoKSAgewotCQlyZXR1cm4gbUN1c3RvbWl6ZXIuZ2V0VGFibGUobVJlZmVyZW5jZWRUYWJsZU5hbWUpOwotCX0KLQlwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKSB7Ci0JCXJldHVybiBtUmVmZXJlbmNlZFRhYmxlTmFtZTsKLQl9Ci0JcHVibGljIE9STUdlblRhYmxlIGdldEpvaW5UYWJsZSgpICB7Ci0JCXJldHVybiBtQ3VzdG9taXplci5nZXRUYWJsZShtSm9pblRhYmxlTmFtZSk7Ci0JfQotCXB1YmxpYyBTdHJpbmcgZ2V0Sm9pblRhYmxlTmFtZSgpIHsKLQkJcmV0dXJuIG1Kb2luVGFibGVOYW1lOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSA8Y29kZT5PUk1HZW5Db2x1bW48L2NvZGU+IG9iamVjdHMgZm9yIHRoZSByZWZlcnJlcgotCSAqIGNvbHVtbnMuCi0JICovCi0JcHVibGljIExpc3Q8T1JNR2VuQ29sdW1uPiBnZXRSZWZlcnJlckNvbHVtbnMoKSB7Ci0JCWlmIChtUmVmZXJyZXJDb2xzID09IG51bGwpIHsKLQkJCU9STUdlblRhYmxlIHJlZmVycmVyVGFibGUgPSBnZXRSZWZlcnJlclRhYmxlKCk7Ci0JCQltUmVmZXJyZXJDb2xzID0gcmVmZXJyZXJUYWJsZS5nZXRDb2x1bW5zQnlOYW1lcyhtUmVmZXJyZXJDb2xOYW1lcyk7Ci0JCX0KLQkJcmV0dXJuIG1SZWZlcnJlckNvbHM7Ci0JfQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0UmVmZXJyZXJDb2x1bW5OYW1lcygpIHsKLQkJcmV0dXJuIG1SZWZlcnJlckNvbE5hbWVzOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSA8Y29kZT5PUk1HZW5Db2x1bW48L2NvZGU+IG9iamVjdHMgZm9yIHRoZSByZWZlcmVuY2VkCi0JICogY29sdW1ucy4KLQkgKi8KLQlwdWJsaWMgTGlzdDxPUk1HZW5Db2x1bW4+IGdldFJlZmVyZW5jZWRDb2x1bW5zKCkgewotCQlpZiAobVJlZmVyZW5jZWRDb2xzID09IG51bGwpIHsKLQkJCW1SZWZlcmVuY2VkQ29scyA9IGdldFJlZmVyZW5jZWRUYWJsZSgpLmdldENvbHVtbnNCeU5hbWVzKG1SZWZlcmVuY2VkQ29sTmFtZXMpOwotCQl9Ci0JCXJldHVybiBtUmVmZXJlbmNlZENvbHM7Ci0JfQotCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWVzKCkgewotCQlyZXR1cm4gbVJlZmVyZW5jZWRDb2xOYW1lczsKLQl9Ci0JcHVibGljIExpc3Q8T1JNR2VuQ29sdW1uPiBnZXRSZWZlcnJlckpvaW5Db2x1bW5zKCkgewotCQlpZiAobVJlZmVycmVySm9pbkNvbHMgPT0gbnVsbCkgewotCQkJbVJlZmVycmVySm9pbkNvbHMgPSBnZXRKb2luVGFibGUoKS5nZXRDb2x1bW5zQnlOYW1lcyhtUmVmZXJyZXJKb2luQ29sTmFtZXMpOwotCQl9Ci0JCXJldHVybiBtUmVmZXJyZXJKb2luQ29sczsKLQl9Ci0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSZWZlcnJlckpvaW5Db2x1bW5OYW1lcygpIHsKLQkJcmV0dXJuIG1SZWZlcnJlckpvaW5Db2xOYW1lczsKLQl9Ci0JcHVibGljIExpc3Q8T1JNR2VuQ29sdW1uPiBnZXRSZWZlcmVuY2VkSm9pbkNvbHVtbnMoKSAgewotCQlpZiAobVJlZmVyZW5jZWRKb2luQ29scyA9PSBudWxsKSB7Ci0JCQltUmVmZXJlbmNlZEpvaW5Db2xzID0gZ2V0Sm9pblRhYmxlKCkuZ2V0Q29sdW1uc0J5TmFtZXMobVJlZmVyZW5jZWRKb2luQ29sTmFtZXMpOwotCQl9Ci0JCXJldHVybiBtUmVmZXJlbmNlZEpvaW5Db2xzOwotCX0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFJlZmVyZW5jZWRKb2luQ29sdW1uTmFtZXMoKSB7Ci0JCXJldHVybiBtUmVmZXJlbmNlZEpvaW5Db2xOYW1lczsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgYXNzb2NpYXRpb24gY2FyZGluYWxpdHksIG9uZSBvZiB7QGxpbmsgI01BTllfVE9fT05FfXx7QGxpbmsgI01BTllfVE9fTUFOWX0KLQkgKiB8e0BsaW5rICNPTkVfVE9fT05FfXx7QGxpbmsgI09ORV9UT19NQU5ZfQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2FyZGluYWxpdHkoKSB7Ci0JCXJldHVybiBtQ2FyZGluYWxpdHk7Ci0JfQotCXB1YmxpYyB2b2lkIHNldENhcmRpbmFsaXR5KFN0cmluZyBjYXJkaW5hbGl0eSkgewotCQlhc3NlcnQoY2FyZGluYWxpdHkuZXF1YWxzKE1BTllfVE9fT05FKSB8fCBjYXJkaW5hbGl0eS5lcXVhbHMoTUFOWV9UT19NQU5ZKSB8fCBjYXJkaW5hbGl0eS5lcXVhbHMoT05FX1RPX09ORSkgfHwgY2FyZGluYWxpdHkuZXF1YWxzKE9ORV9UT19NQU5ZKSk7Ci0JCW1DYXJkaW5hbGl0eSA9IGNhcmRpbmFsaXR5OwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGlvbiBkaXJlY3Rpb25hbGl0eSwgb25lIG9mIHtAbGluayAjQklfREl9fHtAbGluayAjTk9STUFMX0RJfQotCSAqIHx7QGxpbmsgI09QUE9TSVRFX0RJfQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGlyZWN0aW9uYWxpdHkoKSB7Ci0JCXJldHVybiBtRGlyZWN0aW9uYWxpdHk7Ci0JfQotCXB1YmxpYyB2b2lkIHNldERpcmVjdGlvbmFsaXR5KFN0cmluZyBkaXIpIHsKLQkJYXNzZXJ0KGRpci5lcXVhbHMoQklfREkpIHx8IGRpci5lcXVhbHMoTk9STUFMX0RJKSB8fCBkaXIuZXF1YWxzKE9QUE9TSVRFX0RJKSk7Ci0JCWlmICghZGlyLmVxdWFscyhtRGlyZWN0aW9uYWxpdHkpKSB7Ci0JCQltRGlyZWN0aW9uYWxpdHkgPSBkaXI7Ci0JCQkKLQkJCWlmIChkaXIuZXF1YWxzKE5PUk1BTF9ESSkpIHsKLQkJCQltUmVmZXJlbmNlZFJvbGUgPSBudWxsOwotCQkJfSBlbHNlIGlmIChkaXIuZXF1YWxzKE9QUE9TSVRFX0RJKSkgewotCQkJCW1SZWZlcnJlclJvbGUgPSBudWxsOwotCQkJfQotCQl9Ci0JfQotCQotCS8qKgotCSAqIFRlc3RzIHdoZXRoZXIgdGhpcyBhc3NvY2lhdGlvbiBpcyBiaWRpcmVjdGlvbmFsLgotCSAqIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgPGNvZGU+Z2V0RGlyZWN0aW9uYWxpdHkoKS5lcXVhbHMoQklfREkpPC9jb2RlPi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0JpZGlyZWN0aW9uYWwoKSB7Ci0JCXJldHVybiBtRGlyZWN0aW9uYWxpdHkuZXF1YWxzKEJJX0RJKTsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0cnVlIG9mIHRoaXMgYXNzb2NpYXRpb24gc2hvdWxkIGJlIGdlbmVyYXRlZC4gCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNHZW5lcmF0ZWQoKSB7Ci0JCXJldHVybiAobUZsYWdzICYgR0VORVJBVEVEKSAhPSAwOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZWQoYm9vbGVhbiBnZW5lcmF0ZWQpIHsKLQkJaWYgKGdlbmVyYXRlZCAhPSBpc0dlbmVyYXRlZCgpKSB7Ci0JCQlpZiAoZ2VuZXJhdGVkKSB7Ci0JCQkJbUZsYWdzIHw9IEdFTkVSQVRFRDsKLQkJCX0gZWxzZSB7Ci0JCQkJbUZsYWdzICY9IH5HRU5FUkFURUQ7Ci0JCQl9Ci0JCQltUmVmZXJyZXJSb2xlID0gbVJlZmVyZW5jZWRSb2xlID0gbnVsbDsKLQkJfQotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgb2YgdGhpcyBhc3NvY2lhdGlvbiBpcyBjdXN0b20gKGkuZSBpcyBub3QgYXV0byBjb21wdXRlZCBmcm9tIGZvcmVpZ24ga2V5cyByZWxhdGlvbnNoaXBzKS4gCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDdXN0b20oKSB7Ci0JCXJldHVybiAobUZsYWdzICYgQ1VTVE9NKSAhPSAwOwotCX0KLQlwdWJsaWMgdm9pZCBzZXRDdXN0b20oYm9vbGVhbiBjdXN0b20pIHsKLQkJaWYgKGN1c3RvbSkgewotCQkJbUZsYWdzIHw9IENVU1RPTTsKLQkJfSBlbHNlIHsKLQkJCW1GbGFncyAmPSB+Q1VTVE9NOwotCQl9Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFzc29jaWF0aW9uIHJvbGUgZm9yIHRoZSByZWZlcnJlciBzaWRlLCBvciBudWxsIAotCSAqIGlmIG5vbmUgKGkuZSBpZiB0aGUgZGlyZWN0aW9uYWxpdHkgZG9lcyBub3QgaW5jbHVkZSBpdCkuCi0JICovCi0JcHVibGljIEFzc29jaWF0aW9uUm9sZSBnZXRSZWZlcnJlclJvbGUoKSB7Ci0JCWlmIChtUmVmZXJyZXJSb2xlID09IG51bGwgJiYgaXNHZW5lcmF0ZWQoKSkgewotCQkJaWYgKCFnZXREaXJlY3Rpb25hbGl0eSgpLmVxdWFscyhPUFBPU0lURV9ESSkpIHsgLy9CSV9ESSBvciBOT1JNQUxfREkKLQkJCQltUmVmZXJyZXJSb2xlID0gbmV3IEFzc29jaWF0aW9uUm9sZSh0aGlzLCB0cnVlLyppc1JlZmVycmVyRW5kKi8pOwotCQkJfQotCQl9Ci0JCXJldHVybiBtUmVmZXJyZXJSb2xlOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGlvbiByb2xlIGZvciB0aGUgcmVmZXJlbmNlZCBzaWRlLCBvciBudWxsIAotCSAqIGlmIG5vbmUgKGkuZSBpZiB0aGUgZGlyZWN0aW9uYWxpdHkgZG9lcyBub3QgaW5jbHVkZSBpdCkuCi0JICovCi0JcHVibGljIEFzc29jaWF0aW9uUm9sZSBnZXRSZWZlcmVuY2VkUm9sZSgpIHsKLQkJaWYgKG1SZWZlcmVuY2VkUm9sZSA9PSBudWxsICYmIGlzR2VuZXJhdGVkKCkpIHsKLQkJCWlmICghZ2V0RGlyZWN0aW9uYWxpdHkoKS5lcXVhbHMoQXNzb2NpYXRpb24uTk9STUFMX0RJKSkgeyAvL0JJX0RJIG9yIE9QUE9TSVRFX0RJCi0JCQkJbVJlZmVyZW5jZWRSb2xlID0gbmV3IEFzc29jaWF0aW9uUm9sZSh0aGlzLCBmYWxzZS8qaXNSZWZlcnJlckVuZCovKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbVJlZmVyZW5jZWRSb2xlOwotCX0KLQkvKioKLQkgKiBUZXN0cyB3aGV0aGVyIHRoaXMgYXNzb2NpYXRpb24gaXMgdmFsaWQgKHZhbGlkIHRhYmxlIGFuZCBjb2x1bW4gbmFtZXMpLgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIGlzVmFsaWQoKXsKLQkJaWYgKCFpc1ZhbGlkVGFibGVBbmRDb2x1bW5zKG1SZWZlcnJlclRhYmxlTmFtZSwgbVJlZmVycmVyQ29sTmFtZXMpCi0JCQkJfHwgIWlzVmFsaWRUYWJsZUFuZENvbHVtbnMobVJlZmVyZW5jZWRUYWJsZU5hbWUsIG1SZWZlcmVuY2VkQ29sTmFtZXMpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKG1Kb2luVGFibGVOYW1lICE9IG51bGwpIHsKLQkJCWlmICghaXNWYWxpZFRhYmxlQW5kQ29sdW1ucyhtSm9pblRhYmxlTmFtZSwgbVJlZmVycmVySm9pbkNvbE5hbWVzKQotCQkJCQl8fCAhaXNWYWxpZFRhYmxlQW5kQ29sdW1ucyhtSm9pblRhYmxlTmFtZSwgbVJlZmVyZW5jZWRKb2luQ29sTmFtZXMpKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQkJCQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gaXNWYWxpZFRhYmxlQW5kQ29sdW1ucyhTdHJpbmcgdGFibGVOYW1lLCBMaXN0PFN0cmluZz4gY29sdW1uTmFtZXMpIHsKLQkJT1JNR2VuVGFibGUgdGFibGUgPSBtQ3VzdG9taXplci5nZXRUYWJsZSh0YWJsZU5hbWUpOwotCQlpZiAodGFibGUgPT0gbnVsbCkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwLCBuID0gY29sdW1uTmFtZXMuc2l6ZSgpOyBpIDwgbjsgKytpKSB7Ci0JCQlTdHJpbmcgY29sTmFtZSA9IChTdHJpbmcpY29sdW1uTmFtZXMuZ2V0KGkpOwotCQkJaWYgKHRhYmxlLmdldENvbHVtbkJ5TmFtZShjb2xOYW1lKSA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRGb3JlaWduS2V5KEZvcmVpZ25LZXkgZm9yZWlnbktleSkgewotCQl0aGlzLm1Gb3JlaWduS2V5ID0gZm9yZWlnbktleTsKLQkJCi0JfQotCXB1YmxpYyBGb3JlaWduS2V5IGdldEZvcmVpZ25LZXkoKXsKLQkJcmV0dXJuIHRoaXMubUZvcmVpZ25LZXk7Ci0JfTsJCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQkJaWYoIHRoaXMgPT0gb2JqICkKLQkJCXJldHVybiB0cnVlOwotCQlpZiggb2JqIGluc3RhbmNlb2YgQXNzb2NpYXRpb24gKXsKLQkJCUFzc29jaWF0aW9uIGFzc29jaWF0aW9uMiA9IChBc3NvY2lhdGlvbilvYmo7Ci0JCQlpZiAoIXRoaXMuZ2V0UmVmZXJyZXJUYWJsZU5hbWUoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVycmVyVGFibGVOYW1lKCkpCi0JCQkJCXx8ICF0aGlzLmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKSkKLQkJCQkJfHwgIVN0cmluZ1V0aWwuZXF1YWxPYmplY3RzKHRoaXMuZ2V0Sm9pblRhYmxlTmFtZSgpLCBhc3NvY2lhdGlvbjIuZ2V0Sm9pblRhYmxlTmFtZSgpKQotCQkJCQl8fCAhdGhpcy5nZXRSZWZlcnJlckNvbHVtbk5hbWVzKCkuZXF1YWxzKGFzc29jaWF0aW9uMi5nZXRSZWZlcnJlckNvbHVtbk5hbWVzKCkpCi0JCQkJCXx8ICF0aGlzLmdldFJlZmVyZW5jZWRDb2x1bW5OYW1lcygpLmVxdWFscyhhc3NvY2lhdGlvbjIuZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWVzKCkpCi0JCQkJCSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0JCQkJCQotCQkJLyp0aGUgMiBhc3NvY2lhdGlvbiBoYXZlIHRoZSBzYW1lIHJlZmVycmVyLCByZWZlcmVuY2VkIGFuZCBqb2luIHRhYmxlKi8KLQkJCS8vSWYgTVRPIG9yIE9UTSBhc3NvY2lhdGlvbgotCQkJaWYgKHRoaXMuZ2V0Sm9pblRhYmxlTmFtZSgpID09IG51bGwpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWlmICh0aGlzLmdldFJlZmVycmVySm9pbkNvbHVtbk5hbWVzKCkuZXF1YWxzKGFzc29jaWF0aW9uMi5nZXRSZWZlcnJlckpvaW5Db2x1bW5OYW1lcygpKQotCQkJCQkmJiB0aGlzLmdldFJlZmVyZW5jZWRKb2luQ29sdW1uTmFtZXMoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVyZW5jZWRKb2luQ29sdW1uTmFtZXMoKSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQkKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7Ci0JCXJldHVybiBtUmVmZXJyZXJUYWJsZU5hbWUgKyAiICIgKyBtQ2FyZGluYWxpdHkgKyAiICIgKyBtUmVmZXJlbmNlZFRhYmxlTmFtZSA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9Bc3NvY2lhdGlvblJvbGUuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvQXNzb2NpYXRpb25Sb2xlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NjU0ZmIuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9Bc3NvY2lhdGlvblJvbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBhc3NvY2lhdGlvbiByb2xlICh0aGUgcmVmZXJyZXIgb3IgcmVmZXJlbmNlZCByb2xlKS4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQXNzb2NpYXRpb25Sb2xlIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUKLXsKLQlwcml2YXRlIHRyYW5zaWVudCBBc3NvY2lhdGlvbiBtQXNzb2NpYXRpb247IC8vdHJhbnNpZW50OiBzZWUgcmVzdG9yZQotCXByaXZhdGUgYm9vbGVhbiBtSXNSZWZlcnJlclJvbGU7Ci0JcHJpdmF0ZSBTdHJpbmcgbVByb3BlcnR5TmFtZTsKLQlwcml2YXRlIFN0cmluZyBtQ2FzY2FkZTsKLQkKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxOwotCQkKLQlBc3NvY2lhdGlvblJvbGUoQXNzb2NpYXRpb24gYXNzb2NpYXRpb24sIGJvb2xlYW4gaXNSZWZlcnJlclJvbGUpIHsKLQkJc3VwZXIoKTsKLQkJCi0JCW1Bc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9uOwotCQltSXNSZWZlcnJlclJvbGUgPSBpc1JlZmVycmVyUm9sZTsKLQl9Ci0JCi0JLyoqCi0JICogRW1wdHkgY29uc3RydWN0b3IgbmVlZGVkIGJ5IHRoZSBkZXNlcmlhbGl6YXRpb24gKHNob3VsZCBub3QgYmUgdXNlZCBvdGhlcndpc2UpLgotCSAqLwotCXB1YmxpYyBBc3NvY2lhdGlvblJvbGUoKSB7Ci0JfQotCQotCS8qKgotCSAqIENhbGxlZCBhZnRlciB0aGUgYXNzY29jaWF0aW9ucyBhcmUgZGVzZXJpYWxpemVkIHRvIGF0dGFjaCAKLQkgKiB0aGUgY3VzdG9taXplciBvYmplY3QuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcmVzdG9yZShBc3NvY2lhdGlvbiBhc3NvY2lhdGlvbikgewotCQltQXNzb2NpYXRpb24gPSBhc3NvY2lhdGlvbjsKLQl9Ci0JCi0JcHVibGljIEFzc29jaWF0aW9uIGdldEFzc29jaWF0aW9uKCkgewotCQlyZXR1cm4gbUFzc29jaWF0aW9uOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1JlZmVycmVyUm9sZSgpIHsKLQkJcmV0dXJuIG1Jc1JlZmVycmVyUm9sZTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgb3Bwb3NpdGUgcm9sZSBvciBudWxsIGlmIHRoZSBhc3NvY2lhdGlvbiAKLQkgKiBpcyBub3QgYmkgZGlyZWN0aW9uYWwuCi0JICovCi0JcHVibGljIEFzc29jaWF0aW9uUm9sZSBnZXRPcHBvc2l0ZVJvbGUoKSB7Ci0JCUFzc29jaWF0aW9uIGFzc29jaWF0aW9uID0gZ2V0QXNzb2NpYXRpb24oKTsKLQkJaWYgKCFhc3NvY2lhdGlvbi5nZXREaXJlY3Rpb25hbGl0eSgpLmVxdWFscyhBc3NvY2lhdGlvbi5CSV9ESSkpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCWlmIChpc1JlZmVycmVyUm9sZSgpKSB7Ci0JCQlyZXR1cm4gYXNzb2NpYXRpb24uZ2V0UmVmZXJlbmNlZFJvbGUoKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBhc3NvY2lhdGlvbi5nZXRSZWZlcnJlclJvbGUoKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGlvbiBjYXJkaW5hbGl0eSwgb25lIG9mIHtAbGluayAjTUFOWV9UT19PTkV9fHtAbGluayAjTUFOWV9UT19NQU5ZfQotCSAqIHx7QGxpbmsgI09ORV9UT19PTkV9fHtAbGluayAjT05FX1RPX01BTll9Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRDYXJkaW5hbGl0eSgpIHsKLQkJU3RyaW5nIHR5cGUgPSBtQXNzb2NpYXRpb24uZ2V0Q2FyZGluYWxpdHkoKTsKLQkJaWYgKCFtSXNSZWZlcnJlclJvbGUpIHsKLQkJCWlmICh0eXBlLmVxdWFscyhBc3NvY2lhdGlvbi5PTkVfVE9fTUFOWSkpIHsKLQkJCQl0eXBlID0gQXNzb2NpYXRpb24uTUFOWV9UT19PTkU7Ci0JCQl9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKEFzc29jaWF0aW9uLk1BTllfVE9fT05FKSkgewotCQkJCXR5cGUgPSBBc3NvY2lhdGlvbi5PTkVfVE9fTUFOWTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHlwZTsKLQl9Ci0JCi0JcHVibGljIE9STUdlblRhYmxlIGdldFJlZmVycmVyVGFibGUoKSB7Ci0JCWlmIChtSXNSZWZlcnJlclJvbGUpIHsKLQkJCXJldHVybiBtQXNzb2NpYXRpb24uZ2V0UmVmZXJyZXJUYWJsZSgpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIG1Bc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkVGFibGUoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdDxPUk1HZW5Db2x1bW4+IGdldFJlZmVycmVyQ29sdW1ucygpewotCQlpZiAobUlzUmVmZXJyZXJSb2xlKSB7Ci0JCQlyZXR1cm4gbUFzc29jaWF0aW9uLmdldFJlZmVycmVyQ29sdW1ucygpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIG1Bc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkQ29sdW1ucygpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHJlZmVyZW5jZWQgY29sdW1uIGNvcnJlc3BvbmRpbmcgdG8gYSByZWZlcnJlciBjb2x1bW4uCi0JICovCi0JcHVibGljIE9STUdlbkNvbHVtbiBnZXRSZWZlcmVuY2VkQ29sdW1uKFN0cmluZyByZWZlcnJlckNvbHVtbikgIHsKLQkJYm9vbGVhbiBoYXNKb2luVGFibGUgPSBtQXNzb2NpYXRpb24uZ2V0Sm9pblRhYmxlKCkgIT0gbnVsbDsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IHJlZmVycmVyQ29sdW1ucyA9IGdldFJlZmVycmVyQ29sdW1ucygpOwotCQlmb3IgKGludCBpID0gMCwgbiA9IHJlZmVycmVyQ29sdW1ucy5zaXplKCk7IGkgPCBuOyArK2kpIHsKLQkJCU9STUdlbkNvbHVtbiBjb2x1bW4gPSByZWZlcnJlckNvbHVtbnMuZ2V0KGkpOwotCQkJaWYgKGNvbHVtbi5nZXROYW1lKCkuZXF1YWxzKHJlZmVycmVyQ29sdW1uKSkgewotCQkJCWlmIChoYXNKb2luVGFibGUpIHsKLQkJCQkJcmV0dXJuIGdldFJlZmVycmVySm9pbkNvbHVtbnMoKS5nZXQoaSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0dXJuIGdldFJlZmVyZW5jZWRDb2x1bW5zKCkuZ2V0KGkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnQoZmFsc2UpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcmVmZXJyZXIgY29sdW1uIGNvcnJlc3BvbmRpbmcgdG8gYSByZWZlcmVuY2VkIGNvbHVtbi4KLQkgKi8KLQlwdWJsaWMgT1JNR2VuQ29sdW1uIGdldFJlZmVycmVyQ29sdW1uKFN0cmluZyByZWZlcmVuY2VkQ29sdW1uKSAgewotCQlib29sZWFuIGhhc0pvaW5UYWJsZSA9IG1Bc3NvY2lhdGlvbi5nZXRKb2luVGFibGUoKSAhPSBudWxsOwotCQlMaXN0PE9STUdlbkNvbHVtbj4gcmVmZXJlbmNlZENvbHVtbnMgPSBnZXRSZWZlcmVuY2VkQ29sdW1ucygpOwotCQlmb3IgKGludCBpID0gMCwgbiA9IHJlZmVyZW5jZWRDb2x1bW5zLnNpemUoKTsgaSA8IG47ICsraSkgewotCQkJT1JNR2VuQ29sdW1uIGNvbHVtbiA9IHJlZmVyZW5jZWRDb2x1bW5zLmdldChpKTsKLQkJCWlmIChjb2x1bW4uZ2V0TmFtZSgpLmVxdWFscyhyZWZlcmVuY2VkQ29sdW1uKSkgewotCQkJCWlmIChoYXNKb2luVGFibGUpIHsKLQkJCQkJcmV0dXJuIGdldFJlZmVyZW5jZWRKb2luQ29sdW1ucygpLmdldChpKTsKLQkJCQl9IGVsc2UgewotCQkJCQlyZXR1cm4gZ2V0UmVmZXJyZXJDb2x1bW5zKCkuZ2V0KGkpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnQoZmFsc2UpOwotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JcHVibGljIE9STUdlblRhYmxlIGdldFJlZmVyZW5jZWRUYWJsZSgpICB7Ci0JCWlmIChtSXNSZWZlcnJlclJvbGUpIHsKLQkJCXJldHVybiBtQXNzb2NpYXRpb24uZ2V0UmVmZXJlbmNlZFRhYmxlKCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gbUFzc29jaWF0aW9uLmdldFJlZmVycmVyVGFibGUoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdDxPUk1HZW5Db2x1bW4+IGdldFJlZmVyZW5jZWRDb2x1bW5zKCkgIHsKLQkJaWYgKG1Jc1JlZmVycmVyUm9sZSkgewotCQkJcmV0dXJuIG1Bc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkQ29sdW1ucygpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIG1Bc3NvY2lhdGlvbi5nZXRSZWZlcnJlckNvbHVtbnMoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgTGlzdDxPUk1HZW5Db2x1bW4+IGdldFJlZmVycmVySm9pbkNvbHVtbnMoKSAgewotCQlpZiAobUlzUmVmZXJyZXJSb2xlKSB7Ci0JCQlyZXR1cm4gbUFzc29jaWF0aW9uLmdldFJlZmVycmVySm9pbkNvbHVtbnMoKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBtQXNzb2NpYXRpb24uZ2V0UmVmZXJlbmNlZEpvaW5Db2x1bW5zKCk7Ci0JCX0KLQl9Ci0JcHVibGljIExpc3Q8T1JNR2VuQ29sdW1uPiBnZXRSZWZlcmVuY2VkSm9pbkNvbHVtbnMoKSAgewotCQlpZiAobUlzUmVmZXJyZXJSb2xlKSB7Ci0JCQlyZXR1cm4gbUFzc29jaWF0aW9uLmdldFJlZmVyZW5jZWRKb2luQ29sdW1ucygpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIG1Bc3NvY2lhdGlvbi5nZXRSZWZlcnJlckpvaW5Db2x1bW5zKCk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmF0b3IgZm9yIAotCSAqIHRoZSBwcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcm9sZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZSgpICAgewotCQlpZiAobVByb3BlcnR5TmFtZSAhPSBudWxsKSB7IC8vaWYgdGhlIHVzZXIgZXhwbGljaXRseSBzZXQgaXQgdGhlbiBkb24ndCBiZSB0b28gc21hcnQKLQkJCXJldHVybiBtUHJvcGVydHlOYW1lOwotCQl9Ci0JCXJldHVybiBnZXREZWZhdWx0UHJvcGVydHlOYW1lKCk7Ci0JfQotCQkKLQlwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0UHJvcGVydHlOYW1lKCkgewotCQlTdHJpbmcgcHJvcE5hbWUgPSAiIjsKLQkJT1JNR2VuVGFibGUgcmVmZXJyZXJUYWJsZSA9IGdldFJlZmVycmVyVGFibGUoKTsKLQkJT1JNR2VuVGFibGUgcmVmZXJlbmNlZFRhYmxlID0gZ2V0UmVmZXJlbmNlZFRhYmxlKCk7Ci0KLQkJYm9vbGVhbiBpc1Npbmd1bGFyID0gaXNTaW5ndWxhcigpOwotCQlwcm9wTmFtZSA9IHJlZmVyZW5jZWRUYWJsZS5nZXRWYXJOYW1lKGlzU2luZ3VsYXIpOwotCQkKLQkJTGlzdDxBc3NvY2lhdGlvblJvbGU+IGNsYXNoaW5nUm9sZXMgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxBc3NvY2lhdGlvblJvbGU+KCk7IC8vcm9sZXMgd2l0aCBvdXIgc2FtZSByZWZlcnJlciBhbmQgcmVmZXJlbmNlZCB0YWJsZXMgKGkuZSB3b3VsZCB5aWVsZCB0aGUgc2FtZSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBzYW1lIGJlYW4pCi0JCS8qbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHJvbGUgd2l0aCB0aGUgc2FtZSBuYW1lLiovCi0JCWZvciAoSXRlcmF0b3I8QXNzb2NpYXRpb25Sb2xlPiBpdGVyID0gcmVmZXJyZXJUYWJsZS5nZXRBc3NvY2lhdGlvblJvbGVzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7ICkgewotCQkJQXNzb2NpYXRpb25Sb2xlIHJvbGUgPSBpdGVyLm5leHQoKTsKLQkJCWlmIChyb2xlLmdldFJlZmVycmVyVGFibGUoKS5nZXROYW1lKCkuZXF1YWxzKHJlZmVycmVyVGFibGUuZ2V0TmFtZSgpKQotCQkJCQkmJiByb2xlLmdldFJlZmVyZW5jZWRUYWJsZSgpLmdldE5hbWUoKS5lcXVhbHMocmVmZXJlbmNlZFRhYmxlLmdldE5hbWUoKSkKLQkJCQkJJiYgcm9sZS5pc1Npbmd1bGFyKCkgPT0gaXNTaW5ndWxhcikgewotCQkJCWNsYXNoaW5nUm9sZXMuYWRkKHJvbGUpOwotCQkJfQotCQl9Ci0JCWlmIChjbGFzaGluZ1JvbGVzLnNpemUoKSA+IDEpIHsKLQkJCWludCBpbmRleCA9IGNsYXNoaW5nUm9sZXMuaW5kZXhPZih0aGlzKTsKLQkJCWFzc2VydChpbmRleCA+PSAwKTsKLQkJCXByb3BOYW1lICs9IGluZGV4KzE7Ci0JCX0KLQkJCi0JCS8qbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGNvbHVtbiB3aXRoIHRoZSBzYW1lIG5hbWUuKi8KLQkJZm9yIChJdGVyYXRvcjxPUk1HZW5Db2x1bW4+IGl0ZXIgPSByZWZlcnJlclRhYmxlLmdldENvbHVtbnMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKSB7Ci0JCQlPUk1HZW5Db2x1bW4gY29sdW1uID0gaXRlci5uZXh0KCk7Ci0JCQlpZiAoY29sdW1uLmdldFByb3BlcnR5TmFtZSgpLmVxdWFscyhwcm9wTmFtZSkpIHsKLQkJCQlTdHJpbmcgcHJlZml4ID0gaXNTaW5ndWxhciA/ICJCZWFuIiA6ICJTZXQiOwotCQkJCXByb3BOYW1lICs9IHByZWZpeDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIHByb3BOYW1lOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNTaW5ndWxhcigpIHsKLQkJU3RyaW5nIGNhcmRpbmFsaXR5ID0gZ2V0Q2FyZGluYWxpdHkoKTsKLQkJcmV0dXJuIGNhcmRpbmFsaXR5LmVxdWFscyhBc3NvY2lhdGlvbi5PTkVfVE9fT05FKSB8fCBjYXJkaW5hbGl0eS5lcXVhbHMoQXNzb2NpYXRpb24uTUFOWV9UT19PTkUpOwotCX0KLQkKLQkvKioKLQkgKiBDaGFuZ2VzIHRoZSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGdlbmVyYXRvciBmb3IgCi0JICogdGhlIHByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyByb2xlLgotCSAqIElmIHRoZSBhcmd1bWVudCBuYW1lIGlzIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRoZW4gdGhlIAotCSAqIGRlZmF1bHQgY29tcHV0ZWQgbmFtZSBpcyB1c2VkLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgbmFtZSkgIHsKLQkJaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lLmxlbmd0aCgpID09IDApIHsKLQkJCW5hbWUgPSBudWxsOwotCQl9Ci0JCWlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5lcXVhbHMoZ2V0RGVmYXVsdFByb3BlcnR5TmFtZSgpKSkgewotCQkJbmFtZSA9IG51bGw7Ci0JCX0KLQkJbVByb3BlcnR5TmFtZSA9IG5hbWU7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNhc2NhZGUgdmFsdWUgZm9yIHRoaXMgcm9sZSwgb3IgbnVsbCBpZiBub25lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2FzY2FkZSgpIHsKLQkJcmV0dXJuIG1DYXNjYWRlOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRDYXNjYWRlKFN0cmluZyBjYXNjYWRlKSB7Ci0JCWlmIChjYXNjYWRlICE9IG51bGwgJiYgY2FzY2FkZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQljYXNjYWRlID0gbnVsbDsKLQkJfQotCQltQ2FzY2FkZSA9IGNhc2NhZGU7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgYSBkZXNjcmlwdGl2ZSBzdHJpbmcgdXNlZCBpbiBhIGNvbW1lbnQgaW4gdGhlIGdlbmVyYXRlZCAKLQkgKiBmaWxlIChmcm9tIHRoZSBWZWxvY2l0eSB0ZW1wbGF0ZSkuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpICB7Ci0JCS8vPCEtLSAkZGlyZWN0aW9uYWxpdHkgJGNhcmRpbmFsaXR5IGFzc29jaWF0aW9uIHRvICRyZWZlcmVuY2VkQ2xhc3NOYW1lIC0tPgotCQlTdHJpbmcgZGlyZWN0aW9uYWxpdHk7Ci0JCWlmIChnZXRBc3NvY2lhdGlvbigpLmdldERpcmVjdGlvbmFsaXR5KCkuZXF1YWxzKEFzc29jaWF0aW9uLkJJX0RJKSkgewotCQkJZGlyZWN0aW9uYWxpdHkgPSAiYmktZGlyZWN0aW9uYWwiOwotCQl9IGVsc2UgewotCQkJZGlyZWN0aW9uYWxpdHkgPSAidW5pLWRpcmVjdGlvbmFsIjsKLQkJfQotCQlyZXR1cm4gZGlyZWN0aW9uYWxpdHkgKyAiICIgKyBnZXRBc3NvY2lhdGlvbigpLmdldENhcmRpbmFsaXR5KCkgKyAiIGFzc29jaWF0aW9uIHRvICIgKyBnZXRSZWZlcmVuY2VkVGFibGUoKS5nZXRDbGFzc05hbWUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0Jhc2VFbnRpdHlHZW5DdXN0b21pemVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0Jhc2VFbnRpdHlHZW5DdXN0b21pemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExOTMxZWMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9CYXNlRW50aXR5R2VuQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuRFRQVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbDsKLQotLyoqCi0gKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIE9STUdlbkN1c3RvbWl6ZXIgYWNjb3JkaW5nIHRvIEpQQSBzcGVjaWZpY2F0aW9uIGZvcgotICogZW50aXR5IGdlbmVyYXRpb24uCi0gKiAKLSAqIFRoaXMgaXMgdXNlZCB0byByZXRyaWV2ZS9jaGFuZ2UgdGhlIHByb3BlcnRpZXMgZnJvbSB0aGUgd2l6YXJkIGFuZCBpcyBhbHNvCi0gKiBwYXNzZWQgYXMgYSBjb250ZXh0IG9iamVjdCB0byBWZWxvY2l0eS4KLSAqLwotcHVibGljIGNsYXNzIEJhc2VFbnRpdHlHZW5DdXN0b21pemVyIGV4dGVuZHMgT1JNR2VuQ3VzdG9taXplcgotCWltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUKLXsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxOwotCi0JLyogbWFwcGluZyBraW5kcyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNJQ19NQVBQSU5HX0tJTkQgPSAiYmFzaWMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01BUFBJTkdfS0lORCA9ICJpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSU0lPTl9NQVBQSU5HX0tJTkQgPSAidmVyc2lvbiI7IC8vJE5PTi1OTFMtMSQKLQotCS8qCi0JICogdGhlIHN0cmluZ3MgZm9yIGdlbmVyYXRvciBuYW1lcy4gVGhlc2UgYXBwZWFyIGluIGEgY29tYm8gYm94IGFuZCB1c2VkIGJ5Ci0JICogdGhlIFZlbG9jaXR5IHRlbXBsYXRlIHByb2Nlc3NpbmcuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVVE9fR0VORVJBVE9SID0gImF1dG8iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVfR0VORVJBVE9SID0gIm5vbmUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USVRZX0dFTkVSQVRPUiA9ICJpZGVudGl0eSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VRVUVOQ0VfR0VORVJBVE9SID0gInNlcXVlbmNlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9HRU5FUkFUT1IgPSAidGFibGUiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgQmFzZUVudGl0eUdlbkN1c3RvbWl6ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdChGaWxlIGZpbGUsIFNjaGVtYSBzY2hlbWEpIHsKLQkJc3VwZXIuaW5pdChmaWxlLCBzY2hlbWEpOwotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gLS0tLS0tIE9STUdlbkN1c3RvbWl6ZXIgbWV0aG9kcwotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JQE92ZXJyaWRlCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRBbGxJZEdlbmVyYXRvcnMoKSB7Ci0JCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxTdHJpbmc+KDUpOwotCQkvKiBhZGQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd291bGQgYXBwZWFyIGluIHRoZSBjb21ibyAqLwotCQlyZXN1bHQuYWRkKEFVVE9fR0VORVJBVE9SKTsKLQkJcmVzdWx0LmFkZChJREVOVElUWV9HRU5FUkFUT1IpOwotCQlyZXN1bHQuYWRkKFNFUVVFTkNFX0dFTkVSQVRPUik7Ci0JCXJlc3VsdC5hZGQoVEFCTEVfR0VORVJBVE9SKTsKLQkJcmVzdWx0LmFkZChOT05FX0dFTkVSQVRPUik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXROb0lkR2VuZXJhdG9yKCkgewotCQlyZXR1cm4gTk9ORV9HRU5FUkFUT1I7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRJZGVudGl0eUlkR2VuZXJhdG9yKCkgewotCQlyZXR1cm4gSURFTlRJVFlfR0VORVJBVE9SOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRTZXF1ZW5jZUlkR2VuZXJhdG9ycygpIHsKLQkJU2V0PFN0cmluZz4gcmVzdWx0ID0gbmV3IGphdmEudXRpbC5IYXNoU2V0PFN0cmluZz4oMyk7Ci0JCXJlc3VsdC5hZGQoU0VRVUVOQ0VfR0VORVJBVE9SKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VHlwZUZyb21Db2x1bW4oQ29sdW1uIGNvbHVtbikgewotCQlyZXR1cm4gRFRQVXRpbC5nZXRKYXZhVHlwZShjb2x1bW4pOwotCX0KLQotCUBPdmVycmlkZQotCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBbGxQcm9wZXJ0eVR5cGVzKCkgewotCQkvKgotCQkgKiBKYXZhIHByaW1pdGl2ZSB0eXBlcywgd3JhcHBlciBvZiB0aGUgcHJpbWl0aXZlIHR5cGVzICwKLQkJICogamF2YS5sYW5nLlN0cmluZywgamF2YS5tYXRoLkJpZ0ludGVnZXIsIGphdmEubWF0aC5CaWdEZWNpbWFsLAotCQkgKiBqYXZhLnV0aWwuRGF0ZSwgamF2YS51dGlsLkNhbGVuZGFyLCBqYXZhLnNxbC5EYXRlLCBqYXZhLnNxbC5UaW1lLAotCQkgKiBqYXZhLnNxbC5UaW1lc3RhbXAsIGJ5dGVbXSwgQnl0ZVtdLCBjaGFyW10sIENoYXJhY3RlcltdLCBlbnVtcywgYW5kCi0JCSAqIGFueSBvdGhlciB0eXBlIHRoYXQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUuCi0JCSAqLwotCQkvLyByZXR1cm4gaW4gdGhlIG9yZGVyIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBjb21ibwotCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsKLQkJCSJib29sZWFuIiwKLQkJCSJCb29sZWFuIiwKLQkJCSJieXRlIiwKLQkJCSJCeXRlIiwKLQkJCSJieXRlW10iLAotCQkJImNoYXIiLAotCQkJImNoYXJbXSIsCi0JCQkiQ2hhcmFjdGVyIiwKLQkJCSJDaGFyYWN0ZXJbXSIsCi0JCQkiZG91YmxlIiwKLQkJCSJEb3VibGUiLAotCQkJImZsb2F0IiwKLQkJCSJGbG9hdCIsCi0JCQkiaW50IiwKLQkJCSJJbnRlZ2VyIiwKLQkJCSJsb25nIiwKLQkJCSJMb25nIiwKLQkJCSJPYmplY3QiLAotCQkJInNob3J0IiwKLQkJCSJTaG9ydCIsCi0JCQkiU3RyaW5nIiwKLQkJCWphdmEubWF0aC5CaWdEZWNpbWFsLmNsYXNzLmdldE5hbWUoKSwKLQkJCWphdmEubWF0aC5CaWdJbnRlZ2VyLmNsYXNzLmdldE5hbWUoKSwKLQkJCWphdmEudXRpbC5DYWxlbmRhci5jbGFzcy5nZXROYW1lKCksCi0JCQlqYXZhLnV0aWwuRGF0ZS5jbGFzcy5nZXROYW1lKCksCi0JCQlqYXZhLnNxbC5EYXRlLmNsYXNzLmdldE5hbWUoKSwKLQkJCWphdmEuc3FsLlRpbWUuY2xhc3MuZ2V0TmFtZSgpLAotCQkJamF2YS5zcWwuVGltZXN0YW1wLmNsYXNzLmdldE5hbWUoKQotCQl9OwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmdbXSBnZXRBbGxNYXBwaW5nS2luZHMoKSB7Ci0JCXJldHVybiBuZXcgU3RyaW5nW10gewotCQkJQkFTSUNfTUFQUElOR19LSU5ELCBJRF9NQVBQSU5HX0tJTkQsIFZFUlNJT05fTUFQUElOR19LSU5ECi0JCX07Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRCYXNpY01hcHBpbmdLaW5kKCkgewotCQlyZXR1cm4gQkFTSUNfTUFQUElOR19LSU5EOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0SWRNYXBwaW5nS2luZCgpIHsKLQkJcmV0dXJuIElEX01BUFBJTkdfS0lORDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlZGl0Q2FzY2FkZShBc3NvY2lhdGlvblJvbGUgcm9sZSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gbWFueVNpZGVJc0Fzc29jaWF0aW9uT3duZXIoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gLS0tLSBWZWxvY2l0eSB0ZW1wbGF0ZXMgbWV0aG9kcwotCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY2FzY2FkZXMgYW5ub3RhdGlvbiBtZW1iZXIgdmFsdWUsIG9yIGVtcHR5IHN0cmluZyBpZiBub25lLgotCSAqIEVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIG51bGwgYmVjYXVzZSBWZWxvY2l0eSBkb2VzIG5vdCBsaWtlCi0JICogbnVsbCB3aGVuIHVzZWQgaW4gI3NldC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdlbkNhc2NhZGVzKEFzc29jaWF0aW9uUm9sZSByb2xlKSB7Ci0JCUxpc3Q8U3RyaW5nPiBjYXNjYWRlcyA9IFN0cmluZ1V0aWwuc3RyVG9MaXN0KHJvbGUuZ2V0Q2FzY2FkZSgpLCAnLCcsIHRydWUvKiB0cmltICovKTsKLQkJaWYgKGNhc2NhZGVzID09IG51bGwpIHsKLQkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1ZmZlci5hcHBlbmQoICd7JyApOwotCQlmb3IgKGludCBpID0gMCwgbiA9IGNhc2NhZGVzLnNpemUoKTsgaSA8IG47ICsraSkgewotCQkJU3RyaW5nIGNhc2NhZGUgPSBjYXNjYWRlcy5nZXQoaSk7Ci0JCQlTdHJpbmcgZW51bVN0cjsKLQkJCWlmIChjYXNjYWRlLmVxdWFscyhUYWdOYW1lcy5BTExfQ0FTQ0FERSkpIHsKLQkJCQllbnVtU3RyID0gIkNhc2NhZGVUeXBlLkFMTCI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWVsc2UgaWYgKGNhc2NhZGUuZXF1YWxzKFRhZ05hbWVzLlBFUlNJU1RfQ0FTQ0FERSkpIHsKLQkJCQllbnVtU3RyID0gIkNhc2NhZGVUeXBlLlBFUlNJU1QiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQllbHNlIGlmIChjYXNjYWRlLmVxdWFscyhUYWdOYW1lcy5NRVJHRV9DQVNDQURFKSkgewotCQkJCWVudW1TdHIgPSAiQ2FzY2FkZVR5cGUuTUVSR0UiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQllbHNlIGlmIChjYXNjYWRlLmVxdWFscyhUYWdOYW1lcy5SRU1PVkVfQ0FTQ0FERSkpIHsKLQkJCQllbnVtU3RyID0gIkNhc2NhZGVUeXBlLlJFTU9WRSI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydCAoY2FzY2FkZS5lcXVhbHMoVGFnTmFtZXMuUkVGUkVTSF9DQVNDQURFKSk7Ci0JCQkJZW51bVN0ciA9ICJDYXNjYWRlVHlwZS5SRUZSRVNIIjsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKGkgIT0gMCkgewotCQkJCWJ1ZmZlci5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQoZW51bVN0cik7Ci0JCX0KLQkJYnVmZmVyLmFwcGVuZCgnfScpOwotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmV0Y2ggdHlwZSBhbm5vdGF0aW9uIG1lbWJlciB2YWx1ZSwgb3IgZW1wdHkgc3RyaW5nIGlmIG5vbmUuCi0JICogRW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGluc3RlYWQgb2YgbnVsbCBiZWNhdXNlIFZlbG9jaXR5IGRvZXMgbm90IGxpa2UKLQkgKiBudWxsIHdoZW4gdXNlZCBpbiAjc2V0LgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2VuRmV0Y2goT1JNR2VuVGFibGUgdGFibGUpIHsKLQkJU3RyaW5nIGZldGNoID0gdGFibGUuZ2V0RGVmYXVsdEZldGNoKCk7Ci0JCWlmIChmZXRjaCA9PSBudWxsIHx8IE9STUdlblRhYmxlLkRFRkFVTFRfRkVUQ0guZXF1YWxzKGZldGNoKSkgewotCQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZSBpZiAoZmV0Y2guZXF1YWxzKE9STUdlblRhYmxlLkxBWllfRkVUQ0gpKSB7Ci0JCQlyZXR1cm4gIkZldGNoVHlwZS5MQVpZIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgewotCQkJcmV0dXJuICJGZXRjaFR5cGUuRUFHRVIiOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0RhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0RhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OTQyNTYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9EYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlRhYmxlOwotCi0KLS8qKgotICogUHJvdmlkZSBhIHBsdWdnYWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW5kIGhvdyB0aGUgZW50aXR5IGdlbmVyYXRvcgotICogcHJpbnRzIHRoZSBuYW1lcyBvZiB2YXJpb3VzIGRhdGFiYXNlIG9iamVjdHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgewotCi0JLyoqCi0JICogR2l2ZW4gdGhlIG5hbWUgb2YgYW4gZW50aXR5IGFuZCB0aGUgdGFibGUgdG8gd2hpY2ggaXQgaXMgbWFwcGVkLAotCSAqIGJ1aWxkIGFuZCByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBlbnRpdHkncwotCSAqIFRhYmxlIGFubm90YXRpb24ncyAnbmFtZScgZWxlbWVudC4gUmV0dXJuIG51bGwgaWYgdGhlIGVudGl0eQotCSAqIG1hcHMgdG8gdGhlIHRhYmxlIGJ5IGRlZmF1bHQuCi0JICovCi0JU3RyaW5nIGJ1aWxkVGFibGVBbm5vdGF0aW9uTmFtZShTdHJpbmcgZW50aXR5TmFtZSwgVGFibGUgdGFibGUpOwotCi0JLyoqCi0JICogR2l2ZW4gdGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIChmaWVsZCBvciBwcm9wZXJ0eSkgYW5kIHRoZSBjb2x1bW4KLQkgKiB0byB3aGljaCBpdCBpcyBtYXBwZWQsCi0JICogYnVpbGQgYW5kIHJldHVybiBhIHN0cmluZyB0byBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZSdzCi0JICogQ29sdW1uIGFubm90YXRpb24ncyAnbmFtZScgZWxlbWVudC4gUmV0dXJuIG51bGwgaWYgdGhlIGF0dHJpYnV0ZQotCSAqIG1hcHMgdG8gdGhlIGNvbHVtbiBieSBkZWZhdWx0LgotCSAqLwotCVN0cmluZyBidWlsZENvbHVtbkFubm90YXRpb25OYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBDb2x1bW4gY29sdW1uKTsKLQotCS8qKgotCSAqIEdpdmVuIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSAoZmllbGQgb3IgcHJvcGVydHkpIGFuZCB0aGUKLQkgKiBtYW55LXRvLW9uZSBvciBtYW55LXRvLW1hbnkgZm9yZWlnbiBrZXkgdG8gd2hpY2ggaXQgaXMgbWFwcGVkLAotCSAqIGJ1aWxkIGFuZCByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBhdHRyaWJ1dGUncwotCSAqIEpvaW5Db2x1bW4gYW5ub3RhdGlvbidzICduYW1lJyBlbGVtZW50LiBSZXR1cm4gbnVsbCBpZiB0aGUgYXR0cmlidXRlCi0JICogbWFwcyB0byB0aGUgam9pbiBjb2x1bW4gYnkgZGVmYXVsdC4KLQkgKiBUaGUgc3BlY2lmaWVkIGZvcmVpZ24ga2V5IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGNvbHVtbiBwYWlyIHdob3NlCi0JICogcmVmZXJlbmNlZCBjb2x1bW4gaXMgdGhlIHNpbmdsZS1jb2x1bW4gcHJpbWFyeSBrZXkgb2YgdGhlIGZvcmVpZ24KLQkgKiBrZXkncyByZWZlcmVuY2VkIHRhYmxlLgotCSAqLwotCVN0cmluZyBidWlsZEpvaW5Db2x1bW5Bbm5vdGF0aW9uTmFtZShTdHJpbmcgYXR0cmlidXRlTmFtZSwgRm9yZWlnbktleSBmb3JlaWduS2V5KTsKLQotCS8qKgotCSAqIEJ1aWxkIGFuZCByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgSm9pbkNvbHVtbgotCSAqIGFubm90YXRpb24ncyAnbmFtZScgb3IgJ3JlZmVyZW5jZWRDb2x1bW5OYW1lJyBlbGVtZW50LgotCSAqIFRoaXMgaXMgY2FsbGVkIGZvciBtYW55LXRvLW9uZSBhbmQgbWFueS10by1tYW55IG1hcHBpbmdzIHdoZW4KLQkgKiB0aGUgZGVmYXVsdCBqb2luIGNvbHVtbiBuYW1lIGFuZC9vciByZWZlcmVuY2VkIGNvbHVtbiBuYW1lIGFyZS9pcwotCSAqIG5vdCBhcHBsaWNhYmxlLgotCSAqIEBzZWUgYnVpbGRKb2luQ29sdW1uQW5ub3RhdGlvbk5hbWUoU3RyaW5nLCBGb3JlaWduS2V5KQotCSAqLwotCVN0cmluZyBidWlsZEpvaW5Db2x1bW5Bbm5vdGF0aW9uTmFtZShDb2x1bW4gY29sdW1uKTsKLQotCS8qKgotCSAqIEJ1aWxkIGFuZCByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIGEgSm9pblRhYmxlCi0JICogYW5ub3RhdGlvbidzICduYW1lJyBlbGVtZW50LgotCSAqIFRoaXMgaXMgY2FsbGVkIGZvciBtYW55LXRvLW1hbnkgbWFwcGluZ3Mgd2hlbiB0aGUgZGVmYXVsdAotCSAqIGpvaW4gdGFibGUgbmFtZSBpcyBub3QgYXBwbGljYWJsZS4KLQkgKi8KLQlTdHJpbmcgYnVpbGRKb2luVGFibGVBbm5vdGF0aW9uTmFtZShUYWJsZSB0YWJsZSk7Ci0KLQotCS8qKgotCSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBsZSByZXR1cm5zIHRoZSBkYXRhYmFzZSBvYmplY3QncyBuYW1lLAotCSAqIHVuYWx0ZXJlZC4KLQkgKi8KLQlmaW5hbCBjbGFzcyBEZWZhdWx0IGltcGxlbWVudHMgRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgewotCQlwdWJsaWMgc3RhdGljIGZpbmFsIERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyIElOU1RBTkNFID0gbmV3IERlZmF1bHQoKTsKLQkJcHVibGljIHN0YXRpYyBEYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlciBpbnN0YW5jZSgpIHsKLQkJCXJldHVybiBJTlNUQU5DRTsKLQkJfQotCQkvLyBlbnN1cmUgc2luZ2xlIGluc3RhbmNlCi0JCXByaXZhdGUgRGVmYXVsdCgpIHsKLQkJCXN1cGVyKCk7Ci0JCX0KLQkJcHVibGljIFN0cmluZyBidWlsZFRhYmxlQW5ub3RhdGlvbk5hbWUoU3RyaW5nIGVudGl0eU5hbWUsIFRhYmxlIHRhYmxlKSB7Ci0JCQlyZXR1cm4gdGFibGUuZ2V0TmFtZSgpOwotCQl9Ci0JCXB1YmxpYyBTdHJpbmcgYnVpbGRDb2x1bW5Bbm5vdGF0aW9uTmFtZShTdHJpbmcgYXR0cmlidXRlTmFtZSwgQ29sdW1uIGNvbHVtbikgewotCQkJcmV0dXJuIGNvbHVtbi5nZXROYW1lKCk7Ci0JCX0KLQkJcHVibGljIFN0cmluZyBidWlsZEpvaW5Db2x1bW5Bbm5vdGF0aW9uTmFtZShTdHJpbmcgYXR0cmlidXRlTmFtZSwgRm9yZWlnbktleSBmb3JlaWduS2V5KSB7Ci0JCQlyZXR1cm4gZm9yZWlnbktleS5nZXRDb2x1bW5QYWlyKCkuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKTsKLQkJfQotCQlwdWJsaWMgU3RyaW5nIGJ1aWxkSm9pbkNvbHVtbkFubm90YXRpb25OYW1lKENvbHVtbiBjb2x1bW4pIHsKLQkJCXJldHVybiBjb2x1bW4uZ2V0TmFtZSgpOwotCQl9Ci0JCXB1YmxpYyBTdHJpbmcgYnVpbGRKb2luVGFibGVBbm5vdGF0aW9uTmFtZShUYWJsZSB0YWJsZSkgewotCQkJcmV0dXJuIHRhYmxlLmdldE5hbWUoKTsKLQkJfQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCXJldHVybiAiRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIuRGVmYXVsdCI7ICAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvSnB0R2VuTWVzc2FnZXMuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvSnB0R2VuTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyY2U2MS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0pwdEdlbk1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi0vKioKLSAqIExvY2FsaXplZCBtZXNzYWdlcyB1c2VkIGJ5IERhbGkgZW50aXR5IGdlbmVyYXRpb24uCi0gKi8KLWNsYXNzIEpwdEdlbk1lc3NhZ2VzIHsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBhY2thZ2VHZW5lcmF0b3JfdGFza05hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgR2VuU2NvcGVfdGFza05hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgRW50aXR5R2VuZXJhdG9yX3Rhc2tOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRlbXBsYXRlc19ub3RGb3VuZDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFcnJvcl9HZW5lcmF0aW5nX0VudGl0aWVzOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gImpwdF9nZW4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3M8Pz4gQlVORExFX0NMQVNTID0gSnB0R2VuTWVzc2FnZXMuY2xhc3M7Ci0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQlVORExFX0NMQVNTKTsKLQl9Ci0JCi0JcHJpdmF0ZSBKcHRHZW5NZXNzYWdlcygpIHsKLQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0pwdEdlblBsdWdpbi5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9KcHRHZW5QbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0MGMyMC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL0pwdEdlblBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotcHVibGljIGNsYXNzIEpwdEdlblBsdWdpbiB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmpwdC5nZW4iOwotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24gKCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgZSApIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlJTG9nIGxvZyA9IFBsYXRmb3JtLmdldExvZyhidW5kbGUpOwotCQlsb2cubG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCBtc2csIGUgKSk7CQkKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbiggQ29yZUV4Y2VwdGlvbiBjZSApIHsKLQkJSVN0YXR1cyBzdGF0dXMgPSBjZS5nZXRTdGF0dXMoKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlJTG9nIGxvZyA9IFBsYXRmb3JtLmdldExvZyhidW5kbGUpOwotCQlsb2cubG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCBzdGF0dXMuZ2V0TWVzc2FnZSgpLCBjZSkpOwkJCi0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9PUk1HZW5Db2x1bW4uamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT1JNR2VuQ29sdW1uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4N2FlMTMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9PUk1HZW5Db2x1bW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZC5FbnRpdHlHZW5Ub29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuRFRQVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuU3RyaW5nVXRpbDsKLQotCi0vKioKLSAqIFJlcHJlc2VudHMgdGhlIE9STSBnZW5lcmF0aW9uIHByb3BlcnRpZXMgZm9yIGEgZGF0YWJhc2UgCi0gKiBjb2x1bW4uCi0gKiAKLSAqIDxwPlRoaXMgaXMgZGVzaWduZWQgdG8gYmUgY3JlYXRlZC9jaGFuZ2VkIGJ5IHRoZSBnZW5lcmF0aW9uIHdpemFyZCwKLSAqIGFuZCBnZW5lcmF0ZWQgdXNpbmcgVmVsb2NpdHkgdGVtcGxhdGVzLgotICogVGhlIG1vZGlmaWVkIHByb3BlcnRpZXMgKGlmIGFueSkgYXJlIHBlcnNpc3RlZC9yZXRyaWV2ZWQgdXNpbmcgCi0gKiA8Y29kZT5PUk1HZW5DdXN0b21pemVyPC9jb2RlPi4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgT1JNR2VuQ29sdW1uCi17Ci0JcHJpdmF0ZSBUYWJsZSBtVGFibGU7Ci0JcHJpdmF0ZSBDb2x1bW4gbURiQ29sdW1uOwotCXByaXZhdGUgT1JNR2VuQ3VzdG9taXplciBtQ3VzdG9taXplcjsKLQlwcml2YXRlIE9STUdlblRhYmxlIG1HZW5UYWJsZTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgSkFWQV9MQU5HX1BBQ0tBR0UgPSAiamF2YS5sYW5nLiI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwdWJsaWMgT1JNR2VuQ29sdW1uKENvbHVtbiBkYkNvbHVtbiwgT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyKSB7Ci0JCXN1cGVyKCk7Ci0JCQotCQltRGJDb2x1bW4gPSBkYkNvbHVtbjsKLQkJbUN1c3RvbWl6ZXIgPSBjdXN0b21pemVyOwotCQltVGFibGUgPSBkYkNvbHVtbi5nZXRUYWJsZSgpOwotCX0KLQkKLQlwdWJsaWMgT1JNR2VuQ3VzdG9taXplciBnZXRDdXN0b21pemVyKCkgewotCQlyZXR1cm4gbUN1c3RvbWl6ZXI7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldEdlblRhYmxlKE9STUdlblRhYmxlIG9ybUdlblRhYmxlKSB7Ci0JCW1HZW5UYWJsZSA9IG9ybUdlblRhYmxlOwotCX0KLQkKLQlwcm90ZWN0ZWQgU3RyaW5nIGN1c3RvbWl6ZWQoU3RyaW5nIHByb3BOYW1lKSB7Ci0JCXJldHVybiBnZXRDdXN0b21pemVyKCkuZ2V0UHJvcGVydHkocHJvcE5hbWUsIG1UYWJsZS5nZXROYW1lKCksIGdldE5hbWUoKSk7Ci0JfQotCQotCXByb3RlY3RlZCBib29sZWFuIGN1c3RvbWl6ZWRCb29sZWFuKFN0cmluZyBwcm9wTmFtZSkgewotCQlyZXR1cm4gZ2V0Q3VzdG9taXplcigpLmdldEJvb2xlYW5Qcm9wZXJ0eShwcm9wTmFtZSwgbVRhYmxlLmdldE5hbWUoKSwgZ2V0TmFtZSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0Q3VzdG9taXplZChTdHJpbmcgcHJvcE5hbWUsIFN0cmluZyB2YWx1ZSkgewotCQlpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGgoKSA9PSAwKSB7Ci0JCQl2YWx1ZSA9IG51bGw7Ci0JCX0KLQkJZ2V0Q3VzdG9taXplcigpLnNldFByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgbVRhYmxlLmdldE5hbWUoKSwgZ2V0TmFtZSgpKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0Q3VzdG9taXplZEJvb2xlYW4oU3RyaW5nIHByb3BOYW1lLCBib29sZWFuIHZhbHVlLCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgewotCQlpZiAoZGVmYXVsdFZhbHVlID09IHZhbHVlKSB7Ci0JCQlzZXRDdXN0b21pemVkKHByb3BOYW1lLCBudWxsKTsgLy9yZW1vdmUgdGhlIHByb3BlcnR5Ci0JCX0gZWxzZSB7Ci0JCQlnZXRDdXN0b21pemVyKCkuc2V0Qm9vbGVhblByb3BlcnR5KHByb3BOYW1lLCB2YWx1ZSwgbVRhYmxlLmdldE5hbWUoKSwgZ2V0TmFtZSgpKTsKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb2x1bW4gbmFtZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCVN0cmluZyBhbm5vdGF0aW9uTmFtZSA9IHRoaXMubUN1c3RvbWl6ZXIuZ2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoKS4KLQkJCWJ1aWxkQ29sdW1uQW5ub3RhdGlvbk5hbWUobURiQ29sdW1uLmdldE5hbWUoKSwgbURiQ29sdW1uKTsKLQkJcmV0dXJuIGFubm90YXRpb25OYW1lICE9IG51bGwgPyBhbm5vdGF0aW9uTmFtZSA6IG1EYkNvbHVtbi5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRKb2luQ29sdW1uTmFtZSgpewotCQlTdHJpbmcgYW5ub3RhdGlvbk5hbWUgPSB0aGlzLm1DdXN0b21pemVyLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuCi0JCQlidWlsZEpvaW5Db2x1bW5Bbm5vdGF0aW9uTmFtZShtRGJDb2x1bW4pOwotCQlyZXR1cm4gYW5ub3RhdGlvbk5hbWUgIT0gbnVsbCA/IGFubm90YXRpb25OYW1lIDogbURiQ29sdW1uLmdldE5hbWUoKTsKLQl9Ci0JCi0JcHVibGljIENvbHVtbiBnZXREYkNvbHVtbigpIHsKLQkJcmV0dXJuIHRoaXMubURiQ29sdW1uOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgYmVhbiBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZ2l2ZW4gY29sdW1uLgotCSAqIERvZXMgbm90IHJldHVybiBudWxsLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgewotCQlTdHJpbmcgbmFtZSA9IGN1c3RvbWl6ZWQoUFJPUEVSVFlfTkFNRSk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCS8vbmFtZSA9IFN0cmluZ1V0aWwuY29sdW1uTmFtZVRvVmFyTmFtZShnZXROYW1lKCkpOwotCQkJbmFtZSA9IEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoZ2V0TmFtZSgpLCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eU5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJaWYgKCFTdHJpbmdVdGlsLmVxdWFsT2JqZWN0cyhuYW1lLCBnZXRQcm9wZXJ0eU5hbWUoKSkpIHsKLQkJCXNldEN1c3RvbWl6ZWQoUFJPUEVSVFlfTkFNRSwgbmFtZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBvZiBuYW1lIGVsZW1lbnQgaW4gdGhlIEBDb2x1bW4gaXMgZGVmYXVsdAotCSAqIHNvIHdlIGNhbiBza2lwIGdlbmVyYXRpbmcgdGhlIGFubm90YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIHRydWUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHQoKXsKLQkJcmV0dXJuIGlzRGVmYXVsdG5hbWUoKSAmJiBpc1VwZGF0ZWFibGUoKSAmJiBpc0luc2VydGFibGUoKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlcyBvZiBuYW1lIGVsZW1lbnQgaW4gdGhlIEBDb2x1bW4gaXMgZGVmYXVsdAotCSAqIHNvIHdlIGNhbiBza2lwIGdlbmVyYXRpbmcgdGhlIGFubm90YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIHRydWUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHRuYW1lKCl7Ci0JCVN0cmluZyBwcm9wTmFtZSA9IGdldFByb3BlcnR5TmFtZSgpOwotLy8JCVN0cmluZyBkYkNvbHVtbk5hbWUgPSBnZXROYW1lKCk7Ci0vLwkJcmV0dXJuIHByb3BOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIGRiQ29sdW1uTmFtZSApOwotCQlTdHJpbmcgYW5ub3RhdGlvbk5hbWUgPSB0aGlzLm1DdXN0b21pemVyLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuCi0JCQlidWlsZENvbHVtbkFubm90YXRpb25OYW1lKHByb3BOYW1lLCB0aGlzLm1EYkNvbHVtbiApOwotCQlyZXR1cm4gYW5ub3RhdGlvbk5hbWU9PW51bGw7Ci0JfQotCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY29sdW1uIHR5cGUuCi0JICogRG9lcyBub3QgcmV0dXJuIG51bGwuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVR5cGUoKSAgewotCQlTdHJpbmcgdHlwZSA9IGN1c3RvbWl6ZWQoUFJPUEVSVFlfVFlQRSk7Ci0JCWlmICh0eXBlID09IG51bGwpIHsKLQkJCXR5cGUgPSBnZXRDdXN0b21pemVyKCkuZ2V0UHJvcGVydHlUeXBlRnJvbUNvbHVtbiggdGhpcy5tRGJDb2x1bW4gKTsKLQkJfQotCQlpZiggdHlwZS5zdGFydHNXaXRoKEpBVkFfTEFOR19QQUNLQUdFKSApIHsKLQkJCXR5cGUgPSB0eXBlLnN1YnN0cmluZyggSkFWQV9MQU5HX1BBQ0tBR0UubGVuZ3RoKCkgKTsKLQkJfQotCQlpZiggdHlwZS5lcXVhbHMoImphdmEuc3FsLkRhdGUiKSl7Ci0JCQl0eXBlID0gImphdmEudXRpbC5EYXRlIjsKLQkJfQotCQkJCi0JCXJldHVybiB0eXBlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNpbXBsZVByb3BlcnR5VHlwZSgpICB7Ci0JCXJldHVybiBtR2VuVGFibGUuZ2V0U2ltcGxpZmllZENvbFR5cGUoIGdldFByb3BlcnR5VHlwZSgpICk7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVR5cGUoU3RyaW5nIHR5cGUpICB7Ci0JCWlmICghU3RyaW5nVXRpbC5lcXVhbE9iamVjdHModHlwZSwgZ2V0UHJvcGVydHlUeXBlKCkpKSB7Ci0JCQlzZXRDdXN0b21pemVkKFBST1BFUlRZX1RZUEUsIHR5cGUpOwotCQl9Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sdW1uIHR5cGUgaXMgbnVtZXJpYy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc051bWVyaWMoKSB7Ci0JCWJvb2xlYW4gcmV0ID0gdGhpcy5tRGJDb2x1bW4uaXNOdW1lcmljKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIG1hcHBpbmcga2luZCwgb25lIG9mIHtAbGluayAjUFJPUEVSVFlfTUFQUElOR19LSU5EfXx7QGxpbmsgI0lEX01BUFBJTkdfS0lORH0KLQkgKiB8e0BsaW5rICNWRVJTSU9OX01BUFBJTkdfS0lORH18e0BsaW5rICNUSU1FU1RBTVBfTUFQUElOR19LSU5EfS4KLQkgKiAKLQkgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gbnVsbCAoZGVmYXVsdHMgdG8gYmFzaWMgcHJvcGVydHkgdHlwZSkuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRNYXBwaW5nS2luZCgpIHsKLQkJU3RyaW5nIGtpbmQgPSBjdXN0b21pemVkKE1BUFBJTkdfS0lORCk7Ci0JCWlmIChraW5kID09IG51bGwpIHsKLQkJCWtpbmQgPSBnZXRDdXN0b21pemVyKCkuZ2V0QmFzaWNNYXBwaW5nS2luZCgpOwotCQkJCi0JCQlpZiAoIHRoaXMubURiQ29sdW1uLmlzUGFydE9mUHJpbWFyeUtleSgpIAotCQkJCSAmJiB0aGlzLm1EYkNvbHVtbi5nZXRUYWJsZSgpLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpID09IDEpIHsKLQkJCQlraW5kID0gZ2V0Q3VzdG9taXplcigpLmdldElkTWFwcGluZ0tpbmQoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4ga2luZDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TWFwcGluZ0tpbmQoU3RyaW5nIG1hcHBpbmdLaW5kKSAgewotCQlpZiAoIVN0cmluZ1V0aWwuZXF1YWxPYmplY3RzKG1hcHBpbmdLaW5kLCBnZXRNYXBwaW5nS2luZCgpKSkgewotCQkJc2V0Q3VzdG9taXplZChNQVBQSU5HX0tJTkQsIG1hcHBpbmdLaW5kKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc051bGxhYmxlKCkgewotCQlyZXR1cm4gdGhpcy5tRGJDb2x1bW4uaXNOdWxsYWJsZSgpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0U2l6ZSgpIHsKLQkJaWYgKCB0aGlzLm1EYkNvbHVtbi5pc051bWVyaWMoKSl7Ci0JCQlyZXR1cm4gbURiQ29sdW1uLmdldFByZWNpc2lvbigpOwotCQl9Ci0JCXJldHVybiBtRGJDb2x1bW4uZ2V0TGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIGludCBnZXREZWNpbWFsRGlnaXRzKCkgewotCQlpZiAoIHRoaXMubURiQ29sdW1uLmlzTnVtZXJpYygpICl7Ci0JCQlyZXR1cm4gbURiQ29sdW1uLmdldFNjYWxlKCk7Ci0JCX0KLQkJcmV0dXJuIC0xOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1ByaW1hcnlLZXkoKSB7Ci0JCXJldHVybiB0aGlzLm1EYkNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNQYXJ0T2ZDb21wb3NpdGVQcmltYXJ5S2V5KCkgewotCQlyZXR1cm4gdGhpcy5tRGJDb2x1bW4uaXNQYXJ0T2ZQcmltYXJ5S2V5KCkgJiYKLQkJCQl0aGlzLm1UYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSA+IDE7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGlzRm9yZWlnbktleSgpIHsKLQkJcmV0dXJuIHRoaXMubURiQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc1VuaXF1ZSgpIHsKLQkJcmV0dXJuIHRoaXMubURiQ29sdW1uLmlzUGFydE9mVW5pcXVlQ29uc3RyYWludCgpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5RGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiBjdXN0b21pemVkKFBST1BFUlRZX0RFU0MpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0RhdGFUeXBlTE9CKCkgewotCQlyZXR1cm4gdGhpcy5tRGJDb2x1bW4uaXNMT0IoKTsKLQl9CQotCi0JcHVibGljIGJvb2xlYW4gaXNOZWVkTWFwVGVtcG9yYWxUeXBlKCkgewotCQlTdHJpbmcgcHJvcGVydHlUeXBlID0gdGhpcy5nZXRQcm9wZXJ0eVR5cGUoKTsKLQkJcmV0dXJuICggcHJvcGVydHlUeXBlLmVxdWFscygiamF2YS51dGlsLkRhdGUiKSB8fCBwcm9wZXJ0eVR5cGUuZXF1YWxzKCJqYXZhLnV0aWwuQ2FsZW5kYXIiKSApOyAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JfQkKLQkKLQlwdWJsaWMgU3RyaW5nIGdldFRlbXBvcmFsVHlwZSgpIHsKLQkJU3RyaW5nIGRlZmF1bHRUeXBlID0gZ2V0Q3VzdG9taXplcigpLmdldFByb3BlcnR5VHlwZUZyb21Db2x1bW4oIHRoaXMubURiQ29sdW1uICk7Ci0JCWlmKCBkZWZhdWx0VHlwZS5lcXVhbHMoImphdmEuc3FsLkRhdGUiKSl7IC8vJE5PTi1OTFMtMSQKLQkJCXJldHVybiAiREFURSI7IC8vJE5PTi1OTFMtMSQKLQkJfWVsc2UgaWYoIGRlZmF1bHRUeXBlLmVxdWFscygiamF2YS5zcWwuVGltZSIpKXsgLy8kTk9OLU5MUy0xJAotCQkJcmV0dXJuICJUSU1FIjsgLy8kTk9OLU5MUy0xJAotCQl9ZWxzZSB7Ci0JCQlyZXR1cm4gIlRJTUVTVEFNUCI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCX0JCi0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIHByb3BlcnR5IGdldHRlciBzY29wZSwgb25lIG9mIHtAbGluayAjUFVCTElDX1NDT1BFfXx7QGxpbmsgI1BST1RFQ1RFRF9TQ09QRX0KLQkgKiB8e0BsaW5rICNQUklWQVRFX1NDT1BFfS4KLQkgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwgKGRlZmF1bHRzIHRvIHB1YmxpYykuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eUdldFNjb3BlKCkgewotCQlTdHJpbmcgc2NvcGUgPSBjdXN0b21pemVkKFBST1BFUlRZX0dFVF9TQ09QRSk7Ci0JCWlmIChzY29wZSA9PSBudWxsKSB7Ci0JCQlzY29wZSA9IFBVQkxJQ19TQ09QRTsKLQkJfQotCQlyZXR1cm4gc2NvcGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5R2V0U2NvcGUoU3RyaW5nIHNjb3BlKSB7Ci0JCWlmICghU3RyaW5nVXRpbC5lcXVhbE9iamVjdHMoc2NvcGUsIGdldFByb3BlcnR5R2V0U2NvcGUoKSkpIHsKLQkJCXNldEN1c3RvbWl6ZWQoUFJPUEVSVFlfR0VUX1NDT1BFLCBzY29wZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIHByb3BlcnR5IHNldHRlciBzY29wZSwgb25lIG9mIHtAbGluayAjUFVCTElDX1NDT1BFfXx7QGxpbmsgI1BST1RFQ1RFRF9TQ09QRX0KLQkgKiB8e0BsaW5rICNQUklWQVRFX1NDT1BFfS4KLQkgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwgKGRlZmF1bHRzIHRvIHB1YmxpYykuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVNldFNjb3BlKCkgewotCQlTdHJpbmcgc2NvcGUgPSBjdXN0b21pemVkKFBST1BFUlRZX1NFVF9TQ09QRSk7Ci0JCWlmIChzY29wZSA9PSBudWxsKSB7Ci0JCQlzY29wZSA9IFBVQkxJQ19TQ09QRTsKLQkJfQotCQlyZXR1cm4gc2NvcGU7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5U2V0U2NvcGUoU3RyaW5nIHNjb3BlKSB7Ci0JCWlmICghU3RyaW5nVXRpbC5lcXVhbE9iamVjdHMoc2NvcGUsIGdldFByb3BlcnR5U2V0U2NvcGUoKSkpIHsKLQkJCXNldEN1c3RvbWl6ZWQoUFJPUEVSVFlfU0VUX1NDT1BFLCBzY29wZSk7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGZpZWxkIG1lbWJlciBzY29wZSwgb25lIG9mIHtAbGluayAjUFVCTElDX1NDT1BFfXx7QGxpbmsgI1BST1RFQ1RFRF9TQ09QRX0KLQkgKiB8e0BsaW5rICNQUklWQVRFX1NDT1BFfS4KLQkgKiBUaGlzIG1ldGhvZCBuZXZlciByZXR1cm5zIG51bGwgKGRlZmF1bHRzIHRvIHByaXZhdGUpLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RmllbGRTY29wZSgpIHsKLQkJU3RyaW5nIHNjb3BlID0gY3VzdG9taXplZChGSUVMRF9TQ09QRSk7Ci0JCWlmIChzY29wZSA9PSBudWxsKSB7Ci0JCQlzY29wZSA9IFBSSVZBVEVfU0NPUEU7Ci0JCX0KLQkJcmV0dXJuIHNjb3BlOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgaW4gdGhlIAotCSAqIDxjb2RlPmVxdWFsczwvY29kZT4gbWV0aG9kIGltcGxlbWVudGF0aW9uLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzVXNlSW5FcXVhbHMoKSAgewotCQlyZXR1cm4gY3VzdG9taXplZEJvb2xlYW4oVVNFX0lOX0VRVUFMUykgfHwgaXNQcmltYXJ5S2V5KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFVzZUluRXF1YWxzKGJvb2xlYW4gdmFsdWUpIHsKLQkJc2V0Q3VzdG9taXplZEJvb2xlYW4oVVNFX0lOX0VRVUFMUywgdmFsdWUsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoaXMgY29sdW1uIHNob3VsZCBiZSB1c2VkIGluIHRoZSAKLQkgKiA8Y29kZT50b1N0cmluZzwvY29kZT4gbWV0aG9kIGltcGxlbWVudGF0aW9uLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzVXNlSW5Ub1N0cmluZygpICB7Ci0JCXJldHVybiBjdXN0b21pemVkQm9vbGVhbihVU0VfSU5fVE9fU1RSSU5HKSB8fCBpc1ByaW1hcnlLZXkoKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VXNlSW5Ub1N0cmluZyhib29sZWFuIHZhbHVlKSB7Ci0JCXNldEN1c3RvbWl6ZWRCb29sZWFuKFVTRV9JTl9UT19TVFJJTkcsIHZhbHVlLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGlzVXBkYXRlYWJsZSgpIHsKLQkJcmV0dXJuICEiZmFsc2UiLmVxdWFscyhjdXN0b21pemVkKFVQREFURUFCTEUpKTsgLy9kZWZhdWx0cyB0byB0cnVlIC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0VXBkYXRlYWJsZShib29sZWFuIHZhbHVlKSB7Ci0JCXNldEN1c3RvbWl6ZWRCb29sZWFuKFVQREFURUFCTEUsIHZhbHVlLCB0cnVlKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNJbnNlcnRhYmxlKCkgewotCQlyZXR1cm4gISJmYWxzZSIuZXF1YWxzKGN1c3RvbWl6ZWQoSU5TRVJUQUJMRSkpOyAvL2RlZmF1bHRzIHRvIHRydWUgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRJbnNlcnRhYmxlKGJvb2xlYW4gdmFsdWUpIHsKLQkJc2V0Q3VzdG9taXplZEJvb2xlYW4oSU5TRVJUQUJMRSwgdmFsdWUsIHRydWUpOwotCX0KLQkKLQlwdWJsaWMgYm9vbGVhbiBpc0dlbmVyYXRlZCgpIHsKLQkJcmV0dXJuICEiZmFsc2UiLmVxdWFscyhjdXN0b21pemVkKEdFTkVSQVRFRCkpOyAvL2RlZmF1bHRzIHRvIHRydWUgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlzZXRDdXN0b21pemVkQm9vbGVhbihHRU5FUkFURUQsIHZhbHVlLCB0cnVlKTsKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuICJuYW1lPSIgKyBnZXROYW1lKCkgKyAiOyB0eXBlPSIgKyBnZXRQcm9wZXJ0eVR5cGUoKSA7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKLQl9Ci0KLQkvKmdldC9zZXQgYW5kIGZpZWxkIHNjb3BlcyovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCTElDX1NDT1BFID0gInB1YmxpYyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9URUNURURfU0NPUEUgPSAicHJvdGVjdGVkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSSVZBVEVfU0NPUEUgPSAicHJpdmF0ZSI7IC8vJE5PTi1OTFMtMSQKLQotCS8qY3VzdG9taXphdGlvbiBwcm9wZXJ0aWVzKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfTkFNRSA9ICJwcm9wZXJ0eU5hbWUiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfVFlQRSA9ICJwcm9wZXJ0eVR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUElOR19LSU5EID0gIm1hcHBpbmdLaW5kIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9ERVNDID0gInByb3BlcnR5RGVzYyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfR0VUX1NDT1BFID0gInByb3BlcnR5R2V0U2NvcGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX1NFVF9TQ09QRSA9ICJwcm9wZXJ0eVNldFNjb3BlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUVMRF9TQ09QRSA9ICJmaWVsZFNjb3BlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfSU5fRVFVQUxTID0gInVzZUluRXF1YWxzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfSU5fVE9fU1RSSU5HID0gInVzZUluVG9TdHJpbmciOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQREFURUFCTEUgPSAidXBkYXRlYWJsZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TRVJUQUJMRSA9ICJpbnNlcnRhYmxlIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHRU5FUkFURUQgPSAiZ2VuUHJvcGVydHkiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL09STUdlbkN1c3RvbWl6ZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT1JNR2VuQ3VzdG9taXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDI2OTRlLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT1JNR2VuQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuRFRQVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsLkZvcmVpZ25LZXlJbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwudXRpbC5TdHJpbmdVdGlsOwotCi0vKioKLSAqIENvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgZGF0YWJhc2Ugc2NoZW1hIHRvIE9STSBlbnRpdHkgCi0gKiBnZW5lcmF0aW9uLgotICogCi0gKiA8cD5UaGUgY3VzdG9taXphdGlvbiBzZXR0aW5ncyBhcmUgbWFpbmx5IGV4cG9zZWQgaW4gdGhlIGZvcm0gb2YgCi0gKiBwcm9wZXJ0aWVzLiBUaGVyZSBhcmUgbm8gYXNzdW1wdGlvbnMgaW4gdGhpcyBjbGFzcyBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgCi0gKiBwcm9wZXJ0eSBuYW1lcy4gUHJvcGVydGllcyBjYW4gYmUgYXNzb2NpYXRlZCB0byBzcGVjaWZpYyB0YWJsZXMgYW5kIHRhYmxlIAotICogY29sdW1ucywgb3IgZ2xvYmFsbHkgZm9yIGFueSB0YWJsZSBhbmQvb3IgY29sdW1uLgotICogCi0gKiA8cD5TdWJjbGFzcyBjYW4gaW1wbGVtZW50IHRoZSBzZXRzIG9mIGFic3RyYWN0IG1ldGhvZHMgdG8gcHJvdmlkZSBPUk0gdmVuZG9yCi0gKiBzcGVjaWZpYyBwcm9wZXJ0aWVzLgotICogCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBPUk1HZW5DdXN0b21pemVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUKLXsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxOwotCi0JLyoqCi0JICogQSB2YWx1ZSBwYXNzZWQgZm9yIHRoZSB0YWJsZSBuYW1lIGFyZ3VtZW50IHRvIGdldC9zZXRQcm9wZXJ0eSAKLQkgKiBpbmRpY2F0aW5nIHRoYXQgdGhlIHZhbHVlIGFwcGxpZXMgdG8gYW55IHRhYmxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOWV9UQUJMRSA9ICJfX2FueVRhYmxlX18iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFTkVSQVRFX0RETF9BTk5PVEFUSU9OID0gImdlbmVyYXRlRERMQW5ub3RhdGlvbnMiOwotCS8qdGhlIHN0cmluZyB1c2VkIGluIHRoZSBwcm9wZXJ0eSBuYW1lIGluIG1Qcm9wcyB0byBpbmRpY2F0ZSAKLQkgKiBhIG51bGwgdGFibGUgdmFsdWUuKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlVMTF9UQUJMRSA9ICIiOwotCS8qdGhlIHN0cmluZyB1c2VkIGluIHRoZSBwcm9wZXJ0eSBuYW1lIGluIG1Qcm9wcyB0byBpbmRpY2F0ZSAKLQkgKiBhIG51bGwgY29sdW1uIHZhbHVlLiovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5VTExfQ09MVU1OID0gIiI7Ci0JCi0JLypUaGlzIHZlcnNpb24gbnVtYmVyIGlzIHdyaXR0ZW4gaW4gdGhlIGhlYWRlciBvZiB0aGUgY3VzdG9taXphdGlvbiBzdHJlYW0KLQkgKiBhbmQgcmVhZCBhdCBkZS1zZXJpYWxpemF0aW9uIHRpbWUsIGlmIGl0IGlzIGRpZmZlcmVudCB0aGVuIHRoZSBmaWxlIGlzIGludmFsaWRhdGVkLgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSUxFX1ZFUlNJT04gPSAyOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUERBVEVfQ09ORklHX0ZJTEUgPSAidXBkYXRlQ29uZmlnRmlsZSI7Ci0KLQlwcml2YXRlIHRyYW5zaWVudCBTY2hlbWEgbVNjaGVtYTsKLQlwcml2YXRlIHRyYW5zaWVudCBGaWxlIG1GaWxlOwotCQotCXByaXZhdGUgTGlzdDxTdHJpbmc+IG1UYWJsZU5hbWVzOwotCS8qa2V5OiB0YWJsZSBuYW1lLCB2YWx1ZTogT1JNR2VuVGFibGUgb2JqZWN0LiovCi0JcHJpdmF0ZSB0cmFuc2llbnQgTWFwPFN0cmluZyAsIE9STUdlblRhYmxlPiBtVGFibGVzOwotCS8qdGhlIDxjb2RlPkFzc29jaWF0aW9uPC9jb2RlPiBvYmplY3RzIHNvcnRlZCBieSB0aGVpciAiZnJvbSIgCi0JICogdGFibGUgbmFtZS4gSW5jbHVkZXMgYWxsIGFzc29jaWF0aW9uIGRlcml2ZWQgZnJvbSBmb3JlaWduIGtleXMgCi0JICogaW4gdXNlciBzZWxlY3RlZCB0YWJsZXMuIFNpbmNlIHNvbWUgb2YgdGhlIGZvcmVpZ24ga2V5cyBtYXkgcG9pbnQgdG8gdGFibGUKLQkgKiB1c2VyIGRvZXMgbm90IHNlbGVjdCwgdGhpcyBsaXN0IG1heSBiZSBkaWZmZXJlbnQgZnJvbSAgbVZhbGlkQXNzb2NpYXRpb25zCi0JICovCi0JcHJpdmF0ZSBMaXN0PEFzc29jaWF0aW9uPiBtQXNzb2NpYXRpb25zOwotCS8qCi0JICogTGlzdCBvZiB2YWxpZCBhc3NvY2lhdGlvbnMgd2l0aGluIHRoZSB1c2VyIHNlbGVjdGVkIHRhYmxlcyAgCi0JICovCi0JcHJpdmF0ZSB0cmFuc2llbnQgTGlzdDxBc3NvY2lhdGlvbj4gbVZhbGlkQXNzb2NpYXRpb25zOwotCXByaXZhdGUgdHJhbnNpZW50IGJvb2xlYW4gbUludmFsaWRGb3JlaWduQXNzb2NpYXRpb25zOwotCQotCS8qdGhlIHByb3BlcnR5IG5hbWUgaXMgaW4gdGhlIGZvcm0gJHRhYmxlTmFtZS4kY29sdW1uTmFtZS4kcHJvcGVydHlOYW1lLgotCSAqIFdoZXJlIHRhYmxlTmFtZSBjb3VsZCBiZSBOVUxMX1RBQkxFIG9yIEFOWV9UQUJMRQotCSAqIGFuZCBjb2x1bW5OYW1lIGNvdWxkIGJlIE5VTExfQ09MVU1OKi8KLQlwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gbVByb3BzID0gbmV3IGphdmEudXRpbC5IYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCi0JcHJpdmF0ZSB0cmFuc2llbnQgRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgZGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgPSBEYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlci5EZWZhdWx0LklOU1RBTkNFOwotCQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvLy0tLS0gYWJzdHJhY3QgbWV0aG9kcwotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvKioKLQkgKiBSZXR1cm5zIGFsbCB0aGUgcHJpbWFyeSBrZXkgZ2VuZXJhdG9yIHNjaGVtZXMuCi0JICogVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmdzIGFzIGZhciBhcyB0aGUgVmVsb2NpdHkgdGVtcGxhdGUgCi0JICogcHJvY2Vzc29yIHVuZGVyc3RhbmQgdGhlbS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgTGlzdDxTdHJpbmc+IGdldEFsbElkR2VuZXJhdG9ycygpOwotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRldmVsb3Blci1hc3NpZ25lZCBpZCBnZW5lcmF0b3IuCi0JICogVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmdzIGFzIGZhciBhcyB0aGUgVmVsb2NpdHkgdGVtcGxhdGUgCi0JICogcHJvY2Vzc29yIHVuZGVyc3RhbmQgdGhlbS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5vSWRHZW5lcmF0b3IoKTsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBpZGVudGl0eSBpZCBnZW5lcmF0b3IuCi0JICogVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmdzIGFzIGZhciBhcyB0aGUgVmVsb2NpdHkgdGVtcGxhdGUgCi0JICogcHJvY2Vzc29yIHVuZGVyc3RhbmQgdGhlbS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldElkZW50aXR5SWRHZW5lcmF0b3IoKTsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2UgZ2VuZXJhdG9ycy4KLQkgKiBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZ3MgYXMgZmFyIGFzIHRoZSBWZWxvY2l0eSB0ZW1wbGF0ZSAKLQkgKiBwcm9jZXNzb3IgdW5kZXJzdGFuZCB0aGVtLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTZXQ8U3RyaW5nPiBnZXRTZXF1ZW5jZUlkR2VuZXJhdG9ycygpOwotCS8qKgotCSAqIFJldHVybnMgYSBwcm9wZXJ0eSB0eXBlIGZyb20gdGhlIGdpdmVuIGRhdGFiYXNlIGNvbHVtbi4KLQkgKiBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZ3MgYXMgZmFyIGFzIHRoZSBWZWxvY2l0eSB0ZW1wbGF0ZSAKLQkgKiBwcm9jZXNzb3IgdW5kZXJzdGFuZCB0aGVtLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydHlUeXBlRnJvbUNvbHVtbihDb2x1bW4gY29sdW1uKSA7Ci0JLyoqCi0JICogUmV0dXJucyBhbGwgdGhlIHN0cmluZ3MgcmVwcmVzZW50aW5nIHByb3BlcnR5IHR5cGVzLgotCSAqIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5ncyBhcyBmYXIgYXMgdGhlIFZlbG9jaXR5IHRlbXBsYXRlIAotCSAqIHByb2Nlc3NvciB1bmRlcnN0YW5kIHRoZW0uCi0JICovCi0JcHVibGljIGFic3RyYWN0IFN0cmluZ1tdIGdldEFsbFByb3BlcnR5VHlwZXMoKTsKLQkvKioKLQkgKiBSZXR1cm5zIGFsbCB0aGUgc3RyaW5ncyByZXByZXNlbnRpbmcgcHJvcGVydHkgbWFwcGluZyBraW5kcy4KLQkgKiBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZ3MgYXMgZmFyIGFzIHRoZSBWZWxvY2l0eSB0ZW1wbGF0ZSAKLQkgKiBwcm9jZXNzb3IgdW5kZXJzdGFuZCB0aGVtLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXRBbGxNYXBwaW5nS2luZHMoKTsKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBiYXNpYyAoZGVmYXVsdCkgcHJvcGVydHkgbWFwcGluZyBraW5kLgotCSAqIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5ncyBhcyBmYXIgYXMgdGhlIFZlbG9jaXR5IHRlbXBsYXRlIAotCSAqIHByb2Nlc3NvciB1bmRlcnN0YW5kIHRoZW0uCi0JICovCi0JcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRCYXNpY01hcHBpbmdLaW5kKCk7Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgaWQgKHByaW1hcnkga2V5KSBwcm9wZXJ0eSBtYXBwaW5nIGtpbmQuCi0JICogVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmdzIGFzIGZhciBhcyB0aGUgVmVsb2NpdHkgdGVtcGxhdGUgCi0JICogcHJvY2Vzc29yIHVuZGVyc3RhbmQgdGhlbS4KLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldElkTWFwcGluZ0tpbmQoKTsKLQkvKioKLQkgKiBJbnRlcmFjdHMgd2l0aCB0aGUgdXNlciB0byBlZGl0IHRoZSBjYXNjYWRlIG9mIHRoZSBnaXZlbiAKLQkgKiByb2xlLgotCSAqIFRoaXMgbWV0aG9kIHNob3VsZCBhbHNvIGNhbGwgPGNvZGU+QXNzb2NpYXRpb25Sb2xlLnNldENhc2NhZGU8L2NvZGU+LgotCSAqIAotCSAqIEByZXR1cm4gZmFsc2UgaWYgdGhlIHVzZXIgaW50ZXJhY3Rpb24gaXMgY2FuY2VsbGVkLgotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVkaXRDYXNjYWRlKEFzc29jaWF0aW9uUm9sZSByb2xlKTsKLQkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY3VzdG9taXphdGlvbiBzZXR0aW5ncy4KLQkgKiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIG5lY2Vzc2FyeSB3aGVuIHRoZSA8Y29kZT5zYXZlPC9jb2RlPiAKLQkgKiBtZXRob2QgaXMgY2FsbGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoIEZpbGUgZmlsZSwgU2NoZW1hIHNjaGVtYSkgewotCQl0aGlzLm1TY2hlbWEgPSBzY2hlbWE7Ci0JCW1GaWxlID0gZmlsZTsKLQkJCi0JCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJc2V0UHJvcGVydHkoT1JNR2VuVGFibGUuREVGQVVMVF9GRVRDSCwgT1JNR2VuVGFibGUuREVGQVVMVF9GRVRDSCwgT1JNR2VuQ3VzdG9taXplci5BTllfVEFCTEUsIG51bGwpOwotCQkJcmV0dXJuOwotCQl9Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBudWxsOwotCQlPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBudWxsOwotCQl0cnkgCi0JCXsKLQkJCS8vcmVhZCBpdCBpbiBhIGZpbGUgZmlyc3QgdG8gc3BlZWR1cCBkZXNlcmlhbGl6YXRpb24KLQkJCWJ5dGVbXSBieXRlcyA9IEZpbGVVdGlsLnJlYWRGaWxlKGZpbGUpOwotCQkJaXN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcyk7Ci0JCQlvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oaXN0cmVhbSk7Ci0JCQkKLQkJCUZpbGVIZWFkZXIgaGVhZGVyID0gKEZpbGVIZWFkZXIpb2lzLnJlYWRPYmplY3QoKTsKLQkJCWlmIChoZWFkZXIubVZlcnNpb24gPT0gRklMRV9WRVJTSU9OKSB7Ci0JCQkJT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyID0gKE9STUdlbkN1c3RvbWl6ZXIpb2lzLnJlYWRPYmplY3QoKTsKLQkJCQlyZXN0b3JlKGN1c3RvbWl6ZXIpOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiKioqT1JNR2VuQ3VzdG9taXplci5sb2FkIGZhaWxlZCAiK2ZpbGUrIjogIiArIGV4KTsJCQkJCi0JCX0KLQkJZmluYWxseSAKLQkJewotCQkJaWYgKG9pcyAhPSBudWxsKQotCQkJewotCQkJCXRyeSAKLQkJCQl7Ci0JCQkJCW9pcy5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9Ci0JCQkKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5IAotCQkJCXsKLQkJCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIEZpbGUgZ2V0RmlsZSgpewotCQlyZXR1cm4gdGhpcy5tRmlsZTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0U2NoZW1hKFNjaGVtYSBzY2hlbWEpewotCQl0aGlzLm1TY2hlbWEgPSBzY2hlbWE7Ci0JfQotCi0JcHVibGljIFNjaGVtYSBnZXRTY2hlbWEoKXsKLQkJcmV0dXJuIG1TY2hlbWE7Ci0JfQotCQotCS8qKgotCSAqIEVtcHR5IGNvbnN0cnVjdG9yIG5lZWRlZCBieSB0aGUgZGVzZXJpYWxpemF0aW9uLgotCSAqLwotCXB1YmxpYyBPUk1HZW5DdXN0b21pemVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIFNhdmVzIHRoZSBjdXN0b21pemF0aW9uIGZpbGUuCi0JICogVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBuZWNlc3NhcnkuCi0JICovCi0JcHVibGljIHZvaWQgc2F2ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKCItLS1PUk1HZW5DdXN0b21pemVyLnNhdmU6ICIgKyBtRmlsZSk7Ci0JCWlmICghbUZpbGUuZXhpc3RzKCkgJiYgIW1GaWxlLmNyZWF0ZU5ld0ZpbGUoKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwotCQlqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBudWxsOwotCQlib29sZWFuIGRlbGV0ZUl0ID0gdHJ1ZTsKLQkJdHJ5IHsKLQkJCWZvcyA9IG5ldyBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0obUZpbGUpOwotCQkJb29zID0gbmV3IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtKGZvcyk7Ci0JCQlGaWxlSGVhZGVyIGhlYWRlciA9IG5ldyBGaWxlSGVhZGVyKCk7Ci0JCQlvb3Mud3JpdGVPYmplY3QoaGVhZGVyKTsKLQkJCW9vcy53cml0ZU9iamVjdCh0aGlzKTsKLQkJCWRlbGV0ZUl0ID0gZmFsc2U7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJLy9kZWxldGVJdCBpcyB0cnVlLCBzbyB0aGUgY2FjaGUgaXMgbm90IHNhdmVkLgotCQkJQ29yZUV4Y2VwdGlvbiBjZSA9IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSnB0R2VuUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJIlVuYWJsZSB0byBzYXZlIHRoZSBPUk1HZW5DdXN0b21pemVyIGZpbGU6ICIrbUZpbGUsZXgpKTsKLQkJCUpwdEdlblBsdWdpbi5sb2dFeGNlcHRpb24oIGNlICk7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlmIChvb3MhPW51bGwpIG9vcy5jbG9zZSgpOwotCQkJCWlmIChmb3MhPW51bGwpIGZvcy5jbG9zZSgpOwotCQkJCWlmIChkZWxldGVJdCkgewotCQkJCQltRmlsZS5kZWxldGUoKTsKLQkJCQl9Ci0JCQl9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGV4Mikge30JCi0JCX0KLQl9Ci0JCi0JcHVibGljIERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyIGdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkgewotCQlyZXR1cm4gdGhpcy5kYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcjsKLQl9Ci0JcHVibGljIHZvaWQgc2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgZGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIpIHsKLQkJaWYgKGRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiZGF0YWJhc2UgYW5ub3RhdGlvbiBuYW1lIGJ1aWxkZXIgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJfQotCQl0aGlzLmRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyID0gZGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXI7Ci0JfQkKLQotCS8qKgotCSAqIFJldHVybnMge0BsaW5rICNHRU5FUkFURV9ERExfQU5OT1RBVElPTn0gIGluZGljYXRpbmcgd2hldGhlcgotCSAqIHRoZSBvcHRpb25hbCBEREwgcGFyYW1ldGVycyBsaWtlIGxlbmd0aCwgbnVsbGFibGUsIHVucWl1ZSwgZXRjIHNob3VsZCBiZSBnZW5lcmF0ZWQgCi0JICogaW4gQENvbHVtbiBhbm5vdGF0aW9uLgotCSAqIGRlZmF1bHRzIHRvIGZhbHNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzR2VuZXJhdGVERExBbm5vdGF0aW9ucygpIHsKLQkJcmV0dXJuICJ0cnVlIi5lcXVhbHMoZ2V0UHJvcGVydHkoR0VORVJBVEVfRERMX0FOTk9UQVRJT04sIEFOWV9UQUJMRSwgbnVsbCkpOyAvL2RlZmF1bHRzIHRvIGZhbHNlCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhIHByb3BlcnR5IHZhbHVlLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIGNvbE5hbWUpIHsKLQkJU3RyaW5nIGtleSA9IGdldFByb3BLZXkocHJvcGVydHlOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpOwotCQlTdHJpbmcgdmFsdWUgPSBtUHJvcHMuZ2V0KGtleSk7Ci0JCS8qaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBhbmQgaXQgaXMgYSB0YWJsZSBwcm9wZXJ0eSB0aGVuIAotCQkgKiBnZXQgdGhlIGRlZmF1bHQgdGFibGUgcHJvcGVydHkuKi8KLQkJaWYgKHZhbHVlID09IG51bGwgJiYgdGFibGVOYW1lICE9IG51bGwgJiYgY29sTmFtZSA9PSBudWxsICYmICF0YWJsZU5hbWUuZXF1YWxzKEFOWV9UQUJMRSkpIHsKLQkJCXZhbHVlID0gZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCBBTllfVEFCTEUsIGNvbE5hbWUpOwotCQl9Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0JLyoqCi0JICogQ2hhbmdlcyBhIHByb3BlcnR5IHZhbHVlLgotCSAqIAotCSAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlLCBjb3VsZCBiZSBudWxsLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eU5hbWUsIFN0cmluZyB2YWx1ZSwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIGNvbE5hbWUpIHsKLQkJU3RyaW5nIGtleSA9IGdldFByb3BLZXkocHJvcGVydHlOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpOwotCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJbVByb3BzLnB1dChrZXksIHZhbHVlKTsKLQkJfSBlbHNlIHsKLQkJCW1Qcm9wcy5yZW1vdmUoa2V5KTsKLQkJfQotCX0KLQkvKioKLQkgKiBTYW1lIGFzIHtAbGluayAjZ2V0UHJvcGVydHkoU3RyaW5nLCBTdHJpbmcsIFN0cmluZyl9IGJ1dCAKLQkgKiBjb252ZXJ0cyB0aGUgdmFsdWUgdG8gYm9vbGVhbi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuUHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIGNvbE5hbWUpIHsKLQkJU3RyaW5nIHZhbHVlID0gZ2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB0YWJsZU5hbWUsIGNvbE5hbWUpOwotCQlyZXR1cm4gInRydWUiLmVxdWFscyh2YWx1ZSk7Ci0JfQotCS8qKgotCSAqIENoYW5nZXMgYSB0YWJsZSBib29sZWFuIHByb3BlcnR5IHZhbHVlLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEJvb2xlYW5Qcm9wZXJ0eShTdHJpbmcgcHJvcGVydHlOYW1lLCBib29sZWFuIHZhbHVlLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgY29sTmFtZSkgewotCQlzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlID8gInRydWUiIDogImZhbHNlIiwgdGFibGVOYW1lLCBjb2xOYW1lKTsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHRhYmxlcyB0byBnZW5lcmF0ZS4KLQkgKi8KLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFRhYmxlTmFtZXMoKSB7Ci0JCXJldHVybiBtVGFibGVOYW1lcyAhPSBudWxsID8gbVRhYmxlTmFtZXMgOiBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmV0Y2ggdHlwZSBhbm5vdGF0aW9uIG1lbWJlciB2YWx1ZSwgb3IgZW1wdHkgc3RyaW5nIAotCSAqIGlmIG5vbmUuCi0JICogRW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGluc3RlYWQgb2YgbnVsbCBiZWNhdXNlIFZlbG9jaXR5IGRvZXMgbm90IGxpa2UgbnVsbCAKLQkgKiB3aGVuIHVzZWQgaW4gI3NldC4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdlbkZldGNoKE9STUdlblRhYmxlIHRhYmxlKSB7Ci0JCXJldHVybiAiIjsKLQl9CQotCS8qKgotCSAqIENhbGxlZCB3aGVuIHRoZSB0YWJsZSB1c2VyIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIGluIHRoZSAKLQkgKiBnZW5lcmF0aW9uIHdpemFyZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWVzKExpc3Q8U3RyaW5nPiB0YWJsZU5hbWVzKSB7Ci0JCW1UYWJsZU5hbWVzID0gdGFibGVOYW1lczsKLQkJbVRhYmxlcyA9IG51bGw7Ci0JCW1WYWxpZEFzc29jaWF0aW9ucyA9IG51bGw7IC8vcmVjb21wdXRlCi0JCW1JbnZhbGlkRm9yZWlnbkFzc29jaWF0aW9ucyA9IHRydWU7IC8vbWFrZSBzdXJlIGZvcmVpZ24gYXNzb2NpYXRpb25zIGZyb20gbmV3bHkgYWRkZWQgdGFibGVzIGFyZSBjb21wdXRlZC4KLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgdGFibGUgbmFtZXMgdG8gYmUgZ2VuZXJhdGVkLgotCSAqIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gPGNvZGU+Z2V0VGFibGVOYW1lczwvY29kZT4gaWYgdGhlcmUgCi0JICogYXJlIG1hbnktdG8tbWFueSBqb2luIHRhYmxlcyBhbmQgYXJlIG5vdCBjb250cmlidXRpbmcgCi0JICogaW4gYW55IG90aGVyIGFzc29jaWF0aW9ucy4KLQkgKi8KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEdlblRhYmxlTmFtZXMoKSAgewotCQlMaXN0PFN0cmluZz4gbmFtZXMgPSBnZXRUYWJsZU5hbWVzKCk7Ci0JCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxTdHJpbmc+KG5hbWVzLnNpemUoKSk7Ci0JCQotCQkvKmZpbHRlciBvdXQgam9pbiB0YWJsZXMqLwotCQlMaXN0PEFzc29jaWF0aW9uPiBhc3NvY2lhdGlvbnMgPSBnZXRBc3NvY2lhdGlvbnMoKTsKLQkJZm9yIChJdGVyYXRvcjxTdHJpbmc+IHRhYmxlTmFtZXNJdGVyID0gbmFtZXMuaXRlcmF0b3IoKTsgdGFibGVOYW1lc0l0ZXIuaGFzTmV4dCgpOyApIHsKLQkJCVN0cmluZyB0YWJsZU5hbWUgPSB0YWJsZU5hbWVzSXRlci5uZXh0KCk7Ci0JCQlib29sZWFuIGlzVmFsaWQgPSB0cnVlOwotCQkJCi0JCQlmb3IgKEl0ZXJhdG9yPEFzc29jaWF0aW9uPiBhc3NvY0l0ZXIgPSBhc3NvY2lhdGlvbnMuaXRlcmF0b3IoKTsgYXNzb2NJdGVyLmhhc05leHQoKTsgKSB7Ci0JCQkJQXNzb2NpYXRpb24gYXNzb2NpYXRpb24gPSBhc3NvY0l0ZXIubmV4dCgpOwotCQkJCWlmICghYXNzb2NpYXRpb24uaXNHZW5lcmF0ZWQoKSkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKHRhYmxlTmFtZS5lcXVhbHMoYXNzb2NpYXRpb24uZ2V0UmVmZXJyZXJUYWJsZU5hbWUoKSkKLQkJCQkJCXx8IHRhYmxlTmFtZS5lcXVhbHMoYXNzb2NpYXRpb24uZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpKSkgewotCQkJCQlpc1ZhbGlkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmICh0YWJsZU5hbWUuZXF1YWxzKGFzc29jaWF0aW9uLmdldEpvaW5UYWJsZU5hbWUoKSkpIHsKLQkJCQkJaXNWYWxpZCA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJCWlmIChpc1ZhbGlkKSB7Ci0JCQkJcmVzdWx0LmFkZCh0YWJsZU5hbWUpOwotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgYW4gPGNvZGU+T1JNR2VuVGFibGU8L2NvZGU+IG9iamVjdCBnaXZlbiBpdHMgbmFtZSwgb3IgCi0JICogbnVsbCBpZiBub25lLgotCSAqLwotCXB1YmxpYyBPUk1HZW5UYWJsZSBnZXRUYWJsZShTdHJpbmcgdGFibGVOYW1lKSAgewotCQlpZiAobVRhYmxlcyA9PSBudWxsKSB7Ci0JCQltVGFibGVzID0gbmV3IGphdmEudXRpbC5IYXNoTWFwPFN0cmluZywgT1JNR2VuVGFibGU+KG1UYWJsZU5hbWVzLnNpemUoKSk7Ci0JCX0KLQkJCi0JCWlmKG1UYWJsZU5hbWVzIT1udWxsICYmIG1TY2hlbWEhPW51bGwpewotCQkJZm9yIChJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtVGFibGVOYW1lcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKSB7Ci0JCQkJU3RyaW5nIG5hbWUgPSBpdGVyLm5leHQoKTsKLQkJCQlUYWJsZSBkYlRhYmxlID0gbVNjaGVtYS5nZXRUYWJsZU5hbWVkKCBuYW1lICk7Ci0JCQkJaWYgKGRiVGFibGUgIT0gbnVsbCkgewotCQkJCQltVGFibGVzLnB1dChuYW1lLCBjcmVhdGVHZW5UYWJsZShkYlRhYmxlKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBtVGFibGVzLmdldCh0YWJsZU5hbWUpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSA8Y29kZT5Bc3NvY2lhdGlvbjwvY29kZT4gb2JqZWN0cyBzb3J0ZWQgYnkgdGhlaXIgImZyb20iIAotCSAqIHRhYmxlIG5hbWUuCi0JICovCi0JcHVibGljIExpc3Q8QXNzb2NpYXRpb24+IGdldEFzc29jaWF0aW9ucygpewotCQlyZXR1cm4gZ2V0QXNzb2NpYXRpb25zKHRydWUvKnZhbGlkT25seSovKTsKLQl9Ci0JLyoqCi0JICogQWRkcyB0aGUgZ2l2ZW4gYXNzb2NpYXRpb24uCi0JICovCi0JcHVibGljIHZvaWQgYWRkQXNzb2NpYXRpb24oQXNzb2NpYXRpb24gYXNzb2NpYXRpb24pICB7Ci0JCWdldEFzc29jaWF0aW9ucyhmYWxzZS8qdmFsaWRPbmx5Ki8pLmFkZChhc3NvY2lhdGlvbik7Ci0JCWlmIChtVmFsaWRBc3NvY2lhdGlvbnMgIT0gbnVsbCkgewotCQkJbVZhbGlkQXNzb2NpYXRpb25zLmFkZChhc3NvY2lhdGlvbik7Ci0JCX0KLQkJCi0JfQotCS8qKgotCSAqIERlbGV0ZXMgdGhlIGdpdmVuIGFzc29jaWF0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZUFzc29jaWF0aW9uKEFzc29jaWF0aW9uIGFzc29jaWF0aW9uKSAgewotCQlib29sZWFuIHJlbW92ZWQgPSBnZXRBc3NvY2lhdGlvbnMoZmFsc2UvKnZhbGlkT25seSovKS5yZW1vdmUoYXNzb2NpYXRpb24pOwotCQlhc3NlcnQocmVtb3ZlZCk7Ci0JCQotCQlpZiAobVZhbGlkQXNzb2NpYXRpb25zICE9IG51bGwpIHsKLQkJCXJlbW92ZWQgPSBtVmFsaWRBc3NvY2lhdGlvbnMucmVtb3ZlKGFzc29jaWF0aW9uKTsKLQkJCWFzc2VydChyZW1vdmVkKTsKLQkJfQotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgYW4gYXNzb2NpYXRpb24gc2ltaWxhciB0byB0aGUgZ2l2ZW4gYXNzb2NpYXRpb24gCi0JICogYWxyZWFkeSBleGlzdHMuCi0JICogVGhpcyBpcyBkZWNpZGVkIGJhc2VkIG9ubHkgb24gdGhlIGFzc29jaWF0aW9uIHRhYmxlcyBhbmQgY29sdW1ucy4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBzaW1pbGFyQXNzb2NpYXRpb25FeGlzdHMoQXNzb2NpYXRpb24gYXNzb2NpYXRpb24pIHsKLQkJdHJ5IHsKLQkJCWZvciAoSXRlcmF0b3I8QXNzb2NpYXRpb24+IGl0ZXIgPSBnZXRBc3NvY2lhdGlvbnMoZmFsc2UvKnZhbGlkT25seSovKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKSB7Ci0JCQkJQXNzb2NpYXRpb24gYXNzb2NpYXRpb24yID0gaXRlci5uZXh0KCk7Ci0JCQkJaWYgKCFhc3NvY2lhdGlvbi5nZXRSZWZlcnJlclRhYmxlTmFtZSgpLmVxdWFscyhhc3NvY2lhdGlvbjIuZ2V0UmVmZXJyZXJUYWJsZU5hbWUoKSkKLQkJCQkJCXx8ICFhc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkVGFibGVOYW1lKCkuZXF1YWxzKGFzc29jaWF0aW9uMi5nZXRSZWZlcmVuY2VkVGFibGVOYW1lKCkpCi0JCQkJCQl8fCAhU3RyaW5nVXRpbC5lcXVhbE9iamVjdHMoYXNzb2NpYXRpb24uZ2V0Sm9pblRhYmxlTmFtZSgpLCBhc3NvY2lhdGlvbjIuZ2V0Sm9pblRhYmxlTmFtZSgpKQotCQkJCQkJfHwgIWFzc29jaWF0aW9uLmdldFJlZmVycmVyQ29sdW1uTmFtZXMoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVycmVyQ29sdW1uTmFtZXMoKSkKLQkJCQkJCXx8ICFhc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZXMoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVyZW5jZWRDb2x1bW5OYW1lcygpKQotCQkJCQkJKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0JCQkJCQotCQkJCS8qdGhlIDIgYXNzb2NpYXRpb24gaGF2ZSB0aGUgc2FtZSByZWZlcnJlciwgcmVmZXJlbmNlZCBhbmQgam9pbiB0YWJsZSovCi0JCQkJaWYgKGFzc29jaWF0aW9uLmdldEpvaW5UYWJsZU5hbWUoKSA9PSBudWxsKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCQlpZiAoYXNzb2NpYXRpb24uZ2V0UmVmZXJyZXJKb2luQ29sdW1uTmFtZXMoKS5lcXVhbHMoYXNzb2NpYXRpb24yLmdldFJlZmVycmVySm9pbkNvbHVtbk5hbWVzKCkpCi0JCQkJCQkmJiBhc3NvY2lhdGlvbi5nZXRSZWZlcmVuY2VkSm9pbkNvbHVtbk5hbWVzKCkuZXF1YWxzKGFzc29jaWF0aW9uMi5nZXRSZWZlcmVuY2VkSm9pbkNvbHVtbk5hbWVzKCkpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCS8qKgotCSAqIENyZWF0ZXMgdGhlIDxjb2RlPk9STUdlblRhYmxlPC9jb2RlPiBpbnN0YW5jZS4gCi0JICovCi0JcHVibGljIE9STUdlblRhYmxlIGNyZWF0ZUdlblRhYmxlKFRhYmxlIGRiVGFibGUpIHsKLQkJcmV0dXJuIG5ldyBPUk1HZW5UYWJsZShkYlRhYmxlLCB0aGlzKTsKLQl9Ci0JLyoqCi0JICogQ3JlYXRlcyB0aGUgPGNvZGU+T1JNR2VuQ29sdW1uPC9jb2RlPiBpbnN0YW5jZS4KLQkgKi8KLQlwcm90ZWN0ZWQgT1JNR2VuQ29sdW1uIGNyZWF0ZUdlbkNvbHVtbihDb2x1bW4gZGJDb2wpIHsKLQkJcmV0dXJuIG5ldyBPUk1HZW5Db2x1bW4oZGJDb2wsIHRoaXMpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgb2YgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVuY2Ugc3BlY3MgcmVxdWlyZSB0aGUgIm1hbnkiIHNpZGUgCi0JICogb2YgYW4gYXNzb2NpYXRpb24gdG8gYmUgdGhlIG93bmVyIChsaWtlIEVKQjMpLgotCSAqLwotCXByb3RlY3RlZCBib29sZWFuIG1hbnlTaWRlSXNBc3NvY2lhdGlvbk93bmVyKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXB1YmxpYyBib29sZWFuIGlzVXBkYXRlQ29uZmlnRmlsZSgpIHsKLQkJcmV0dXJuICEiZmFsc2UiLmVxdWFscyhnZXRQcm9wZXJ0eShVUERBVEVfQ09ORklHX0ZJTEUsIG51bGwsIG51bGwpKTsgLy9kZWZhdWx0cyB0byB0cnVlCi0JfQotCXB1YmxpYyB2b2lkIHNldFVwZGF0ZUNvbmZpZ0ZpbGUoYm9vbGVhbiB2YWx1ZSkgewotCQlpZiAodmFsdWUpIHsgLy9kZWZhdWx0IGlzIHRydWUKLQkJCXNldFByb3BlcnR5KFVQREFURV9DT05GSUdfRklMRSwgbnVsbCwgbnVsbCwgbnVsbCk7IC8vcmVtb3ZlIGl0Ci0JCX0gZWxzZSB7Ci0JCQlzZXRCb29sZWFuUHJvcGVydHkoVVBEQVRFX0NPTkZJR19GSUxFLCB2YWx1ZSwgbnVsbCwgbnVsbCk7Ci0JCX0KLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8tLS0tIFZlbG9jaXR5IHRlbXBsYXRlcyBtZXRob2RzCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8qKgotCSAqIFJldHVybnMgYSBnZXR0ZXIgbWV0aG9kIG5hbWUgZ2l2ZW4gYSBwcm9wZXJ0eSBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgcHJvcGVydHlHZXR0ZXIoU3RyaW5nIHByb3BlcnR5TmFtZSkgewotCQlyZXR1cm4gImdldCIrU3RyaW5nVXRpbC5pbml0VXBwZXIocHJvcGVydHlOYW1lKTsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyBhIHNldHRlciBtZXRob2QgbmFtZSBnaXZlbiBhIHByb3BlcnR5IG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBwcm9wZXJ0eVNldHRlcihTdHJpbmcgcHJvcGVydHlOYW1lKSB7Ci0JCXJldHVybiAic2V0IitTdHJpbmdVdGlsLmluaXRVcHBlcihwcm9wZXJ0eU5hbWUpOwotCX0KLQlwdWJsaWMgU3RyaW5nIHF1b3RlKFN0cmluZyBzKSB7Ci0JCXJldHVybiBTdHJpbmdVdGlsLnF1b3RlKHMsICciJyk7Ci0JfQotCXB1YmxpYyBTdHJpbmcgcXVvdGUoYm9vbGVhbiBiKSB7Ci0JCXJldHVybiBxdW90ZShTdHJpbmcudmFsdWVPZihiKSk7Ci0JfQotCXB1YmxpYyBTdHJpbmcgcXVvdGUoaW50IGkpIHsKLQkJcmV0dXJuIHF1b3RlKFN0cmluZy52YWx1ZU9mKGkpKTsKLQl9Ci0JLyoqCi0JICogQXBwZW5kcyBhbiBhbm5vdGF0aW9uIG1lbWJlciBuYW1lIGFuZCB2YWx1ZSB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBzIFRoZSBhbm5vdGF0aW9uIG1lbWJlcnMgc3RyaW5nLgotCSAqCi0JICogQHBhcmFtIG1lbWJlclZhbHVlIFRoZSBtZW1iZXIgdmFsdWUsIGlmIG51bGwgb3IgZW1wdHkgc3RyaW5ncyB0aGVuIAotCSAqIG5vdGhpbmcgaXMgYXBwZW5lZC4KLQkgKiAKLQkgKiBAcGFyYW0gd2hldGhlciB0byBkb3VibGUgcXVvdGUgdGhlIG1lbWJlciB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGFwcGVuZEFubm90YXRpb24oU3RyaW5nIHMsIFN0cmluZyBtZW1iZXJOYW1lLCBTdHJpbmcgbWVtYmVyVmFsdWUsIGJvb2xlYW4gcXVvdGUpIHsKLQkJaWYgKG1lbWJlclZhbHVlID09IG51bGwgfHwgbWVtYmVyVmFsdWUubGVuZ3RoKCkgPT0gMCkgewotCQkJcmV0dXJuIHM7Ci0JCX0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIocyk7Ci0JCWlmIChidWZmZXIubGVuZ3RoKCkgIT0gMCkgewotCQkJYnVmZmVyLmFwcGVuZCgiLCAiKTsKLQkJfQotCQlidWZmZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotCQlidWZmZXIuYXBwZW5kKCc9Jyk7Ci0JCWlmIChxdW90ZSkgewotCQkJYnVmZmVyLmFwcGVuZCgnIicpOwotCQl9Ci0JCWJ1ZmZlci5hcHBlbmQobWVtYmVyVmFsdWUpOwotCQlpZiAocXVvdGUpIHsKLQkJCWJ1ZmZlci5hcHBlbmQoJyInKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCXB1YmxpYyBib29sZWFuIGlzSkRLMV81KCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vLS0tLSBwcml2YXRlIG1ldGhvZHMKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLyoqCi0JICogUmVzdG9yZXMgdGhlIGN1c3RvbWl6YXRpb24gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gCi0JICogKHBlcnNpc3RlZCkgY3VzdG9taXplci4KLQkgKi8KLQlwcml2YXRlIHZvaWQgcmVzdG9yZShPUk1HZW5DdXN0b21pemVyIGN1c3RvbWl6ZXIpICB7Ci0JCW1UYWJsZU5hbWVzID0gY3VzdG9taXplci5tVGFibGVOYW1lczsKLQkJbUFzc29jaWF0aW9ucyA9IGN1c3RvbWl6ZXIubUFzc29jaWF0aW9uczsKLQkJbVByb3BzID0gY3VzdG9taXplci5tUHJvcHM7Ci0JCWlmKCBtU2NoZW1hID09IG51bGwgKQotCQkJcmV0dXJuOwotCQkKLQkJLypyZW1vdmUgaW52YWxpZCB0YWJsZSBuYW1lcyovCi0JCWZvciAoaW50IGkgPSBtVGFibGVOYW1lcy5zaXplKCktMTsgaSA+PSAwOyAtLWkpIHsKLQkJCVN0cmluZyB0YWJsZU5hbWUgPSBtVGFibGVOYW1lcy5nZXQoaSk7Ci0JCQlpZiAobVNjaGVtYS5nZXRUYWJsZU5hbWVkKCB0YWJsZU5hbWUpID09IG51bGwpIHsKLQkJCQltVGFibGVOYW1lcy5yZW1vdmUoaSk7Ci0JCQl9Ci0JCX0KLQkJaWYoIG1Bc3NvY2lhdGlvbnMhPW51bGwgKXsKLQkJCS8qcmVzdG9yZSB0aGUgYXNzb2NpYXRpb25zKi8KLQkJCWZvciAoSXRlcmF0b3I8QXNzb2NpYXRpb24+IGl0ZXIgPSBtQXNzb2NpYXRpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyApIHsKLQkJCQlBc3NvY2lhdGlvbiBhc3NvY2lhdGlvbiA9IGl0ZXIubmV4dCgpOwotCQkJCWFzc29jaWF0aW9uLnJlc3RvcmUodGhpcyk7Ci0JCQl9Ci0JCQkvKmFkZCB0aGUgZm9yZWlnbiBrZXlzIGFzc29jaWF0aW9ucyBqdXN0IGluIGNhc2UgdGhlIHRhYmxlcyBjaGFuZ2VkIHNpbmNlIAotCQkJICogdGhlIGxhc3QgdGltZSB0aGUgc3RhdGUgd2FzIHBlcnNpc3RlZC4gUGFzcyBjaGVja0V4aXN0aW5nIHRydWUgc28gdGhhdCB0aGUgCi0JCQkgKiBhc3NvY2lhdGlvbnMgcmVzdG9yZWQgYWJvdmUgYXJlIG5vdCBvdmVyd3JpdHRlbi4qLwotCQkJYWRkRm9yZWlnbktleUFzc29jaWF0aW9ucyh0cnVlLypjaGVja0V4aXN0aW5nKi8pOwotCQl9Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGtleSBpbiBtUHJvcHMgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIAotCSAqIHByb3BlcnR5TmFtZSwgdGFibGUgYW5kIGNvbHVtbi4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRQcm9wS2V5KFN0cmluZyBwcm9wZXJ0eU5hbWUsIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBjb2xOYW1lKSB7Ci0JCWlmICh0YWJsZU5hbWUgPT0gbnVsbCkgewotCQkJdGFibGVOYW1lID0gTlVMTF9UQUJMRTsKLQkJfQotCQlpZiAoY29sTmFtZSA9PSBudWxsKSB7Ci0JCQljb2xOYW1lID0gTlVMTF9DT0xVTU47Ci0JCX0KLQkJcmV0dXJuIHRhYmxlTmFtZSArICcuJyArIGNvbE5hbWUgKyAnLicgKyBwcm9wZXJ0eU5hbWU7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFzc29jaWF0aW9ucyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIAotCSAqIGN1cnJlbnQgdGFibGVzLgotCSAqLwotCXByaXZhdGUgTGlzdDxBc3NvY2lhdGlvbj4gZ2V0QXNzb2NpYXRpb25zKGJvb2xlYW4gdmFsaWRPbmx5KXsKLQkJaWYgKG1Bc3NvY2lhdGlvbnMgPT0gbnVsbCkgewotCQkJbUFzc29jaWF0aW9ucyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PEFzc29jaWF0aW9uPigpOwotCQkJCi0JCQlhZGRGb3JlaWduS2V5QXNzb2NpYXRpb25zKGZhbHNlLypjaGVja0V4aXN0aW5nKi8pOwotCQl9IGVsc2UgaWYgKG1JbnZhbGlkRm9yZWlnbkFzc29jaWF0aW9ucykgewotCQkJbUludmFsaWRGb3JlaWduQXNzb2NpYXRpb25zID0gZmFsc2U7Ci0JCQkKLQkJCWFkZEZvcmVpZ25LZXlBc3NvY2lhdGlvbnModHJ1ZS8qY2hlY2tFeGlzdGluZyovKTsKLQkJfQotCQlMaXN0PEFzc29jaWF0aW9uPiBhc3NvY2lhdGlvbnM7Ci0JCWlmICh2YWxpZE9ubHkpIHsKLQkJCWlmIChtVmFsaWRBc3NvY2lhdGlvbnMgPT0gbnVsbCkgewotCQkJCS8qZmlsdGVyIG91dCB0aGUgaW52YWxpZCBhc3NvY2lhdGlvbnMqLwotCQkJCW1WYWxpZEFzc29jaWF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8QXNzb2NpYXRpb24+KG1Bc3NvY2lhdGlvbnMuc2l6ZSgpKTsKLQkJCQlmb3IgKGludCBpID0gMCwgbiA9IG1Bc3NvY2lhdGlvbnMuc2l6ZSgpOyBpIDwgbjsgKytpKSB7Ci0JCQkJCUFzc29jaWF0aW9uIGFzc29jaWF0aW9uID0gbUFzc29jaWF0aW9ucy5nZXQoaSk7Ci0JCQkJCWlmIChhc3NvY2lhdGlvbi5pc1ZhbGlkKCkpIHsKLQkJCQkJCW1WYWxpZEFzc29jaWF0aW9ucy5hZGQoYXNzb2NpYXRpb24pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJYXNzb2NpYXRpb25zID0gbVZhbGlkQXNzb2NpYXRpb25zOwotCQl9IGVsc2UgewotCQkJYXNzb2NpYXRpb25zID0gbUFzc29jaWF0aW9uczsKLQkJfQotCQlyZXR1cm4gYXNzb2NpYXRpb25zOwotCX0KLQlwcml2YXRlIHZvaWQgYWRkRm9yZWlnbktleUFzc29jaWF0aW9ucyhib29sZWFuIGNoZWNrRXhpc3RpbmcpIHsKLQkJTGlzdDxTdHJpbmc+IHRhYmxlTmFtZXMgPSBnZXRUYWJsZU5hbWVzKCk7Ci0JCWZvciAoSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gdGFibGVOYW1lcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTsgKSB7Ci0JCQlPUk1HZW5UYWJsZSB0YWJsZSA9IGdldFRhYmxlKGl0ZXIubmV4dCgpKTsKLQkJCWFkZEZvcmVpZ25LZXlBc3NvY2lhdGlvbnModGFibGUsIGNoZWNrRXhpc3RpbmcpOwotCQl9Ci0JfQotCXByaXZhdGUgdm9pZCBhZGRGb3JlaWduS2V5QXNzb2NpYXRpb25zKE9STUdlblRhYmxlIHRhYmxlLCBib29sZWFuIGNoZWNrRXhpc3RpbmcpIHsKLQkJaWYodGFibGU9PW51bGwpCi0JCQlyZXR1cm47Ci0JCQotCQkKLQkJTGlzdDxGb3JlaWduS2V5SW5mbz4gZktleXMgPSBudWxsOwotCQkKLQkJdHJ5ewotCQkJZktleXMgPSBEVFBVdGlsLmdldEZvcmVpZ25LZXlzKHRhYmxlLmdldERiVGFibGUoKSk7Ci0JCX1jYXRjaChFeGNlcHRpb24gaXNlKXsKLQkJCS8vd29ya2Fyb3VuZCBEYWxpIGJ1ZyBmb3Igbm93Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCWlmKCBmS2V5cy5zaXplKCk9PTAgKQotCQkJcmV0dXJuOwotCQkKLQkJTGlzdDxBc3NvY2lhdGlvbj4gYWRkZWRBc3NvY2lhdGlvbnMgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdDxBc3NvY2lhdGlvbj4oKTsKLQkJZm9yIChJdGVyYXRvcjxGb3JlaWduS2V5SW5mbz4gaXRlciA9IGZLZXlzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyApIHsKLQkJCUZvcmVpZ25LZXlJbmZvIGZraSA9IGl0ZXIubmV4dCgpOwotCQkJT1JNR2VuVGFibGUgcmVmZXJlbmNlZFRhYmxlID0gZ2V0VGFibGUoZmtpLmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKSk7Ci0JCQlpZiAocmVmZXJlbmNlZFRhYmxlID09IG51bGwpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCUFzc29jaWF0aW9uIGFzc29jaWF0aW9uID0gbmV3IEFzc29jaWF0aW9uKHRoaXMsIHRhYmxlLmdldE5hbWUoKSwgZmtpLmdldFJlZmVycmVyQ29sdW1uTmFtZXMoKQotCQkJCQkJLCByZWZlcmVuY2VkVGFibGUuZ2V0TmFtZSgpLCBma2kuZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWVzKCkpOwotCQkJYXNzb2NpYXRpb24uY29tcHV0ZUNhcmRpbmFsaXR5KCk7Ci0JCQkvL0RlZmVyIHRoZSBjaGVjayBvZiBzaW1pbGFyQXNzb2NpYXRpb25FeGlzdHMgYWZ0ZXIgY29tcHV0ZU1hbnlUb01hbnkoKQotCQkJLy9vdGhlcndpc2UgdGhlIE1UTSBhc3NvY2lhdGlvbiB3aWxsIG5vdCBjb21wdXRlZCBjb3JyZWN0bHkgaW4gc29tZSBjYXNlcy4KLQkJCS8vaWYgKGNoZWNrRXhpc3RpbmcgJiYgc2ltaWxhckFzc29jaWF0aW9uRXhpc3RzKGFzc29jaWF0aW9uKSkgewotCQkJLy8JY29udGludWU7Ci0JCQkvL30KLQkJCWFkZGVkQXNzb2NpYXRpb25zLmFkZChhc3NvY2lhdGlvbik7Ci0JCX0KLQkJCi0JCUFzc29jaWF0aW9uIG0ybSA9IGNvbXB1dGVNYW55VG9NYW55KHRhYmxlLCBhZGRlZEFzc29jaWF0aW9ucyk7Ci0JCWlmIChtMm0gIT0gbnVsbCkgewotCQkJLypkbyBub3QgZ2VuZXJhdGUgdGhlIDIgbWFueS10by1vbmUqLwotCQkJYWRkZWRBc3NvY2lhdGlvbnMuY2xlYXIoKTsKLQkJCWFkZGVkQXNzb2NpYXRpb25zLmFkZCgwLCBtMm0pOwotCQl9Ci0JCS8vcmVtb3ZlIHRoZSBhc3NvY2lhdGlvbiBpZiBhbHJlYWR5IGV4aXN0aW5nCi0JCUl0ZXJhdG9yPEFzc29jaWF0aW9uPiBpdCA9ICBhZGRlZEFzc29jaWF0aW9ucy5pdGVyYXRvcigpOyAKLQkJd2hpbGUoIGl0Lmhhc05leHQoKSApewotCQkJQXNzb2NpYXRpb24gbmV3QXNzb2NpYXRpb24gPSBpdC5uZXh0KCk7Ci0JCQlmb3IoIEFzc29jaWF0aW9uIGFzc29jaWF0aW9uIDogbUFzc29jaWF0aW9ucyApewotCQkJCWlmKCBuZXdBc3NvY2lhdGlvbi5lcXVhbHMoIGFzc29jaWF0aW9uICkpewotCQkJCQlpdC5yZW1vdmUoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJbUFzc29jaWF0aW9ucy5hZGRBbGwoYWRkZWRBc3NvY2lhdGlvbnMpOwotCX0KLQlwcml2YXRlIEFzc29jaWF0aW9uIGNvbXB1dGVNYW55VG9NYW55KE9STUdlblRhYmxlIHRhYmxlLCBMaXN0PEFzc29jaWF0aW9uPiBhZGRlZEFzc29jaWF0aW9ucykgewotCQkvKiogbWFueS10by1tYW55IGFzc29jaWF0aW9ucyBpZjoKLQkJICogLSBhZGRlZEFzc29jaWF0aW9ucyBjb250YWlucyAyIG1hbnktdG8tb25lIGFzc29jaWF0aW9ucwotCQkgKiAtIHRhYmxlcyB0MSBhbmQgdDIgZG9lcyBOT1QgaGF2ZSB0byBiZSBkaWZmZXJlbnQoIGZvciBzZWxmLU1UTS1zZWxmIHNpdHVhdGlvbikKLQkJICogLSA8Y29kZT50YWJsZTwvY29kZT4gY29udGFpbnMgb25seSB0aGUgZm9yZWlnbiBrZXkgY29sdW1ucy4KLQkJICogCi0JCSAqIE5vdGU6IGZvbGxvd2luZyByZXN0cmljdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQ6Ci0JCSAqIC10YWJsZSBoYXMgb25seSB0d28gY29sdW1ucwotCQkgKiAtdDEgYW5kIHQyIG11c3QgYmUgZGlmZmVyZW50Ci0JCSAqIC10aGUgcHJpbWFyeSBrZXkgb2YgPGNvZGU+dGFibGU8L2NvZGU+IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGl0cyBmb3JlaWduIAotCQkgKiAJa2V5cyB0byB0MSBhbmQgdDIuKi8KLQkJCi0JCWlmIChhZGRlZEFzc29jaWF0aW9ucy5zaXplKCkgIT0gMikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCS8vTVRNIHRhYmxlIHNob3VsZCBoYXZlIHR3byBNVE8gcmVsYXRpb25zIHRvIG9yZ2luYWwgdGFibGVzCi0JCUFzc29jaWF0aW9uIGFzc29jMSA9IGFkZGVkQXNzb2NpYXRpb25zLmdldCgwKTsKLQkJQXNzb2NpYXRpb24gYXNzb2MyID0gYWRkZWRBc3NvY2lhdGlvbnMuZ2V0KDEpOwotCQlpZiAoYXNzb2MxLmdldENhcmRpbmFsaXR5KCkgIT0gQXNzb2NpYXRpb24uTUFOWV9UT19PTkUKLQkJCQl8fCBhc3NvYzIuZ2V0Q2FyZGluYWxpdHkoKSAhPSBBc3NvY2lhdGlvbi5NQU5ZX1RPX09ORSkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvL01UTSB0YWJsZSBzaG91bGQgb25seSBpbmNsdWRlIGZvcmVpZ24ga2V5IGNvbHVtbnMKLQkJZm9yKCBPUk1HZW5Db2x1bW4gY29sIDogdGFibGUuZ2V0Q29sdW1ucygpKXsKLQkJCWlmKCAhY29sLmlzRm9yZWlnbktleSgpKQotCQkJCXJldHVybiBudWxsOwotCQl9Ci0JCQotCi0JCU9STUdlblRhYmxlIHQxID0gYXNzb2MxLmdldFJlZmVyZW5jZWRUYWJsZSgpOwotCQlPUk1HZW5UYWJsZSB0MiA9IGFzc29jMi5nZXRSZWZlcmVuY2VkVGFibGUoKTsKLQotCQlpZiggdDEuZ2V0TmFtZSgpLmVxdWFscyh0YWJsZS5nZXROYW1lKCkpIHx8IHQyLmdldE5hbWUoKS5lcXVhbHModGFibGUuZ2V0TmFtZSgpKSApIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLy9NYWtlIGEgZ3Vlc3Mgd2hpY2ggdGFibGUgaXMgdGhlIG93bmluZyBzaWRlIG9mIHRoZSBNVE0gcmVsYXRpb24KLQkJLy9TZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI2ODQ0NQotCQkvL0xvZ2ljIGJvcnJvd2VkIGZyb20gRFRQVGFibGVXcmFwcGVyLmdldEpvaW5UYWJsZU93bmluZ0ZvcmVpZ25LZXkoKQotCQlpZiggIXRhYmxlLmdldE5hbWUoKS5lcXVhbHModDEuZ2V0TmFtZSgpICsgIl8iICsgdDIuZ2V0TmFtZSgpICkgKSB7Ci0JCQkvL3N3YXAgdDEgYW5kIHQyICAKLQkJCU9STUdlblRhYmxlIHQzID0gdDE7Ci0JCQl0MT10MjsKLQkJCXQyPXQzOwotCQkJLy9zd2FwIGFzc29jMSBhbmQgYXNzb2MyCi0JCQlBc3NvY2lhdGlvbiBhc3NvYzM9YXNzb2MxOwotCQkJYXNzb2MxPWFzc29jMjsKLQkJCWFzc29jMj1hc3NvYzM7Ci0JCX0KLQkJCi0vL0NvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGUgYXNzdW1wdGlvbiBpcyB0b28gcmVzdHJpY3RpdmU6IAotLy90aGlzIGNoZWNrIHdpbGwgcHJldmVudCBnZW5lcmF0aW5nIE1UTSBtYXBwaW5nIHRhYmxlIG5vdCBoYXZpbmcgCi0vL3ByaW1hcnkga2V5IGRlZmluZWQgCQkKLS8vCQlMaXN0IHBrTmFtZXMgPSBEVFBVdGlsLmdldFByaW1hcnlLZXlDb2x1bW5OYW1lcyh0YWJsZS5nZXREYlRhYmxlKCkpOwotLy8JCWlmIChwa05hbWVzLnNpemUoKSAhPSB0YWJsZS5nZXRDb2x1bW5OYW1lcygpLnNpemUoKSkgewotLy8JCQlyZXR1cm4gbnVsbDsKLS8vCQl9Ci0vLwkJTGlzdCBma05hbWVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoYXNzb2MxLmdldFJlZmVycmVyQ29sdW1uTmFtZXMoKSk7IC8vY2xvbmUgYmVjYXVzZSB3ZSBtb2RpZnkgYnkgYWRkQWxsIGJlbG93Ci0vLwkJZmtOYW1lcy5hZGRBbGwoYXNzb2MyLmdldFJlZmVycmVyQ29sdW1uTmFtZXMoKSk7Ci0vLwkJaWYgKCFDb2xsZWN0aW9uVXRpbC5lcXVhbHNJZ25vcmVPcmRlcihwa05hbWVzLCBma05hbWVzKSkgewotLy8JCQlyZXR1cm4gbnVsbDsKLS8vCQl9Ci0JCUFzc29jaWF0aW9uIG0ybSA9IG5ldyBBc3NvY2lhdGlvbih0aGlzLCB0MS5nZXROYW1lKCkvKnJlZmVycmVyVGFibGVOYW1lKi8sIGFzc29jMS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZXMoKS8qcmVmZXJyZXJDb2xOYW1lcyovCi0JCQkJLCB0Mi5nZXROYW1lKCkvKnJlZmVyZW5jZWRUYWJsZU5hbWUqLywgYXNzb2MyLmdldFJlZmVyZW5jZWRDb2x1bW5OYW1lcygpLypyZWZlcmVuY2VkQ29sTmFtZXMqLwotCQkJCSwgdGFibGUuZ2V0TmFtZSgpLCBhc3NvYzEuZ2V0UmVmZXJyZXJDb2x1bW5OYW1lcygpLypyZWZlcnJlckpvaW5Db2xOYW1lcyovLCBhc3NvYzIuZ2V0UmVmZXJyZXJDb2x1bW5OYW1lcygpLypyZWZlcmVuY2VkSm9pbkNvbE5hbWVzKi8pOwotCQltMm0uc2V0Q3VzdG9tKGZhbHNlKTsKLQkJcmV0dXJuIG0ybTsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vLS0tLSBGaWxlSGVhZGVyIGNsYXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkvKioKLQkgKiBUaGUgaGVhZGVyIG9mIHRoZSBjdXN0b21pemF0aW9uIGZpbGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRmlsZUhlYWRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlCi0JewotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQkJLyoqCi0JCSAqIFNob3VsZCBiZSBhcmd1bWVudC1sZXNzIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiAKLQkJICogdGhlIGRlLXNlcmlhbGl6YXRpb24gcHJvY2Vzcy4KLQkJICovCi0JCXB1YmxpYyBGaWxlSGVhZGVyKCkgewotCQkJbVZlcnNpb24gPSBGSUxFX1ZFUlNJT047Ci0JCX0KLQkJaW50IG1WZXJzaW9uOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT1JNR2VuVGFibGUuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT1JNR2VuVGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk2YWQwZC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL09STUdlblRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC5vbGQuRW50aXR5R2VuVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsLkRUUFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsLlN0cmluZ1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuSmF2YVR5cGU7Ci0KLS8qKgotICogUmVwcmVzZW50cyB0aGUgT1JNIGdlbmVyYXRpb24gcHJvcGVydGllcyBmb3IgYSBkYXRhYmFzZSB0YWJsZS4KLSAqIAotICogPHA+Ci0gKiBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGNyZWF0ZWQvY2hhbmdlZCBieSB0aGUgZ2VuZXJhdGlvbiB3aXphcmQsIGFuZAotICogZ2VuZXJhdGVkIHVzaW5nIFZlbG9jaXR5IHRlbXBsYXRlcy4gVGhlIG1vZGlmaWVkIHByb3BlcnRpZXMgKGlmIGFueSkgYXJlCi0gKiBwZXJzaXN0ZWQvcmV0cmlldmVkIHVzaW5nIDxjb2RlPk9STUdlbkN1c3RvbWl6ZXI8L2NvZGU+LgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBPUk1HZW5UYWJsZQotewotCXByaXZhdGUgT1JNR2VuQ3VzdG9taXplciBtQ3VzdG9taXplcjsKLQlwcml2YXRlIExpc3Q8T1JNR2VuQ29sdW1uPiBtQ29sdW1uczsKLQlwcml2YXRlIFRhYmxlIG1EYlRhYmxlOwotCXByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29sdW1uVHlwZXNNYXAgPSAgbnVsbDsKLQkvKioKLQkgKiBAcGFyYW0gdGFibGUKLQkgKiAgICAgICAgICAgIFRoZSBkYXRhYmFzZSB0YWJsZSBvciBudWxsIGlmIHRoaXMgdGFibGUgaXMgdXNlZCB0byBnZXQvc2V0Ci0JICogICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWJsZSBwcm9wZXJ0aWVzIChwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8gYWxsCi0JICogICAgICAgICAgICB0YWJsZXMgdW5sZXNzIG92ZXJyaWRlbikuCi0JICovCi0JcHVibGljIE9STUdlblRhYmxlKFRhYmxlIHRhYmxlLCBPUk1HZW5DdXN0b21pemVyIGN1c3RvbWl6ZXIpIHsKLQkJc3VwZXIoKTsKLQkJbURiVGFibGUgPSB0YWJsZTsKLQkJbUN1c3RvbWl6ZXIgPSBjdXN0b21pemVyOwotCX0KLQotCXB1YmxpYyBPUk1HZW5DdXN0b21pemVyIGdldEN1c3RvbWl6ZXIoKSB7Ci0JCXJldHVybiBtQ3VzdG9taXplcjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyB0YWJsZSBpcyBpcyB1c2VkIHRvIGdldC9zZXQgdGhlIGRlZmF1bHQgdGFibGUKLQkgKiBwcm9wZXJ0aWVzLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRGVmYXVsdHNUYWJsZSgpIHsKLQkJcmV0dXJuIG1EYlRhYmxlID09IG51bGw7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBjdXN0b21pemVkKFN0cmluZyBwcm9wTmFtZSkgewotCQlyZXR1cm4gZ2V0Q3VzdG9taXplcigpLmdldFByb3BlcnR5KHByb3BOYW1lLCBnZXROYW1lKCksIG51bGwpOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGN1c3RvbWl6ZWRCb29sZWFuKFN0cmluZyBwcm9wTmFtZSkgewotCQlyZXR1cm4gZ2V0Q3VzdG9taXplcigpLmdldEJvb2xlYW5Qcm9wZXJ0eShwcm9wTmFtZSwgZ2V0TmFtZSgpLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRDdXN0b21pemVkKFN0cmluZyBwcm9wTmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmxlbmd0aCgpID09IDApIHsKLQkJCXZhbHVlID0gbnVsbDsKLQkJfQotCQlnZXRDdXN0b21pemVyKCkuc2V0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLCBnZXROYW1lKCksIG51bGwpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldEN1c3RvbWl6ZWRCb29sZWFuKFN0cmluZyBwcm9wTmFtZSwgYm9vbGVhbiB2YWx1ZSwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKLQkJaWYgKGRlZmF1bHRWYWx1ZSA9PSB2YWx1ZSkgewotCQkJc2V0Q3VzdG9taXplZChwcm9wTmFtZSwgbnVsbCk7IC8vIHJlbW92ZSB0aGUgcHJvcGVydHkKLQkJfQotCQllbHNlIHsKLQkJCWdldEN1c3RvbWl6ZXIoKS5zZXRCb29sZWFuUHJvcGVydHkocHJvcE5hbWUsIHZhbHVlLCBnZXROYW1lKCksIG51bGwpOwotCQl9Ci0JfQotCi0JcHVibGljIFRhYmxlIGdldERiVGFibGUoKSB7Ci0JCXJldHVybiBtRGJUYWJsZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB0YWJsZSBuYW1lLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJaWYgKG1EYlRhYmxlID09IG51bGwpCi0JCQlyZXR1cm4gT1JNR2VuQ3VzdG9taXplci5BTllfVEFCTEU7Ci0JCXJldHVybiBtRGJUYWJsZS5nZXROYW1lKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRKb2luVGFibGVBbm5vdGF0aW9uTmFtZSgpIHsKLQkJaWYgKG1EYlRhYmxlID09IG51bGwpCi0JCQlyZXR1cm4gT1JNR2VuQ3VzdG9taXplci5BTllfVEFCTEU7Ci0JCVN0cmluZyBhbm5vdGF0aW9uTmFtZSA9IHRoaXMubUN1c3RvbWl6ZXIuZ2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoKS5idWlsZEpvaW5UYWJsZUFubm90YXRpb25OYW1lKG1EYlRhYmxlKTsKLQkJcmV0dXJuIGFubm90YXRpb25OYW1lICE9IG51bGwgPyBhbm5vdGF0aW9uTmFtZSA6IG1EYlRhYmxlLmdldE5hbWUoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBkYXRhYmFzZSBzY2hlbWEgY29udGFpbmluZyB0aGUgdGFibGUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB7Ci0JCWlmIChEVFBVdGlsLmlzRGVmYXVsdFNjaGVtYShtRGJUYWJsZSkgfHwgbURiVGFibGUuZ2V0U2NoZW1hKCk9PW51bGwpCi0JCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIHNjaGVtYU5hbWUgPSBtRGJUYWJsZS5nZXRTY2hlbWEoKS5nZXROYW1lKCk7Ci0JCXJldHVybiBzY2hlbWFOYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNvdXJjZUZvbGRlcihTdHJpbmcgc3JjRm9sZGVyKXsKLQkJc2V0Q3VzdG9taXplZChTUkNfRk9MREVSLCBzcmNGb2xkZXIpOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNvdXJjZUZvbGRlcigpewotCQlTdHJpbmcgc3JjRm9sZGVyID0gY3VzdG9taXplZChTUkNfRk9MREVSKTsKLQkJcmV0dXJuIHNyY0ZvbGRlciA9PSBudWxsID8gIiIgOiBzcmNGb2xkZXI7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0SW1wb3J0U3RhdGVtZW50cygpewotCQlidWlsZENvbHVtblR5cGVzTWFwKCk7Ci0JCUNvbGxlY3Rpb248U3RyaW5nPiBwYWNrYWdlcyA9IGNvbHVtblR5cGVzTWFwLmtleVNldCgpOwotCQlTdHJpbmdCdWlsZGVyIHJldCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCWZvciAoIFN0cmluZyBzIDogcGFja2FnZXMgKSB7Ci0JCQlyZXQuYXBwZW5kKCAiaW1wb3J0ICIgKyBzICsgIjtcbiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlMaXN0PEFzc29jaWF0aW9uUm9sZT4gYXNzb2NpYXRpb25Sb2xlcyA9IGdldEFzc29jaWF0aW9uUm9sZXMoKTsKLQkJZm9yICggQXNzb2NpYXRpb25Sb2xlIHJvbGUgOiAgYXNzb2NpYXRpb25Sb2xlcyApIHsKLQkJCWlmICggcm9sZS5nZXRDYXJkaW5hbGl0eSgpLmVxdWFscyggQXNzb2NpYXRpb24uT05FX1RPX01BTlkgKQotCQkJCQl8fCByb2xlLmdldENhcmRpbmFsaXR5KCkuZXF1YWxzKCBBc3NvY2lhdGlvbi5NQU5ZX1RPX01BTlkgKSApIHsKLQkJCQlyZXQuYXBwZW5kKCAiaW1wb3J0ICIgKyBnZXREZWZhdWx0Q29sbGVjdGlvblR5cGUoKSArICI7XG4iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCQotCQlyZXR1cm4gcmV0LnRvU3RyaW5nKCk7Ci0JfQotCQotCS8qKgotCSAqIENvbnN0cnVjdCBpbXBvcnQgc3RhdGVtZW50cyBmb3IgdHlwZXMgZnJvbSBqYXZheC5wZXJzaXN0ZW5jZSBwYWNrYWdlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEphdmF4UGVyc2lzdGVuY2VJbXBvcnRTdGF0ZW1lbnRzKCkgewotCQlTdHJpbmdCdWlsZGVyIHJldCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCXJldC5hcHBlbmQoICJpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuRW50aXR5O1xuIik7IC8vJE5PTi1OTFMtMSQKLQkJLy9UT0RPOiBvbmx5IGlmIEBDb2x1bW5zIGlzIG5lZWRlZAotCQlyZXQuYXBwZW5kKCAiaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLkNvbHVtbjtcbiIpOy8vJE5PTi1OTFMtMSQKLQkJLy9UT0RPOiBvbmx5IGlmIHRoZXJlIGlzIEBJZAotCQlyZXQuYXBwZW5kKCAiaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLklkO1xuIik7Ly8kTk9OLU5MUy0xJAotCQlpZiggIXRoaXMuaXNEZWZhdWx0bmFtZSgpICkKLQkJCXJldC5hcHBlbmQoICJpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuVGFibGU7XG4iKTsvLyROT04tTkxTLTEkCi0JCWlmKCB0aGlzLmlzQ29tcG9zaXRlS2V5KCkgKQotCQkJcmV0LmFwcGVuZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5FbWJlZGRlZElkO1xuIik7IC8vJE5PTi1OTFMtMSQKLQkJLy8gYXBwZW5kIGphdmF4LnBlcnNpc3RlbmNlIHBhY2thZ2UgaW1wb3J0cwotCQlIYXNoU2V0PFN0cmluZz4ganBhSW1wb3J0cyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsgCi0JCUxpc3Q8QXNzb2NpYXRpb25Sb2xlPiBhc3NvY2lhdGlvblJvbGVzID0gZ2V0QXNzb2NpYXRpb25Sb2xlcygpOwotCQlmb3IoIEFzc29jaWF0aW9uUm9sZSByb2xlIDogIGFzc29jaWF0aW9uUm9sZXMgKXsKLQkJCWlmKCByb2xlLmdldENhcmRpbmFsaXR5KCkuZXF1YWxzKCBBc3NvY2lhdGlvbi5PTkVfVE9fT05FICkgKXsKLQkJCQlqcGFJbXBvcnRzLmFkZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5PbmVUb09uZTsiICk7Ly8kTk9OLU5MUy0xJAotCQkJfWVsc2V7Ci0JCQkJaWYoIHJvbGUuZ2V0Q2FyZGluYWxpdHkoKS5lcXVhbHMoIEFzc29jaWF0aW9uLk9ORV9UT19NQU5ZICkgKXsKLQkJCQkJanBhSW1wb3J0cy5hZGQoICJpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuT25lVG9NYW55O1xuIiApOy8vJE5PTi1OTFMtMSQKLQkJCQl9ZWxzZSBpZiggcm9sZS5nZXRDYXJkaW5hbGl0eSgpLmVxdWFscyggQXNzb2NpYXRpb24uTUFOWV9UT19PTkUgKSApewotCQkJCQlqcGFJbXBvcnRzLmFkZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5NYW55VG9PbmU7XG4iICk7Ly8kTk9OLU5MUy0xJAotCQkJCQlqcGFJbXBvcnRzLmFkZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5Kb2luQ29sdW1uO1xuIiApOyAvLyROT04tTkxTLTEkCi0JCQkJfWVsc2UgaWYoIHJvbGUuZ2V0Q2FyZGluYWxpdHkoKS5lcXVhbHMoIEFzc29jaWF0aW9uLk1BTllfVE9fTUFOWSApICl7Ci0JCQkJCWpwYUltcG9ydHMuYWRkKCAiaW1wb3J0IGphdmF4LnBlcnNpc3RlbmNlLk1hbnlUb01hbnk7XG4iICk7Ly8kTk9OLU5MUy0xJAotCQkJCQlqcGFJbXBvcnRzLmFkZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5Kb2luVGFibGU7XG4iICk7Ly8kTk9OLU5MUy0xJAotCQkJCQlqcGFJbXBvcnRzLmFkZCggImltcG9ydCBqYXZheC5wZXJzaXN0ZW5jZS5Kb2luQ29sdW1ucztcbiIpOy8vJE5PTi1OTFMtMSQKLQkJCQkJanBhSW1wb3J0cy5hZGQoICJpbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuSm9pbkNvbHVtbjtcbiIgKTsvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfQotCQl9Ci0JCWZvciggU3RyaW5nIHM6IGpwYUltcG9ydHMpewotCQkJcmV0LmFwcGVuZChzKTsKLQkJfQotCQlyZXR1cm4gcmV0LnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGJ1aWxkQ29sdW1uVHlwZXNNYXAoKXsKLQkJaWYgKCBjb2x1bW5UeXBlc01hcCAhPSBudWxsKSB7Ci0JCQlyZXR1cm4gY29sdW1uVHlwZXNNYXA7Ci0JCX0KLQkJY29sdW1uVHlwZXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQkJZm9yICggT1JNR2VuQ29sdW1uIGNvbCA6IHRoaXMuZ2V0Q29sdW1ucygpICkgewotCQkJU3RyaW5nIHR5cGUgPSBjb2wuZ2V0UHJvcGVydHlUeXBlKCk7Ci0JCQlpZiAoICFjb2wuaXNQYXJ0T2ZDb21wb3NpdGVQcmltYXJ5S2V5KCkKLQkJCQkJJiYgIWNvbC5pc0ZvcmVpZ25LZXkoKQotCQkJCQkmJiAhdHlwZS5zdGFydHNXaXRoKCJqYXZhLmxhbmciKSAmJiB0eXBlLmluZGV4T2YoJy4nKT4wICkgewotCQkJCVN0cmluZyBzaW1wbGVUeXBlPSB0eXBlLnN1YnN0cmluZyggdHlwZS5sYXN0SW5kZXhPZignLicpKzEgKTsKLQkJCQljb2x1bW5UeXBlc01hcC5wdXQodHlwZSwgc2ltcGxlVHlwZSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGNvbHVtblR5cGVzTWFwOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFNpbXBsaWZpZWRDb2xUeXBlKFN0cmluZyBmcXRuICkgewotCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBidWlsZENvbHVtblR5cGVzTWFwKCk7Ci0JCVN0cmluZyB0eXBlTmFtZSA9IG1hcC5nZXQoZnF0bik7Ci0JCWlmICggIHR5cGVOYW1lICE9IG51bGwgKSB7Ci0JCQlyZXR1cm4gdHlwZU5hbWU7Ci0JCX0KLQkJcmV0dXJuIGZxdG47Ci0JfQotCQotCS8qKgotCSAqIFNldHMgdGhlIHBhY2thZ2UgZm9yIHRoZSBnZW5lcmF0ZWQgY2xhc3MgKGVtcHR5IHN0cmluZyBmb3IgdGhlIGRlZmF1bHQKLQkgKiBwYWNrYWdlKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFBhY2thZ2UoU3RyaW5nIHBrZykgewotCQlnZXRDdXN0b21pemVyKCkuc2V0UHJvcGVydHkoUEFDS0FHRSwgcGtnLCBnZXROYW1lKCksIG51bGwpOyAKLQkJLy8gbm90IGNhbGxpbmcgc2V0Q3VzdG9taXplZCBzbyB0aGF0IGVtcHR5IHN0cmluZ3MgZG8gbm90IGdldCBudWxsZWQgb3V0LgotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIEphdmEgcGFja2FnZSAoZW1wdHkgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBwYWNrYWdlKS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2UoKSB7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IGN1c3RvbWl6ZWQoUEFDS0FHRSk7Ci0JCXJldHVybiBwYWNrYWdlTmFtZSA9PSBudWxsID8gIiIgOiBwYWNrYWdlTmFtZTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBKYXZhIGNsYXNzIG5hbWUgKG5vdCBxdWFsaWZpZWQpLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewotCQlTdHJpbmcgbmFtZSA9IGN1c3RvbWl6ZWQoQ0xBU1NfTkFNRSk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCS8vIG5hbWUgPSBTdHJpbmdVdGlsLnRhYmxlTmFtZVRvVmFyTmFtZShnZXROYW1lKCkpOwotCQkJLy8gbmFtZSA9IFN0cmluZ1V0aWwuaW5pdFVwcGVyKG5hbWUpOwotCQkJbmFtZSA9IEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZShnZXROYW1lKCksIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKLQkJCW5hbWUgPSBTdHJpbmdVdGlsLnNpbmd1bGFyaXNlKG5hbWUpOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0JCS8qCi0JCSAqIGlmIHRoZSBjbGFzcyBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSAocG9zc2libHkgY29tcHV0ZWQpIGNsYXNzIG5hbWUKLQkJICogdGhlbiBub3RoaW5nIHRvIGRvCi0JCSAqLwotCQlpZiAoIVN0cmluZ1V0aWwuZXF1YWxPYmplY3RzKGNsYXNzTmFtZSwgZ2V0Q2xhc3NOYW1lKCkpKSB7Ci0JCQlzZXRDdXN0b21pemVkKENMQVNTX05BTUUsIGNsYXNzTmFtZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgbmFtZSBzdWl0YWJsZSB0byBiZSB1c2VkIGFzIGEgdmFyaWFibGUgb3IgY2xhc3MgbmFtZS4gVGhpcyBpcwotCSAqIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSB0YWJsZSBuYW1lLgotCSAqIAotCSAqIEBwYXJhbSBzaW5ndWxhcgotCSAqICAgICAgICAgICAgV2hldGhlciB0aGUgbmFtZSBzaG91bGQgYmUgc2luZ3VsYXIgb3IgcGx1cmFsLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFyTmFtZShib29sZWFuIHNpbmd1bGFyKSB7Ci0JCVN0cmluZyBuYW1lID0gU3RyaW5nVXRpbC50YWJsZU5hbWVUb1Zhck5hbWUoZ2V0TmFtZSgpKTsKLQkJaWYgKHNpbmd1bGFyKSB7Ci0JCQluYW1lID0gU3RyaW5nVXRpbC5zaW5ndWxhcmlzZShuYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCW5hbWUgPSBTdHJpbmdVdGlsLnBsdXJhbGlzZShuYW1lKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgZ2VuZXJhdGVkIEphdmEgY2xhc3MgbmFtZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllZENsYXNzTmFtZSgpIHsKLQkJcmV0dXJuIHF1YWxpZnkoZ2V0Q2xhc3NOYW1lKCkpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNvbXBvc2l0ZSBrZXkgSmF2YSBjbGFzcyBuYW1lIChub3QgcXVhbGlmaWVkKS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldENvbXBvc2l0ZUtleUNsYXNzTmFtZSgpIHsKLQkJU3RyaW5nIG5hbWUgPSBjdXN0b21pemVkKENPTVBPU0lURV9LRVlfQ0xBU1NfTkFNRSk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBnZXRDbGFzc05hbWUoKSArICJQSyI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgY29tcG9zaXRlIGtleSBKYXZhIGNsYXNzIG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWRDb21wb3NpdGVLZXlDbGFzc05hbWUoKSB7Ci0JCXJldHVybiBxdWFsaWZ5KGdldENvbXBvc2l0ZUtleUNsYXNzTmFtZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb21wb3NpdGUga2V5IHByb3BlcnR5IG5hbWUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRDb21wb3NpdGVLZXlQcm9wZXJ0eU5hbWUoKSB7Ci0JCXJldHVybiAiaWQiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgPGNvZGU+T1JNR2VuQ29sdW1uPC9jb2RlPiBvYmplY3RzIHRvIGJlIGdlbmVyYXRlZCBmb3IgdGhpcwotCSAqIHRhYmxlLgotCSAqLwotCXB1YmxpYyBMaXN0PE9STUdlbkNvbHVtbj4gZ2V0Q29sdW1ucygpIHsKLQkJaWYgKG1Db2x1bW5zID09IG51bGwpIHsKLQkJCW1Db2x1bW5zID0gbmV3IEFycmF5TGlzdDxPUk1HZW5Db2x1bW4+KCk7Ci0JCQlJdGVyYXRvcjxDb2x1bW4+IGNvbHMgPSBtRGJUYWJsZS5jb2x1bW5zKCk7Ci0JCQl3aGlsZSAoY29scy5oYXNOZXh0KCkpIHsKLQkJCQlDb2x1bW4gYyA9IGNvbHMubmV4dCgpOwotCQkJCU9STUdlbkNvbHVtbiBnZW5Db2x1bW4gPSBnZXRDdXN0b21pemVyKCkuY3JlYXRlR2VuQ29sdW1uKGMpOwotCQkJCWdlbkNvbHVtbi5zZXRHZW5UYWJsZSh0aGlzKTsKLQkJCQltQ29sdW1ucy5hZGQoZ2VuQ29sdW1uKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbUNvbHVtbnM7Ci0JfQotCi0JcHVibGljIExpc3Q8U3RyaW5nPiBnZXRDb2x1bW5OYW1lcygpIHsKLQkJSXRlcmF0b3I8Q29sdW1uPiBjb2xzID0gbURiVGFibGUuY29sdW1ucygpOwotCQlMaXN0PFN0cmluZz4gcmV0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCXdoaWxlIChjb2xzLmhhc05leHQoKSkgewotCQkJQ29sdW1uIGMgPSBjb2xzLm5leHQoKTsKLQkJCXJldC5hZGQoYy5nZXROYW1lKCkpOwotCQl9Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgPGNvZGU+T1JNR2VuQ29sdW1uPC9jb2RlPiBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdGFibGUncwotCSAqIHByaW1hcnkga2V5LgotCSAqLwotCXB1YmxpYyBMaXN0PE9STUdlbkNvbHVtbj4gZ2V0UHJpbWFyeUtleUNvbHVtbnMoKSB7Ci0JCUxpc3Q8T1JNR2VuQ29sdW1uPiByZXQgPSBuZXcgQXJyYXlMaXN0PE9STUdlbkNvbHVtbj4oKTsKLQkJZm9yIChJdGVyYXRvcjxDb2x1bW4+IHN0cmVhbSA9IG1EYlRhYmxlLnByaW1hcnlLZXlDb2x1bW5zKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJcmV0LmFkZChuZXcgT1JNR2VuQ29sdW1uKHN0cmVhbS5uZXh0KCksIHRoaXMubUN1c3RvbWl6ZXIpKTsKLQkJfQotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHByaW1hcnkga2V5IGNvbHVtbiBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG9yIG1hbnkgcHJpbWFyeSBrZXkKLQkgKiBjb2x1bW5zLgotCSAqLwotCXB1YmxpYyBPUk1HZW5Db2x1bW4gZ2V0UHJpbWFyeUtleUNvbHVtbigpIHsKLQkJT1JNR2VuQ29sdW1uIHBrQ29sID0gbnVsbDsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IHBrQ29sdW1ucyA9IGdldFByaW1hcnlLZXlDb2x1bW5zKCk7Ci0JCWlmIChwa0NvbHVtbnMuc2l6ZSgpID09IDEpIHsKLQkJCS8vIENvbHVtbiBkYkNvbCA9IChDb2x1bW4pcGtDb2x1bW5zLmdldCgwKTsKLQkJCXBrQ29sID0gcGtDb2x1bW5zLmdldCgwKTsgLy8gKE9STUdlbkNvbHVtbikKLQkJCQkJCQkJCQkvLyBtQ3VzdG9taXplci5jcmVhdGVHZW5Db2x1bW4oZGJDb2wpOwotCQl9Ci0JCWVsc2UgewotCQkJLyoKLQkJCSAqIGlmIG5vIHBrIGNvbHVtbiB0aGVuIGxvb2sgZm9yIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBpZCBtYXBwaW5nCi0JCQkgKiBraW5kLiBUaGlzIGlzIHNvIHRoYXQgdGhlIHdpemFyZCBjYW4gYmUgdXNlZCB3aXRoIHRhYmxlcyBub3QKLQkJCSAqIGhhdmluZyBwcmltYXJ5IGtleXMuCi0JCQkgKi8KLQkJCUxpc3Q8T1JNR2VuQ29sdW1uPiBjb2x1bW5zID0gZ2V0Q29sdW1ucygpOwotCQkJZm9yIChpbnQgaSA9IDAsIG4gPSBjb2x1bW5zLnNpemUoKTsgaSA8IG47ICsraSkgewotCQkJCU9STUdlbkNvbHVtbiBjb2x1bW4gPSBjb2x1bW5zLmdldChpKTsKLQkJCQlpZiAoY29sdW1uLmdldE1hcHBpbmdLaW5kKCkuZXF1YWxzKG1DdXN0b21pemVyLmdldElkTWFwcGluZ0tpbmQoKSkpIHsKLQkJCQkJcGtDb2wgPSBjb2x1bW47Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gcGtDb2w7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHBrIGNvbHVtbi4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0NvbXBvc2l0ZUtleSgpIHsKLQkJcmV0dXJuIG1EYlRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpID4gMTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSA8Y29kZT5PUk1HZW5Db2x1bW48L2NvZGU+IG9iamVjdHMgZm9yIHRoZSB0aGUgY29sdW1ucyB0aGF0Ci0JICogYXJlIG5vdCBwYXJ0IG9mIGFueSBhc3NvY2lhdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gZ2VuT25seQotCSAqICAgICAgICAgICAgV2hldGhlciB0byBpbmNsdWRlIG9ubHkgdGhlIGNvbHVtbnMgbWFya2VkIGZvciBnZW5lcmF0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBpbmNsdWRlUGsKLQkgKiAgICAgICAgICAgIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgcHJpbWFyeSBrbGV5IGNvbHVtbihzKS4KLQkgKiAKLQkgKiBAcGFyYW0gaW5jbHVkZUluaGVyaXRlZAotCSAqICAgICAgICAgICAgV2hldGhlciB0byBpbmNsdWRlIHRoZSBjb2x1bW5zIGFzc29jaWF0ZWQgd2l0aCBKYXZhIHByb3BlcnRpZXMKLQkgKiAgICAgICAgICAgIHRoYXQgZXhpc3QgaW4gdGhlIHN1cGVyIGNsYXNzIChpZiBhbnkpLgotCSAqLwotCXB1YmxpYyBMaXN0PE9STUdlbkNvbHVtbj4gZ2V0U2ltcGxlQ29sdW1ucyhib29sZWFuIGdlbk9ubHksIGJvb2xlYW4gaW5jbHVkZVBrLCBib29sZWFuIGluY2x1ZGVJbmhlcml0ZWQpIHsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IHJlc3VsdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PE9STUdlbkNvbHVtbj4oKTsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IGNvbHVtbnMgPSBnZXRDb2x1bW5zKCk7Ci0JCUxpc3Q8QXNzb2NpYXRpb25Sb2xlPiByb2xlcyA9IGdldEFzc29jaWF0aW9uUm9sZXMoKTsKLQkJZm9yIChpbnQgaSA9IDAsIG4gPSBjb2x1bW5zLnNpemUoKTsgaSA8IG47ICsraSkgewotCQkJT1JNR2VuQ29sdW1uIGNvbHVtbiA9IGNvbHVtbnMuZ2V0KGkpOwotCQkJaWYgKGdlbk9ubHkgJiYgIWNvbHVtbi5pc0dlbmVyYXRlZCgpKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoY29sdW1uLmlzUHJpbWFyeUtleSgpKSB7Ci0JCQkJaWYgKCFpbmNsdWRlUGsgfHwgaXNDb21wb3NpdGVLZXkoKSkgewotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQlyZXN1bHQuYWRkKDAsIGNvbHVtbik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKGlzQ29sdW1uSW5Bc3Njb2NpYXRpb24oY29sdW1uLCByb2xlcykpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXJlc3VsdC5hZGQoY29sdW1uKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBMaXN0PE9STUdlbkNvbHVtbj4gZ2V0U2ltcGxlQ29sdW1ucygpIHsKLQkJcmV0dXJuIGdldFNpbXBsZUNvbHVtbnModHJ1ZS8qIGdlbk9ubHkgKi8sIHRydWUvKiBpbmNsdWRlUGsgKi8sIHRydWUvKiBpbmNsdWRlSW5oZXJpdGVkICovKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBnaXZlbiBjb2x1bW4gc2hvdWxkIGJlIGdlbmVyYXRlZCB3aXRoIGZhbHNlCi0JICogdXBkYXRhYmxlL2luc2VydGFibGUuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgY29sdW1uIGlzIG1hcHBlZCBtb3JlCi0JICogdGhhbiBvbmNlLCB0aGlzIHVzdWFsbHkgaGFwcGVuIHdpdGggY29sdW1ucyBpbiBjb21wb3NpdGUga2V5cyBhbmQKLQkgKiBtYW55LXRvLW9uZSBhc3NvY2lhdGlvbnMuCi0JICogCi0JICogPGJyPgotCSAqIE5vdGUgdGhhdCBmb3IgSGliZXJuYXRlIHRoZSBjb2x1bW4gcGFyYW0gaXMgbnVsbCBiZWNhdXNlIHRoZQotCSAqIGluc2VydC91cGRhdGUgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWVkIGZvciB0aGUgbWFueS10by1vbmUgdGFnIGl0c2VsZgotCSAqIGluc3RlYWQgb2YgdGhlIG5lc3RlZCBjb2x1bW4gdGFncyAoYm9ndXMgb2J2aW91c2x5KS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0NvbHVtblVwZGF0ZUluc2VydChBc3NvY2lhdGlvblJvbGUgcm9sZSwgT1JNR2VuQ29sdW1uIGNvbHVtbikgewotCQlpZiAoY29sdW1uID09IG51bGwpIHsKLQkJCWZvciAoSXRlcmF0b3I8T1JNR2VuQ29sdW1uPiBpdGVyID0gcm9sZS5nZXRSZWZlcnJlckNvbHVtbnMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCQlPUk1HZW5Db2x1bW4gYyA9IGl0ZXIubmV4dCgpOwotCQkJCWlmICghaXNDb2x1bW5VcGRhdGVJbnNlcnQocm9sZSwgYykpIHsKLQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChjb2x1bW4uaXNQcmltYXJ5S2V5KCkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkvKgotCQkgKiBzaG91bGQgbG9vayBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXNzb2NpYXRpb25zIHVzaW5nIHRoZSBzYW1lIGNvbHVtbgotCQkgKiBhbmQgcmV0dXJuIGZhbHNlLCBidXQgdGhpcyBpcyBwcm9iYWJseSBhbiB1bnVzdWFsIGNhc2UuCi0JCSAqLwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSA8Y29kZT5PUk1HZW5Db2x1bW48L2NvZGU+IG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4KLQkgKiBjb2x1bW4gbmFtZXMuCi0JICovCi0JcHVibGljIExpc3Q8T1JNR2VuQ29sdW1uPiBnZXRDb2x1bW5zQnlOYW1lcyhMaXN0PFN0cmluZz4gbmFtZXMpIHsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IHJlc3VsdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PE9STUdlbkNvbHVtbj4oKTsKLQkJZm9yIChTdHJpbmcgbmFtZSA6IG5hbWVzKSB7Ci0JCQlPUk1HZW5Db2x1bW4gY29sdW1uID0gZ2V0Q29sdW1uQnlOYW1lKG5hbWUpOwotCQkJYXNzZXJ0IChjb2x1bW4gIT0gbnVsbCk7Ci0JCQlpZiAoY29sdW1uICE9IG51bGwpIHsKLQkJCQlyZXN1bHQuYWRkKGNvbHVtbik7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjb2x1bW5zIGhhdmluZyB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub25lLgotCSAqLwotCXB1YmxpYyBPUk1HZW5Db2x1bW4gZ2V0Q29sdW1uQnlOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCUxpc3Q8T1JNR2VuQ29sdW1uPiBjb2x1bW5zID0gZ2V0Q29sdW1ucygpOwotCQlmb3IgKGludCBpID0gMCwgbiA9IGNvbHVtbnMuc2l6ZSgpOyBpIDwgbjsgKytpKSB7Ci0JCQlPUk1HZW5Db2x1bW4gY29sdW1uID0gY29sdW1ucy5nZXQoaSk7Ci0JCQlpZiAoY29sdW1uLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKLQkJCQlyZXR1cm4gY29sdW1uOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIDxjb2RlPkFzc29jaWF0aW9uUm9sZTwvY29kZT4gb2JqZWN0cyBmb3IgdGhpcyB0YWJsZS4gT25seSB0aGUKLQkgKiBhc3NvY2lhdGlvbiBtYXJrZWQgZm9yIGdlbmVyYXRpb24gYXJlIHJldHVybmVkLgotCSAqLwotCXB1YmxpYyBMaXN0PEFzc29jaWF0aW9uUm9sZT4gZ2V0QXNzb2NpYXRpb25Sb2xlcygpIHsKLQkJLyoKLQkJICogdGhpcyBpcyBub3QgY2FjaGVkIGludGVudGlvbmFsbHkgYmVjYXVzZSBpbnZhbGlkYXRpbmcgdGhlIGNhY2hlIHdpdGgKLQkJICogd2l6YXJkIGNoYW5nZXMgaXMga2luZGEgdHJpY2t5LgotCQkgKi8KLQkJTGlzdDxBc3NvY2lhdGlvblJvbGU+IGFzc29jaWF0aW9uUm9sZXMgPSBuZXcgQXJyYXlMaXN0PEFzc29jaWF0aW9uUm9sZT4oKTsKLQkJU3RyaW5nIG5hbWUgPSBnZXROYW1lKCk7Ci0JCUxpc3Q8QXNzb2NpYXRpb24+IGFzc29jaWF0aW9ucyA9IG1DdXN0b21pemVyLmdldEFzc29jaWF0aW9ucygpOwotCQlmb3IgKEl0ZXJhdG9yPEFzc29jaWF0aW9uPiBpdGVyID0gYXNzb2NpYXRpb25zLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJQXNzb2NpYXRpb24gYXNzb2NpYXRpb24gPSBpdGVyLm5leHQoKTsKLQkJCWlmICghYXNzb2NpYXRpb24uaXNHZW5lcmF0ZWQoKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyoKLQkJCSAqIGNoZWNrIGJvdGggcmVmZXJyZXJhbmQgcmVmZXJlbmNlZCBiZWNhdXNlIGFuIGFzc29jaWF0aW9uIGNvdWxkIGJlCi0JCQkgKiBmcm9tLXRvIHRoZSBzYW1lIHRhYmxlIChlbXBsb3llZS9tYW5hZ2VyKQotCQkJICovCi0JCQlpZiAoYXNzb2NpYXRpb24uZ2V0UmVmZXJyZXJUYWJsZSgpLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKLQkJCQlBc3NvY2lhdGlvblJvbGUgcm9sZSA9IGFzc29jaWF0aW9uLmdldFJlZmVycmVyUm9sZSgpOwotCQkJCWlmIChyb2xlICE9IG51bGwpIHsKLQkJCQkJYXNzb2NpYXRpb25Sb2xlcy5hZGQocm9sZSk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGFzc29jaWF0aW9uLmdldFJlZmVyZW5jZWRUYWJsZSgpLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKLQkJCQlBc3NvY2lhdGlvblJvbGUgcm9sZSA9IGFzc29jaWF0aW9uLmdldFJlZmVyZW5jZWRSb2xlKCk7Ci0JCQkJaWYgKHJvbGUgIT0gbnVsbCkgewotCQkJCQlhc3NvY2lhdGlvblJvbGVzLmFkZChyb2xlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGFzc29jaWF0aW9uUm9sZXM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGFzc0Rlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gY3VzdG9taXplZChDTEFTU19ERVNDKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgY2xhc3Mgc2NvcGUsIG9uZSBvZiB7QGxpbmsgI1BVQkxJQ19TQ09QRX18Ci0JICoge0BsaW5rICNQUk9URUNURURfU0NPUEV9IHx7QGxpbmsgI1BSSVZBVEVfU0NPUEV9LiBUaGlzIG1ldGhvZCBuZXZlcgotCSAqIHJldHVybnMgbnVsbCAoZGVmYXVsdHMgdG8gcHVibGljKS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldENsYXNzU2NvcGUoKSB7Ci0JCVN0cmluZyBzY29wZSA9IGN1c3RvbWl6ZWQoQ0xBU1NfU0NPUEUpOwotCQlpZiAoc2NvcGUgPT0gbnVsbCkgewotCQkJc2NvcGUgPSBQVUJMSUNfU0NPUEU7Ci0JCX0KLQkJcmV0dXJuIHNjb3BlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RXh0ZW5kcygpIHsKLQkJcmV0dXJuIGN1c3RvbWl6ZWQoRVhURU5EUyk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RXh0ZW5kcyhTdHJpbmcgYmFzZUNsYXNzKSB7Ci0JCXNldEN1c3RvbWl6ZWQoRVhURU5EUywgYmFzZUNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEltcGxlbWVudHMoKSB7Ci0JCVN0cmluZyBzdHIgPSBjdXN0b21pemVkKElNUExFTUVOVFMpOwotCQlMaXN0PFN0cmluZz4gcmVzdWx0ID0gU3RyaW5nVXRpbC5zdHJUb0xpc3Qoc3RyLCAnLCcsIHRydWUvKiB0cmltICovKTsKLQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyB2b2lkIHNldEltcGxlbWVudHMoTGlzdDxTdHJpbmc+IGludGVyZmFjZXMpIHsKLQkJc2V0Q3VzdG9taXplZChJTVBMRU1FTlRTLCBTdHJpbmdVdGlsLmxpc3RUb1N0cihpbnRlcmZhY2VzLCAnLCcpKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkIGluIHRoZSBKYXZhIGNsYXNzIGZvciBleHRlbmRzCi0JICogYW5kIGltcGxlbWVudHMuCi0JICovCi0JcHVibGljIFN0cmluZyBnZW5lcmF0ZUV4dGVuZHNJbXBsZW1lbnRzKCkgewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlTdHJpbmcgZXh0ZW5kc0NsYXNzID0gZ2V0RXh0ZW5kcygpOwotCQlpZiAoZXh0ZW5kc0NsYXNzICE9IG51bGwgJiYgIWV4dGVuZHNDbGFzcy5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSAmJiAhZXh0ZW5kc0NsYXNzLmVxdWFscygiT2JqZWN0IikpIHsKLQkJCWJ1ZmZlci5hcHBlbmQoImV4dGVuZHMgIiArIHNpbXBsaWZ5Q2xhc3NOYW1lKGV4dGVuZHNDbGFzcykgKyAiICIpOyAvL2ZpeCBmb3IgYnVnIDI3ODYyNgotCQl9Ci0JCWJ1ZmZlci5hcHBlbmQoImltcGxlbWVudHMgU2VyaWFsaXphYmxlIik7IC8vIGFzc3VtaW5nIHRoYXQgdGhlIEphdmEKLQkJCQkJCQkJCQkJCQkvLyBmaWxlIHRlbXBsYXRlIGltcG9ydHMgdGhlCi0JCQkJCQkJCQkJCQkJLy8gamF2YS5pby5TZXJpYWxpemFibGUKLQkJZm9yIChJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBnZXRJbXBsZW1lbnRzKCkuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQlidWZmZXIuYXBwZW5kKCIsICIgKyBzaW1wbGlmeUNsYXNzTmFtZShpdGVyLm5leHQoKSkpOwotCQl9Ci0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBzaW1wbGlmeUNsYXNzTmFtZShTdHJpbmcgZnVsbENsYXNzTmFtZSkgewotCQlmaW5hbCBTdHJpbmcgSkFWQV9MQU5HID0gImphdmEubGFuZy4iOwotCQlpZiAoZnVsbENsYXNzTmFtZS5zdGFydHNXaXRoKEpBVkFfTEFORykpIHsKLQkJCXJldHVybiBmdWxsQ2xhc3NOYW1lLnN1YnN0cmluZyhKQVZBX0xBTkcubGVuZ3RoKCkpOwotCQl9Ci0JCVN0cmluZyBwa2cgPSBTdHJpbmdVdGlsLmdldFBhY2thZ2VOYW1lKGZ1bGxDbGFzc05hbWUpOwotCQlpZiAocGtnICE9IG51bGwgJiYgU3RyaW5nVXRpbC5lcXVhbE9iamVjdHMocGtnLCBnZXRQYWNrYWdlKCkpKSB7Ci0JCQlyZXR1cm4gU3RyaW5nVXRpbC5nZXRDbGFzc05hbWUoZnVsbENsYXNzTmFtZSk7Ci0JCX0KLQkJcmV0dXJuIGZ1bGxDbGFzc05hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgaWQgZ2VuZXJhdG9yIHNjaGVtZSAoYXNzaWduZWQsIHNlcXVlbmNlLCBldGMpLiBEb2VzIG5vdAotCSAqIHJldHVybiBudWxsLCBkZWZhdWx0cyB0byAiYXNzaWduZWQiIG9yICJpZGVudGl0eSIgZGVwZW5kaW5nIG9uIHdoZXRoZXIKLQkgKiB0aGUgdGFibGUgaGFzIGFuIGlkZW50aXR5IGNvbHVtbi4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldElkR2VuZXJhdG9yKCkgewotCQlTdHJpbmcgZ2VuZXJhdG9yID0gY3VzdG9taXplZChJRF9HRU5FUkFUT1IpOwotCQlTdHJpbmcgbm9uZUdlbmVyYXRvciA9IGdldEN1c3RvbWl6ZXIoKS5nZXROb0lkR2VuZXJhdG9yKCk7Ci0JCWlmICghaXNEZWZhdWx0c1RhYmxlKCkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGRvbmUgbWFpbmx5IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgY2FzZXMgd2hlcmUgc29tZQotCQkJICogdGFibGVzIGhhdmUgYXV0b2luY3RlbWVudCBwayBhbmQgb3RoZXJzIGFyZSBhc3NpZ25lZC4gSW4gdGhpcwotCQkJICogY2FzZSB0aGlzIG1ha2VzIGl0IHNvIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhICJub25lIgotCQkJICogZGVmYXVsdCB2YWx1ZSB0aGF0IGlzIGludGVycHJldGVkIGRlcGVuZGluZyBvbiB0aGUgY2FzZS4KLQkJCSAqLwotCQkJaWYgKGdlbmVyYXRvciA9PSBudWxsIHx8IGdlbmVyYXRvci5lcXVhbHMobm9uZUdlbmVyYXRvcikpIHsKLQkJCQlPUk1HZW5Db2x1bW4gcGtDb2x1bW4gPSBnZXRQcmltYXJ5S2V5Q29sdW1uKCk7Ci0JCQkJaWYgKHBrQ29sdW1uICE9IG51bGwgJiYgRFRQVXRpbC5pc0F1dG9JbmNyZW1lbnQocGtDb2x1bW4uZ2V0RGJDb2x1bW4oKSkpIHsKLQkJCQkJZ2VuZXJhdG9yID0gZ2V0Q3VzdG9taXplcigpLmdldElkZW50aXR5SWRHZW5lcmF0b3IoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGdlbmVyYXRvciA9PSBudWxsKSB7Ci0JCQlnZW5lcmF0b3IgPSBub25lR2VuZXJhdG9yOwotCQl9Ci0JCXJldHVybiBnZW5lcmF0b3I7Ci0JfQotCi0JLyoqCi0JICogQ2hhbmdlcyB0aGUgaWQgZ2VuZXJhdG9yIHNjaGVtZSAoYXNzaWduZWQsIHNlcXVlbmNlLCBldGMpLgotCSAqLwotCXB1YmxpYyB2b2lkIHNldElkR2VuZXJhdG9yKFN0cmluZyBzY2hlbWUpIHsKLQkJc2V0Q3VzdG9taXplZChJRF9HRU5FUkFUT1IsIHNjaGVtZSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2VxdWVuY2UgbmFtZSBmb3IgdGhlIGdpdmVuIHRhYmxlLCBvciBudWxsIGlmIG5vbmUgKG1ha2VzCi0JICogc2Vuc2Ugb25seSB3aGVuIHRoZSBzY2hlbWUgaXMgbmF0aXZlLCBzZXF1ZW5jZSwgLi4pLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2VxdWVuY2UoKSB7Ci0JCXJldHVybiBjdXN0b21pemVkKFNFUVVFTkNFKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTZXF1ZW5jZShTdHJpbmcgbmFtZSkgewotCQlzZXRDdXN0b21pemVkKFNFUVVFTkNFLCBuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzZXF1ZW5jZSBuYW1lIGFmdGVyIHJlcGxhY2luZyB0aGUgJHt0YWJsZX0gYW5kICR7cGt9IGJ5IHRoZWlyCi0JICogdmFsdWVzLCBvciBudWxsIGlmIG5vbmUuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRGb3JtYXR0ZWRTZXF1ZW5jZSgpIHsKLQkJU3RyaW5nIHNlcXVlbmNlID0gZ2V0U2VxdWVuY2UoKTsKLQkJaWYgKHNlcXVlbmNlICE9IG51bGwpIHsKLQkJCS8qIHJlc29sdmUgdGhlICR7dGFibGV9IGFuZCAke3BrfSBwYXR0ZXJucyAqLwotCQkJc2VxdWVuY2UgPSBTdHJpbmdVdGlsLnN0clJlcGxhY2Uoc2VxdWVuY2UsIFRBQkxFX1NFUV9QQVRURVJOLCBnZXROYW1lKCkpOwotCQkJaWYgKHNlcXVlbmNlLmluZGV4T2YoUEtfU0VRX1BBVFRFUk4pID49IDApIHsKLQkJCQlJdGVyYXRvcjxDb2x1bW4+IHBrQ29scyA9IGdldERiVGFibGUoKS5wcmltYXJ5S2V5Q29sdW1ucygpOwotCQkJCVN0cmluZyBwa05hbWUgPSBwa0NvbHMuaGFzTmV4dCgpID8gcGtDb2xzLm5leHQoKS5nZXROYW1lKCkgOiBudWxsOwotCQkJCXNlcXVlbmNlID0gU3RyaW5nVXRpbC5zdHJSZXBsYWNlKHNlcXVlbmNlLCBQS19TRVFfUEFUVEVSTiwgcGtOYW1lKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gc2VxdWVuY2UgIT0gbnVsbCA/IHNlcXVlbmNlLnRvVXBwZXJDYXNlKCkgOiAiIjsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ltcGxlbWVudEVxdWFscygpIHsKLQkJcmV0dXJuICEidHJ1ZSIuZXF1YWxzKGN1c3RvbWl6ZWQoSU1QTEVNRU5UX0VRVUFMUykpOyAvLyBkZWZhdWx0cyB0bwotCQkJCQkJCQkJCQkJCQkJCS8vIGZhbHNlCi0JfQotCi0JcHVibGljIHZvaWQgc2V0SW1wbGVtZW50RXF1YWxzKGJvb2xlYW4gdmFsdWUpIHsKLQkJc2V0Q3VzdG9taXplZEJvb2xlYW4oSU1QTEVNRU5UX0VRVUFMUywgdmFsdWUsIHRydWUpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbnkgY29sdW1uIHBhcnRpY2lwYXRpbmcgaW4gZXF1YWxzL2hhc2hjb2RlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGhhc0NvbHVtbnNJbkVxdWFscygpIHsKLQkJTGlzdDxPUk1HZW5Db2x1bW4+IGNvbHVtbnMgPSBnZXRTaW1wbGVDb2x1bW5zKCk7Ci0JCWZvciAoaW50IGkgPSAwLCBuID0gY29sdW1ucy5zaXplKCk7IGkgPCBuOyArK2kpIHsKLQkJCU9STUdlbkNvbHVtbiBjb2x1bW4gPSBjb2x1bW5zLmdldChpKTsKLQkJCWlmIChjb2x1bW4uaXNVc2VJbkVxdWFscygpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMge0BsaW5rICNHRU5FUkFURV9ERExfQU5OT1RBVElPTn0gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBvcHRpb25hbAotCSAqIERETCBwYXJhbWV0ZXJzIGxpa2UgbGVuZ3RoLCBudWxsYWJsZSwgdW5xaXVlLCBldGMgc2hvdWxkIGJlIGdlbmVyYXRlZCBpbiBAQ29sdW1uCi0JICogYW5ub3RhdGlvbi4gZGVmYXVsdHMgdG8gZmFsc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNHZW5lcmF0ZURETEFubm90YXRpb25zKCkgewotCQlyZXR1cm4gInRydWUiLmVxdWFscyhjdXN0b21pemVkKE9STUdlbkN1c3RvbWl6ZXIuR0VORVJBVEVfRERMX0FOTk9UQVRJT04pKTsgLy8gZGVmYXVsdHMKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHRvCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBmYWxzZQotCX0KLQotCXB1YmxpYyB2b2lkIHNldEdlbmVyYXRlRERMQW5ub3RhdGlvbnMoYm9vbGVhbiBnZW5lcmF0ZSkgewotCQlzZXRDdXN0b21pemVkQm9vbGVhbihPUk1HZW5DdXN0b21pemVyLkdFTkVSQVRFX0RETF9BTk5PVEFUSU9OLCBnZW5lcmF0ZSwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgb25lIG9mIHtAbGluayAjUFJPUEVSVFlfQUNDRVNTfXx7QGxpbmsgI0ZJRUxEX0FDQ0VTU30gaW5kaWNhdGluZwotCSAqIGhvdyB0aGUgZW50aXR5IHByb3BlcnRpZXMgYXJlIG1hcHBlZC4gRG9lcyBub3QgcmV0dXJuIG51bGwgKGRlZmF1bHRzIHRvCi0JICoge0BsaW5rICNGSUVMRF9BQ0NFU1N9KS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEFjY2VzcygpIHsKLQkJU3RyaW5nIG5hbWUgPSBjdXN0b21pemVkKEFDQ0VTUyk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBGSUVMRF9BQ0NFU1M7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0QWNjZXNzKFN0cmluZyBhY2Nlc3MpIHsKLQkJYXNzZXJ0IChhY2Nlc3MgPT0gbnVsbCB8fCBhY2Nlc3MuZXF1YWxzKFBST1BFUlRZX0FDQ0VTUykgfHwgYWNjZXNzLmVxdWFscyhGSUVMRF9BQ0NFU1MpKTsKLQkJaWYgKCFTdHJpbmdVdGlsLmVxdWFsT2JqZWN0cyhhY2Nlc3MsIGdldEFjY2VzcygpKSkgewotCQkJc2V0Q3VzdG9taXplZChBQ0NFU1MsIGFjY2Vzcyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIG9uZSBvZiB7QGxpbmsgI0xBWllfRkVUQ0h9fHtAbGluayAjRUFHRVJfRkVUQ0h9IGluZGljYXRpbmcgaG93Ci0JICogdGhlIHRhYmxlIGFzc29jaWF0aW9ucyBhcmUgZmVjaGVkLiBSZXR1cm5zIG51bGwgaWYgdGhlIHByb3ZpZGVyIGRlZmF1bHRzCi0JICogc2hvdWxkIGJlIHVzZWQuCi0JICovCi0JcHVibGljIFN0cmluZyBnZXREZWZhdWx0RmV0Y2goKSB7Ci0JCXJldHVybiBjdXN0b21pemVkKERFRkFVTFRfRkVUQ0gpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlZmF1bHRGZXRjaChTdHJpbmcgZmV0Y2gpIHsKLQkJYXNzZXJ0IChmZXRjaCA9PSBudWxsIHx8IGZldGNoLmVxdWFscyhMQVpZX0ZFVENIKSB8fCBmZXRjaC5lcXVhbHMoRUFHRVJfRkVUQ0gpKTsKLQkJc2V0Q3VzdG9taXplZChERUZBVUxUX0ZFVENILCBmZXRjaCk7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldFN1cHBvcnRlZENvbGxlY3Rpb25UeXBlcygpIHsKLQkJcmV0dXJuIG5ldyBTdHJpbmdbXSB7Ci0JCQlTRVRfQ09MTEVDVElPTl9UWVBFLCBMSVNUX0NPTExFQ1RJT05fVFlQRQotCQl9OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgb25lIG9mIHtAbGluayAjTElTVF9DT0xMRUNUSU9OX1RZUEV9fHtAbGluayAjU0VUX0NPTExFQ1RJT05fVFlQRX0KLQkgKiBpbmRpY2F0aW5nIHRoZSBKYXZhIHR5cGUgKGZ1bGwgY2xhc3MgbmFtZSkgdXNlZCBmb3IgcHJvcGVydGllcyBvZgotCSAqIGNvbGxlY3Rpb24gdHlwZXMuIFRoaXMgZG9lcyBub3QgcmV0dXJuIG51bGwgKGRlZmF1bHRzIHRvIGxpc3QpLgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdENvbGxlY3Rpb25UeXBlKCkgewotCQlTdHJpbmcgY1R5cGUgPSBjdXN0b21pemVkKERFRkFVTFRfQ09MTEVDVElPTl9UWVBFKTsKLQkJaWYgKGNUeXBlID09IG51bGwpIHsKLQkJCWNUeXBlID0gU0VUX0NPTExFQ1RJT05fVFlQRTsKLQkJfQotCQlyZXR1cm4gY1R5cGU7Ci0JfQotCQotCXB1YmxpYyBTdHJpbmcgZ2V0U2ltcGxlQ29sbGVjdGlvblR5cGUoKXsKLQkJIFN0cmluZyB0eXBlID0gZ2V0RGVmYXVsdENvbGxlY3Rpb25UeXBlKCk7Ci0JCXJldHVybiB0eXBlLnN1YnN0cmluZyggdHlwZS5sYXN0SW5kZXhPZignLicpICsxICk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdENvbGxlY3Rpb25UeXBlKFN0cmluZyBjVHlwZSkgewotCQlhc3NlcnQgKGNUeXBlLmVxdWFscyhMSVNUX0NPTExFQ1RJT05fVFlQRSkgfHwgY1R5cGUuZXF1YWxzKFNFVF9DT0xMRUNUSU9OX1RZUEUpKTsKLQkJc2V0Q3VzdG9taXplZChERUZBVUxUX0NPTExFQ1RJT05fVFlQRSwgY1R5cGUpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJpbWFyeSBrZXkgaXMgY29tcG91bmQgYW5kIGFueSBvZiBpdHMgY29sdW1ucyBzaG91bGQKLQkgKiBiZSBpbmNsdWRlZCBpbiB0aGUgPGNvZGU+ZXF1YWxzPC9jb2RlPiBtZXRob2QgaW1wbGVtZW50YXRpb24uCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNDb21wb3VuZEtleVVzZUluRXF1YWxzKCkgewotCQlpZiAoaXNDb21wb3NpdGVLZXkoKSkgewotCQkJZm9yIChJdGVyYXRvcjxPUk1HZW5Db2x1bW4+IGl0ZXIgPSBnZXRQcmltYXJ5S2V5Q29sdW1ucygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCU9STUdlbkNvbHVtbiBjb2x1bW4gPSBpdGVyLm5leHQoKTsKLQkJCQlpZiAoY29sdW1uLmlzVXNlSW5FcXVhbHMoKSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzUm9sZVVzZUluRXF1YWxzKEFzc29jaWF0aW9uUm9sZSByb2xlKSB7Ci0JCWZvciAoSXRlcmF0b3I8T1JNR2VuQ29sdW1uPiBpdGVyID0gcm9sZS5nZXRSZWZlcnJlckNvbHVtbnMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKLQkJCU9STUdlbkNvbHVtbiBjb2x1bW4gPSBpdGVyLm5leHQoKTsKLQkJCWlmIChjb2x1bW4uaXNVc2VJbkVxdWFscygpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZXMgb2YgbmFtZSBlbGVtZW50IGluIHRoZSBAVGFibGUgaXMgZGVmYXVsdCBzbyB3ZQotCSAqIGNhbiBza2lwIGdlbmVyYXRpbmcgdGhlIGFubm90YXRpb24KLQkgKiAKLQkgKiBAcmV0dXJuIHRydWUKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0RlZmF1bHRuYW1lKCkgewotCQlTdHJpbmcgZW50aXR5TmFtZSA9IGdldENsYXNzTmFtZSgpOwotCQlTdHJpbmcgYW5ub3RhdGlvbk5hbWUgPSB0aGlzLm1DdXN0b21pemVyLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuYnVpbGRUYWJsZUFubm90YXRpb25OYW1lKGVudGl0eU5hbWUsIG1EYlRhYmxlKTsKLQkJcmV0dXJuIGFubm90YXRpb25OYW1lID09IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUXVhbGlmaWVzIGEgY2xhc3MgbmFtZSBpZiB0aGVyZSBpcyBhIHBhY2thZ2UuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgcXVhbGlmeShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0JCVN0cmluZyBwa2cgPSBnZXRQYWNrYWdlKCk7Ci0JCWlmIChwa2cgIT0gbnVsbCAmJiBwa2cubGVuZ3RoKCkgIT0gMCkgewotCQkJY2xhc3NOYW1lID0gcGtnICsgJy4nICsgY2xhc3NOYW1lOwotCQl9Ci0JCXJldHVybiBjbGFzc05hbWU7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjb2x1bW4gaXMgcGFydCBvZiBhbnkgYXNzb2NpYXRpb24uCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzQ29sdW1uSW5Bc3Njb2NpYXRpb24oT1JNR2VuQ29sdW1uIGNvbHVtbiwgTGlzdDxBc3NvY2lhdGlvblJvbGU+IHJvbGVzKSB7Ci0JCWZvciAoaW50IGkgPSAwLCBuID0gcm9sZXMuc2l6ZSgpOyBpIDwgbjsgKytpKSB7Ci0JCQlBc3NvY2lhdGlvblJvbGUgcm9sZSA9IHJvbGVzLmdldChpKTsKLQkJCUxpc3Q8T1JNR2VuQ29sdW1uPiBjb2xzID0gcm9sZS5nZXRSZWZlcnJlckNvbHVtbnMoKTsKLQkJCWZvciAoT1JNR2VuQ29sdW1uIGNvbCA6IGNvbHMpIHsKLQkJCQlpZiAoY29sLmdldE5hbWUoKS5lcXVhbHMoY29sdW1uLmdldE5hbWUoKSkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludCB0aGUgY2xhdXNlIHRvIGJlIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBlcXVhbHMoKSBtZXRob2QKLQkgKiAKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0UHJpbWFyeUtleUVxdWFsc0NsYXVzZSgpIHsKLQkJU3RyaW5nQnVpbGRlciBidWYgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlJdGVyYXRvcjxPUk1HZW5Db2x1bW4+IGNvbHVtbnMgPSB0aGlzLmdldFByaW1hcnlLZXlDb2x1bW5zKCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGNvbHVtbnMuaGFzTmV4dCgpKSB7Ci0JCQl0aGlzLnByaW50UHJpbWFyeUtleUVxdWFsc0NsYXVzZU9uKGNvbHVtbnMubmV4dCgpLCBidWYpOwotCQkJaWYgKGNvbHVtbnMuaGFzTmV4dCgpKSB7Ci0JCQkJYnVmLmFwcGVuZCgiXG4iKTsKLQkJCQlidWYuYXBwZW5kKCJcdFx0XHQiKTsKLQkJCQlidWYuYXBwZW5kKCImJiAiKTsKLQkJCX0KLQkJfQotCQlidWYuYXBwZW5kKCI7Iik7Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRQcmltYXJ5S2V5RXF1YWxzQ2xhdXNlT24oT1JNR2VuQ29sdW1uIGNvbHVtbiwgU3RyaW5nQnVpbGRlciBidWYpIHsKLQkJU3RyaW5nIGZpZWxkTmFtZSA9IGNvbHVtbi5nZXRQcm9wZXJ0eU5hbWUoKTsKLQkJSmF2YVR5cGUgamF2YVR5cGUgPSBjb2x1bW4uZ2V0RGJDb2x1bW4oKS5nZXRQcmltYXJ5S2V5SmF2YVR5cGUoKTsKLQkJaWYgKGphdmFUeXBlLmlzUHJpbWl0aXZlKCkpIHsKLQkJCXRoaXMucHJpbnRQcmltaXRpdmVFcXVhbHNDbGF1c2VPbihmaWVsZE5hbWUsIGJ1Zik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0aGlzLnByaW50UmVmZXJlbmNlRXF1YWxzQ2xhdXNlT24oZmllbGROYW1lLCBidWYpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWl0aXZlRXF1YWxzQ2xhdXNlT24oU3RyaW5nIGZpZWxkTmFtZSwgU3RyaW5nQnVpbGRlciBidWYpIHsKLQkJYnVmLmFwcGVuZCgiKHRoaXMuIik7Ci0JCWJ1Zi5hcHBlbmQoZmllbGROYW1lKTsKLQkJYnVmLmFwcGVuZCgiID09IGNhc3RPdGhlci4iKTsKLQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQlidWYuYXBwZW5kKCcpJyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UmVmZXJlbmNlRXF1YWxzQ2xhdXNlT24oU3RyaW5nIGZpZWxkTmFtZSwgU3RyaW5nQnVpbGRlciBidWYpIHsKLQkJYnVmLmFwcGVuZCgidGhpcy4iKTsKLQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQlidWYuYXBwZW5kKCIuZXF1YWxzKGNhc3RPdGhlci4iKTsKLQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQlidWYuYXBwZW5kKCcpJyk7Ci0JfQotCi0JLyoqCi0JICogUHJpbnQgdGhlIGNsYXVzZSB0byBiZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgaGFzQ29kZSgpIG1ldGhvZAotCSAqIAotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRQcmltYXJ5S2V5SGFzaENvZGVDbGF1c2UoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgYnVmID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJSXRlcmF0b3I8T1JNR2VuQ29sdW1uPiBjb2x1bW5zID0gdGhpcy5nZXRQcmltYXJ5S2V5Q29sdW1ucygpLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChjb2x1bW5zLmhhc05leHQoKSkgewotCQkJYnVmLmFwcGVuZCgiaGFzaCA9IGhhc2ggKiBwcmltZSArICIpOwotCQkJdGhpcy5wcmludFByaW1hcnlLZXlIYXNoQ29kZUNsYXVzZU9uKGNvbHVtbnMubmV4dCgpLCBidWYpOwotCQkJYnVmLmFwcGVuZCgnOycpOwotCQkJYnVmLmFwcGVuZCgnXG4nKTsKLQkJCWJ1Zi5hcHBlbmQoIlx0XHQiKTsKLQkJfQotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUhhc2hDb2RlQ2xhdXNlT24oT1JNR2VuQ29sdW1uIGNvbHVtbiwgU3RyaW5nQnVpbGRlciBidWYpIHsKLQkJU3RyaW5nIGZpZWxkTmFtZSA9IGNvbHVtbi5nZXRQcm9wZXJ0eU5hbWUoKTsKLQkJSmF2YVR5cGUgamF2YVR5cGUgPSBjb2x1bW4uZ2V0RGJDb2x1bW4oKS5nZXRQcmltYXJ5S2V5SmF2YVR5cGUoKTsKLQkJaWYgKGphdmFUeXBlLmlzUHJpbWl0aXZlKCkpIHsKLQkJCXRoaXMucHJpbnRQcmltaXRpdmVIYXNoQ29kZUNsYXVzZU9uKGphdmFUeXBlLmdldEVsZW1lbnRUeXBlTmFtZSgpLCBmaWVsZE5hbWUsIGJ1Zik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0aGlzLnByaW50UmVmZXJlbmNlSGFzaENvZGVDbGF1c2VPbihmaWVsZE5hbWUsIGJ1Zik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRQcmltaXRpdmVIYXNoQ29kZUNsYXVzZU9uKFN0cmluZyBwcmltaXRpdmVOYW1lLCBTdHJpbmcgZmllbGROYW1lLCBTdHJpbmdCdWlsZGVyIGJ1ZikgewotCQlpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoImludCIpKSB7Ci0JCQkvLyB0aGlzLnZhbHVlCi0JCQlidWYuYXBwZW5kKCJ0aGlzLiIpOwotCQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQl9Ci0JCWVsc2UgaWYgKHByaW1pdGl2ZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHByaW1pdGl2ZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgcHJpbWl0aXZlTmFtZS5lcXVhbHMoImNoYXIiKSkgeyAvLyBleHBsaWNpdAotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBjYXN0Ci0JCQkvLyAoKGludCkgdGhpcy52YWx1ZSkKLQkJCWJ1Zi5hcHBlbmQoIigoaW50KSB0aGlzLiIpOwotCQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQkJYnVmLmFwcGVuZCgnKScpOwotCQl9Ci0JCWVsc2UgaWYgKHByaW1pdGl2ZU5hbWUuZXF1YWxzKCJsb25nIikpIHsgLy8gY3JpYmJlZCBmcm9tIExvbmcjaGFzaENvZGUoKQotCQkJLy8gKChpbnQpICh0aGlzLnZhbHVlIF4gKHRoaXMudmFsdWUgPj4+IDMyKSkpCi0JCQlidWYuYXBwZW5kKCIoKGludCkgKHRoaXMuIik7Ci0JCQlidWYuYXBwZW5kKGZpZWxkTmFtZSk7Ci0JCQlidWYuYXBwZW5kKCIgXiAodGhpcy4iKTsKLQkJCWJ1Zi5hcHBlbmQoZmllbGROYW1lKTsKLQkJCWJ1Zi5hcHBlbmQoIiA+Pj4gMzIpKSkiKTsKLQkJfQotCQllbHNlIGlmIChwcmltaXRpdmVOYW1lLmVxdWFscygiZmxvYXQiKSkgeyAvLyBjcmliYmVkIGZyb20KLQkJCQkJCQkJCQkJCQkvLyBGbG9hdCNoYXNoQ29kZSgpCi0JCQkvLyBqYXZhLmxhbmcuRmxvYXQuZmxvYXRUb0ludEJpdHModGhpcy52YWx1ZSkKLQkJCWJ1Zi5hcHBlbmQoImphdmEubGFuZy5GbG9hdCIpOwotCQkJYnVmLmFwcGVuZCgiLmZsb2F0VG9JbnRCaXRzKHRoaXMuIik7Ci0JCQlidWYuYXBwZW5kKGZpZWxkTmFtZSk7Ci0JCQlidWYuYXBwZW5kKCcpJyk7Ci0JCX0KLQkJZWxzZSBpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoImRvdWJsZSIpKSB7IC8vIGNyaWJiZWQgZnJvbQotCQkJCQkJCQkJCQkJCS8vIERvdWJsZSNoYXNoQ29kZSgpCi0JCQkvLyAoKGludCkgKGphdmEubGFuZy5Eb3VibGUuZG91YmxlVG9Mb25nQml0cyh0aGlzLnZhbHVlKSBeCi0JCQkvLyAoamF2YS5sYW5nLkRvdWJsZS5kb3VibGVUb0xvbmdCaXRzKHRoaXMudmFsdWUpID4+PiAzMikpKQotCQkJYnVmLmFwcGVuZCgiKChpbnQpICgiKTsKLQkJCWJ1Zi5hcHBlbmQoImphdmEubGFuZy5Eb3VibGUiKTsKLQkJCWJ1Zi5hcHBlbmQoIi5kb3VibGVUb0xvbmdCaXRzKHRoaXMuIik7Ci0JCQlidWYuYXBwZW5kKGZpZWxkTmFtZSk7Ci0JCQlidWYuYXBwZW5kKCIpIF4gKCIpOwotCQkJYnVmLmFwcGVuZCgiamF2YS5sYW5nLkRvdWJsZSIpOwotCQkJYnVmLmFwcGVuZCgiLmRvdWJsZVRvTG9uZ0JpdHModGhpcy4iKTsKLQkJCWJ1Zi5hcHBlbmQoZmllbGROYW1lKTsKLQkJCWJ1Zi5hcHBlbmQoIikgPj4+IDMyKSkpIik7Ci0JCX0KLQkJZWxzZSBpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSkgewotCQkJLy8gKHRoaXMudmFsdWUgPyAxIDogMCkKLQkJCWJ1Zi5hcHBlbmQoIih0aGlzLiIpOwotCQkJYnVmLmFwcGVuZChmaWVsZE5hbWUpOwotCQkJYnVmLmFwcGVuZCgiID8gMSA6IDApIik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHByaW1pdGl2ZU5hbWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UmVmZXJlbmNlSGFzaENvZGVDbGF1c2VPbihTdHJpbmcgZmllbGROYW1lLCBTdHJpbmdCdWlsZGVyIGJ1ZikgewotCQlidWYuYXBwZW5kKCJ0aGlzLiIpOwotCQlidWYuYXBwZW5kKGZpZWxkTmFtZSk7Ci0JCWJ1Zi5hcHBlbmQoIi5oYXNoQ29kZSgpIik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJcmV0dXJuICJuYW1lPSIgKyB0aGlzLmdldE5hbWUoKSArICI7IGNvbHVtbnM9IiArIEFycmF5cy50b1N0cmluZyh0aGlzLmdldENvbHVtbk5hbWVzKCkudG9BcnJheSgpKTsKLQl9Ci0KLQkvKiBjbGFzcyBzY29wZXMgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSUNfU0NPUEUgPSAicHVibGljIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1RFQ1RFRF9TQ09QRSA9ICJwcm90ZWN0ZWQiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJVkFURV9TQ09QRSA9ICJwcml2YXRlIjsKLQotCS8qIGFjY2VzcyBjb25zdGFudHMuIE5vdGUgdGhhdCB0aGVzZSBzdHJpbmdzIGFyZSB1c2VkIGluIHRoZSB1aSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1BFUlRZX0FDQ0VTUyA9ICJwcm9wZXJ0eSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGSUVMRF9BQ0NFU1MgPSAiZmllbGQiOwotCi0JLyoKLQkgKiBkZWZhdWx0IGZlY2ggY29uc3RhbnRzLiBOb3RlIHRoYXQgdGhlc2Ugc3RyaW5ncyBhcmUgdXNlZCBpbiB0aGUgZ2VuCi0JICogdmVsb2NpdHkgdGVtcGxhdGVzLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRkVUQ0ggPSAiZGVmYXVsdEZldGNoIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBWllfRkVUQ0ggPSAibGF6eSI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFQUdFUl9GRVRDSCA9ICJlYWdlciI7Ci0KLQkvKgotCSAqIGRlZmF1bHQgY29sbGVjdGlvbiB0eXBlIGNvbnN0YW50cy4gTm90ZSB0aGF0IHRoZXNlIHN0cmluZ3MgYXJlIHVzZWQgaW4KLQkgKiB0aGUgZ2VuIHZlbG9jaXR5IHRlbXBsYXRlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX0NPTExFQ1RJT05fVFlQRSA9ICJqYXZhLnV0aWwuTGlzdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfQ09MTEVDVElPTl9UWVBFID0gImphdmEudXRpbC5TZXQiOwotCi0JLyoqCi0JICogVGhlIHBhdHRlcm4gcmVwbGFjZWQgYnkgdGhlIHRhYmxlIG5hbWUgaW4gdGhlIGlkIGdlbmVyYXRvciBzZXF1ZW5jZSBuYW1lCi0JICogcGFyYW0uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFCTEVfU0VRX1BBVFRFUk4gPSAiJHRhYmxlIjsKLQotCS8qKgotCSAqIFRoZSBwYXR0ZXJuIHJlcGxhY2VkIGJ5IHRoZSBwcmltYXJ5IGtleSBpbiB0aGUgaWQgZ2VuZXJhdG9yIHNlcXVlbmNlIG5hbWUKLQkgKiBwYXJhbS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQS19TRVFfUEFUVEVSTiA9ICIkcGsiOwotCi0JLyogY3VzdG9taXphdGlvbiBwcm9wZXJ0aWVzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBQ0tBR0UgPSAicGFja2FnZSI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1JDX0ZPTERFUiA9ICJzcmNGb2xkZXIiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENMQVNTX05BTUUgPSAiY2xhc3NOYW1lIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19ERVNDID0gImNsYXNzRGVzYyI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NfU0NPUEUgPSAiY2xhc3NTY29wZSI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURU5EUyA9ICJleHRlbmRzIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTVBMRU1FTlRTID0gImltcGxlbWVudHMiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dFTkVSQVRPUiA9ICJpZEdlbmVyYXRvciI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VRVUVOQ0UgPSAic2VxdWVuY2UiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBPU0lURV9LRVlfQ0xBU1NfTkFNRSA9ICJjb21wb3NpdGVLZXlDbGFzc05hbWUiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElNUExFTUVOVF9FUVVBTFMgPSAiaW1wbGVtZW50RXF1YWxzIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFU1MgPSAiYWNjZXNzIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NPTExFQ1RJT05fVFlQRSA9ICJkZWZhdWx0Q29sbGVjdGlvblR5cGUiOwotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9PdmVyd3JpdGVDb25maXJtZXIuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvT3ZlcndyaXRlQ29uZmlybWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YmYyN2QuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9PdmVyd3JpdGVDb25maXJtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotcHVibGljIGludGVyZmFjZSBPdmVyd3JpdGVDb25maXJtZXIgewotCS8qKgotCSAqIFJldHVybiB3aGV0aGVyIHRoZSBlbnRpdHkgZ2VuZXJhdG9yIHNob3VsZCBvdmVyd3JpdGUgdGhlIHNwZWNpZmllZAotCSAqIGZpbGUuCi0JICovCi0JYm9vbGVhbiBvdmVyd3JpdGUoU3RyaW5nIGNsYXNzTmFtZSk7Ci0KLQotCWZpbmFsIGNsYXNzIEFsd2F5cyBpbXBsZW1lbnRzIE92ZXJ3cml0ZUNvbmZpcm1lciB7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgT3ZlcndyaXRlQ29uZmlybWVyIElOU1RBTkNFID0gbmV3IEFsd2F5cygpOwotCQlwdWJsaWMgc3RhdGljIE92ZXJ3cml0ZUNvbmZpcm1lciBpbnN0YW5jZSgpIHsKLQkJCXJldHVybiBJTlNUQU5DRTsKLQkJfQotCQkvLyBlbnN1cmUgc2luZ2xlIGluc3RhbmNlCi0JCXByaXZhdGUgQWx3YXlzKCkgewotCQkJc3VwZXIoKTsKLQkJfQotCQkvLyBldmVyeXRoaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4KLQkJcHVibGljIGJvb2xlYW4gb3ZlcndyaXRlKFN0cmluZyBhcmcwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCXJldHVybiAiT3ZlcndyaXRlQ29uZmlybWVyLkFsd2F5cyI7ICAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLQotCWZpbmFsIGNsYXNzIE5ldmVyIGltcGxlbWVudHMgT3ZlcndyaXRlQ29uZmlybWVyIHsKLQkJcHVibGljIHN0YXRpYyBmaW5hbCBPdmVyd3JpdGVDb25maXJtZXIgSU5TVEFOQ0UgPSBuZXcgTmV2ZXIoKTsKLQkJcHVibGljIHN0YXRpYyBPdmVyd3JpdGVDb25maXJtZXIgaW5zdGFuY2UoKSB7Ci0JCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JCX0KLQkJLy8gZW5zdXJlIHNpbmdsZSBpbnN0YW5jZQotCQlwcml2YXRlIE5ldmVyKCkgewotCQkJc3VwZXIoKTsKLQkJfQotCQkvLyBub3RoaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4KLQkJcHVibGljIGJvb2xlYW4gb3ZlcndyaXRlKFN0cmluZyBhcmcwKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlyZXR1cm4gIk92ZXJ3cml0ZUNvbmZpcm1lci5OZXZlciI7ICAvLyROT04tTkxTLTEkCi0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL1BhY2thZ2VHZW5lcmF0b3IyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL1BhY2thZ2VHZW5lcmF0b3IyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWQzZDYuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9QYWNrYWdlR2VuZXJhdG9yMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudmVsb2NpdHkuVmVsb2NpdHlDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudmVsb2NpdHkuYXBwLlZlbG9jaXR5RW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudmVsb2NpdHkucnVudGltZS5sb2cuSmRrTG9nQ2h1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN1Yk1vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklQYWNrYWdlRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudFJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwudXRpbC5Db21waWxhdGlvblVuaXRNb2RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsLlVybFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFRoaXMgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgYSBwYWNrYWdlIG9mIGVudGl0aWVzIGZvciBhIHNldCBvZiB0YWJsZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYWNrYWdlR2VuZXJhdG9yMiB7IAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR0dFUl9OQU1FID0gIm9yZy5lY2xpcHNlLmpwdC5lbnRpdGllcy5nZW4ubG9nIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgSUphdmFQcm9qZWN0IGphdmFQcm9qZWN0OwotCXByaXZhdGUgT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyIDsgCi0JcHJpdmF0ZSBzdGF0aWMgT3ZlcndyaXRlQ29uZmlybWVyIG92ZXJ3cml0ZUNvbmZpcm1lciA9IG51bGw7Ci0KLQlzdGF0aWMgcHVibGljIHZvaWQgc2V0T3ZlcndyaXRlQ29uZmlybWVyKE92ZXJ3cml0ZUNvbmZpcm1lciBjb25maXJtZXIpewotCQlvdmVyd3JpdGVDb25maXJtZXIgPSBjb25maXJtZXI7Ci0JfQotCS8qKgotCSAqIEBwYXJhbSBjdXN0b21pemVyCi0JICogQHBhcmFtIHN5bmNocm9uaXplUGVyc2lzdGVuY2VYbWwKLQkgKiBAcGFyYW0gY29weUpkYmNEcml2ZQotCSAqIEB0aHJvd3MgRXhjZXB0aW9uIAotCSAqLwotCXN0YXRpYyBwdWJsaWMgdm9pZCBnZW5lcmF0ZShJSmF2YVByb2plY3QganBhUHJvamVjdCwgT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVBhY2thZ2VHZW5lcmF0b3IyIGdlbmVyYXRvciA9IG5ldyBQYWNrYWdlR2VuZXJhdG9yMigpOwotCQlnZW5lcmF0b3Iuc2V0UHJvamVjdChqcGFQcm9qZWN0KTsKLQkJZ2VuZXJhdG9yLnNldEN1c3RvbWl6ZXIoY3VzdG9taXplcik7Ci0JCQotCQl0cnkgewotCQkJZ2VuZXJhdG9yLmRvR2VuZXJhdGUoICBtb25pdG9yKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSnB0R2VuUGx1Z2luLlBMVUdJTl9JRCwgSnB0R2VuTWVzc2FnZXMuRXJyb3JfR2VuZXJhdGluZ19FbnRpdGllcywgZSkpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgT2JqZWN0IGdldEN1c3RvbWl6ZXIoKSB7Ci0JCXJldHVybiB0aGlzLmN1c3RvbWl6ZXI7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldEN1c3RvbWl6ZXIoT1JNR2VuQ3VzdG9taXplciBjdXN0b21pemVyMikgewotCQl0aGlzLmN1c3RvbWl6ZXIgPSBjdXN0b21pemVyMjsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFByb2plY3QoSUphdmFQcm9qZWN0IHByb2ogKXsKLQkJdGhpcy5qYXZhUHJvamVjdCA9IHByb2o7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGRvR2VuZXJhdGUoICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZ2VuZXJhdGVJbnRlcm5hbCggbW9uaXRvciApOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGdlbmVyYXRlSW50ZXJuYWwoIElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHRocm93cyBFeGNlcHRpb24gewotCQlGaWxlIHRlbXBsRGlyID0gcHJlcGFyZVRlbXBsYXRlc0ZvbGRlcigpOwotCi0JCUxpc3Q8U3RyaW5nPiBnZW5DbGFzc2VzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3Q8U3RyaW5nPigpOwotCQlMaXN0PFN0cmluZz4gdGFibGVOYW1lcyA9IGN1c3RvbWl6ZXIuZ2V0R2VuVGFibGVOYW1lcygpOwotCi0JCS8qIC5qYXZhIHBlciB0YWJsZSwgcGVyc2lzdGVuY2UueG1sLCByZWZyZXNoIHBhY2thZ2UgZm9sZGVyICovCi0JCVN0cmluZyB0YXNrTmFtZSA9IE5MUy5iaW5kKEpwdEdlbk1lc3NhZ2VzLkVudGl0eUdlbmVyYXRvcl90YXNrTmFtZSwgIlRvdGFsICIrIHRhYmxlTmFtZXMuc2l6ZSgpICsgMik7Ly8kTk9OLU5MUy0xJAotCQlwcm9ncmVzcy5iZWdpblRhc2sodGFza05hbWUsIHRhYmxlTmFtZXMuc2l6ZSgpICsgMik7Ci0KLQotCQlmb3IgKEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHRhYmxlTmFtZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQlTdHJpbmcgdGFibGVOYW1lID0gaXRlci5uZXh0KCk7Ci0JCQlPUk1HZW5UYWJsZSB0YWJsZSA9IGN1c3RvbWl6ZXIuZ2V0VGFibGUodGFibGVOYW1lKTsKLQotCQkJU3RyaW5nIGNsYXNzTmFtZSA9IHRhYmxlLmdldFF1YWxpZmllZENsYXNzTmFtZSgpOwotCi0JCQlnZW5lcmF0ZUNsYXNzKHRhYmxlLCB0ZW1wbERpci5nZXRBYnNvbHV0ZVBhdGgoKSwgcHJvZ3Jlc3MpOwotCQkJcHJvZ3Jlc3Mud29ya2VkKDEpOwotCi0JCQlnZW5DbGFzc2VzLmFkZCggY2xhc3NOYW1lICk7Ci0JCQkvKgotCQkJICogYWRkIHRoZSBjb21wb3NpdGUga2V5IGNsYXNzIHRvIHBlcnNpc3RlbmNlLnhtbCBiZWNhdXNlIHNvbWUgCi0JCQkgKiBKUEEgcHJvdmlkZXIoZS5nLiBLb2RvKSByZXF1aXJlcyBpdC4gSGliZXJuYXRlIGRvZXNuJ3Qgc2VlbSB0byBjYXJlKS4gCi0JCQkgKi8KLQkJCWlmICh0YWJsZS5pc0NvbXBvc2l0ZUtleSgpKSB7Ci0JCQkJZ2VuQ2xhc3Nlcy5hZGQodGFibGUuZ2V0UXVhbGlmaWVkQ29tcG9zaXRlS2V5Q2xhc3NOYW1lKCkpOwotCQkJfQotCQl9Ci0JCXByb2dyZXNzLmRvbmUoKTsKLQl9Ci0KLQlwcml2YXRlIEZpbGUgcHJlcGFyZVRlbXBsYXRlc0ZvbGRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgRXhjZXB0aW9uLAotCQkJQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vUHJlcGFyZSB0aGUgVmVsb2NpdHkgdGVtcGxhdGUgZm9sZGVyOgotCQkvL0lmIHRoZSBwbHVnLWluIGlzIHBhY2thZ2VkIGFzIGEgSkFSLCB3ZSBuZWVkIGV4dHJhY3QgdGhlIHRlbXBsYXRlIAotCQkvL2ZvbGRlciBpbnRvIHRoZSBwbHVnLWluIHN0YXRlIGxvY2F0aW9uLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IFZlbG9jaXR5Ci0JCS8vc2luY2Ugd2UgdXNlIGluY2x1ZGVkIHRlbXBsYXRlcy4KLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShKcHRHZW5QbHVnaW4uUExVR0lOX0lEKTsKLQkJU3RyaW5nIHRlbXBsYXRlc1BhdGggPSAidGVtcGxhdGVzL2VudGl0aWVzLyI7ICAvLyROT04tTkxTLTEkCi0JCVBhdGggcGF0aCA9IG5ldyBQYXRoKCB0ZW1wbGF0ZXNQYXRoKTsKLQkJVVJMIHVybCA9IEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLCBwYXRoLCBudWxsKTsKLQkJaWYgKCB1cmwgPT1udWxsICApIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSnB0R2VuUGx1Z2luLlBMVUdJTl9JRCwgIEpwdEdlbk1lc3NhZ2VzLlRlbXBsYXRlc19ub3RGb3VuZCArICIgIisgIEpwdEdlblBsdWdpbi5QTFVHSU5fSUQgKyAiLyIgKyB0ZW1wbGF0ZXNQYXRoKSApOy8vJE5PTi1OTFMtMSQKLQkJfQkJCi0JCVVSTCB0ZW1wbFVybCA9IEZpbGVMb2NhdG9yLnJlc29sdmUodXJsKTsKLQkJCi0JCS8vSGF2ZSB0aGlzIGNoZWNrIHNvIHRoYXQgdGhlIGNvZGUgd291bGQgd29yayBpbiBib3RoIFBERSBhbmQgSkFSZWQgcGx1Zy1pbiBhdCBydW50aW1lCi0JCUZpbGUgdGVtcGxEaXIgPSBudWxsOwotCQlpZiggVXJsVXRpbC5pc0phclVybCh0ZW1wbFVybCkgKXsKLQkJCXRlbXBsRGlyID0gRmlsZVV0aWwuZXh0cmFjdEZpbGVzRnJvbUJ1bmRsZSggdGVtcGxVcmwsIGJ1bmRsZSwgdGVtcGxhdGVzUGF0aCApOwotCQl9ZWxzZXsKLQkJCXRlbXBsRGlyID0gVXJsVXRpbC5nZXRVcmxGaWxlKHRlbXBsVXJsKTsKLQkJfQotCQkKLQotCQlpZiAodGVtcGxEaXI9PW51bGwgfHwgIXRlbXBsRGlyLmV4aXN0cygpKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpwdEdlblBsdWdpbi5QTFVHSU5fSUQsICBKcHRHZW5NZXNzYWdlcy5UZW1wbGF0ZXNfbm90Rm91bmQgKyAiICIrICBKcHRHZW5QbHVnaW4uUExVR0lOX0lEICkgKTsvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIHRlbXBsRGlyOwotCX0KLQkKLQkvKioKLQkgKiBTYXZlcy9DcmVhdGVzIHRoZSAuamF2YSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gYSBkYXRhYmFzZSB0YWJsZSAKLQkgKiB3aXRoIHRoZSBnaXZlbiBjb250ZW50LgotCSAqIAotCSAqIEBwYXJhbSB0ZW1wbERpciBUaGUgdmVsb2NpdHkgdGVtcGxhdGUgZmlsZSBkaXJlY3RvcnkuIEl0IGlzIGFzc3VtZWQgCi0JICogdGhhdCB0aGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgMiBmaWxlcyA8ZW0+bWFpbi5qYXZhLnZtPC9lbT4gCi0JICogYW5kIDxlbT5way5qYXZhLnZtPC9lbT4gCi0JICogQHBhcmFtIHByb2dyZXNzIAotCSAqLwotCXByb3RlY3RlZCB2b2lkIGdlbmVyYXRlQ2xhc3MoT1JNR2VuVGFibGUgdGFibGUsIFN0cmluZyB0ZW1wbGF0ZURpclBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nIHN1YlRhc2tOYW1lID0gTkxTLmJpbmQoSnB0R2VuTWVzc2FnZXMuRW50aXR5R2VuZXJhdG9yX3Rhc2tOYW1lLCB0YWJsZS5nZXROYW1lKCkpOwotCQlTdWJNb25pdG9yIHNtID0gU3ViTW9uaXRvci5jb252ZXJ0KG1vbml0b3IsIHN1YlRhc2tOYW1lLCAxMDApOwotCi0JCXRyeXsKLQkJCUlGb2xkZXIgamF2YVBhY2thZ2VGb2xkZXIgPSBnZXRKYXZhUGFja2FnZUZvbGRlcih0YWJsZSwgbW9uaXRvcik7Ci0JCQlJRmlsZSBqYXZhRmlsZSA9IGphdmFQYWNrYWdlRm9sZGVyLmdldEZpbGUoIHRhYmxlLmdldENsYXNzTmFtZSgpICsgIi5qYXZhIik7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJaWYoIGphdmFGaWxlLmV4aXN0cygpICl7Ci0JCQkJaWYoIG92ZXJ3cml0ZUNvbmZpcm1lciE9bnVsbCAmJiAhb3ZlcndyaXRlQ29uZmlybWVyLm92ZXJ3cml0ZShqYXZhRmlsZS5nZXROYW1lKCkpICkKLQkJCQkJcmV0dXJuOwotCQkJfQotCQkJLy9KZGtMb2dDaHV0ZSBpbiB0aGlzIHZlcnNpb24gb2YgVmVsb2NpdHkgbm90IGFsbG93IHRvIHNldCBsb2cgbGV2ZWwKLQkJCS8vV29ya2Fyb3VuZCBieSBwcmVzZXQgdGhlIGxvZyBsZXZlbCBiZWZvcmUgVmVsb2NpdHkgaXMgaW5pdGlhbGl6ZWQKLQkJCUxvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCBMT0dHRVJfTkFNRSApOwotCQkJbG9nZ2VyLnNldExldmVsKCBMZXZlbC5TRVZFUkUgKTsKLQkJCQotCQkJUHJvcGVydGllcyB2ZXAgPSBuZXcgUHJvcGVydGllcygpOwotCQkJdmVwLnNldFByb3BlcnR5KCJmaWxlLnJlc291cmNlLmxvYWRlci5wYXRoIiwgdGVtcGxhdGVEaXJQYXRoKTsgLy8kTk9OLU5MUy0xJAotCQkJdmVwLnNldFByb3BlcnR5KCBKZGtMb2dDaHV0ZS5SVU5USU1FX0xPR19KREtfTE9HR0VSLCBMT0dHRVJfTkFNRSApOwotCQkJVmVsb2NpdHlFbmdpbmUgdmUgPSBuZXcgVmVsb2NpdHlFbmdpbmUoKTsKLQkJICAgIHZlLmluaXQodmVwKTsKLQkJICAgIHNtLndvcmtlZCgyMCk7Ci0JCSAgICAKLQkJICAgIGdlbmVyYXRlSmF2YUZpbGUodGFibGUsIGphdmFGaWxlLCB2ZSwgIm1haW4uamF2YS52bSIsIHRydWUvKmlzRG9tYWluQ2xhc3MqLywgbW9uaXRvcik7IC8vJE5PTi1OTFMtMSQKLQkJICAgIHNtLndvcmtlZCg4MCk7Ci0JCSAgICAKLQkJICAgIGlmICh0YWJsZS5pc0NvbXBvc2l0ZUtleSgpKSB7Ci0JCSAgICAJSUZpbGUgY29tcG9zaXRlS2V5RmlsZSA9IGphdmFQYWNrYWdlRm9sZGVyLmdldEZpbGUoIHRhYmxlLmdldENvbXBvc2l0ZUtleUNsYXNzTmFtZSgpKyIuamF2YSIpOyAvLyROT04tTkxTLTEkCi0JCSAgICAJZ2VuZXJhdGVKYXZhRmlsZSh0YWJsZSwgY29tcG9zaXRlS2V5RmlsZSwgdmUsICJway5qYXZhLnZtIiwgZmFsc2UvKmlzRG9tYWluQ2xhc3MqLywgbW9uaXRvciApOyAvLyROT04tTkxTLTEkCi0JCSAgICB9Ci0JCSAgICAKLQkJCWphdmFGaWxlLnJlZnJlc2hMb2NhbCgxLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQotCQl9IGNhdGNoKFRocm93YWJsZSBlKXsKLQkJCUNvcmVFeGNlcHRpb24gY2UgPSBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpwdEdlblBsdWdpbi5QTFVHSU5fSUQsIEpwdEdlbk1lc3NhZ2VzLlRlbXBsYXRlc19ub3RGb3VuZCArICIiICsgSnB0R2VuUGx1Z2luLlBMVUdJTl9JRCAsIGUpICk7Ly8kTk9OLU5MUy0xJAotCQkJSnB0R2VuUGx1Z2luLmxvZ0V4Y2VwdGlvbiggY2UgKTsKLQkJfQotCQlzbS5zZXRXb3JrUmVtYWluaW5nKDApOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZ2VuZXJhdGVKYXZhRmlsZShPUk1HZW5UYWJsZSB0YWJsZSwgSUZpbGUgamF2YUZpbGUsIFZlbG9jaXR5RW5naW5lIHZlCi0JCQksIFN0cmluZyB0ZW1wbGF0ZU5hbWUsIGJvb2xlYW4gaXNEb21haW5DbGFzcywgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVmVsb2NpdHlDb250ZXh0IGNvbnRleHQgPSBuZXcgVmVsb2NpdHlDb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQucHV0KCJ0YWJsZSIsIHRhYmxlKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBjb250ZXh0LnB1dCgiY3VzdG9taXplciIsIGdldEN1c3RvbWl6ZXIoKSk7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgCi0JCVN0cmluZ1dyaXRlciB3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCQl2ZS5tZXJnZVRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgY29udGV4dCwgdyk7Ci0JCQotCQlTdHJpbmcgZmlsZUNvbnRlbnQgPSB3LnRvU3RyaW5nKCk7Ci0JCWlmIChqYXZhRmlsZS5leGlzdHMoKSkgewotCQkJaWYgKGlzRG9tYWluQ2xhc3MpIHsKLQkJCQl1cGRhdGVFeGlzdGluZ0RvbWFpbkNsYXNzKHRhYmxlLmdldFF1YWxpZmllZENsYXNzTmFtZSgpLCBqYXZhRmlsZSwgZmlsZUNvbnRlbnQpOwotCQkJfSBlbHNlIHsKLQkJCQlqYXZhRmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZmlsZUNvbnRlbnQuZ2V0Qnl0ZXMoKSksIHRydWUsIHRydWUsIG1vbml0b3IgKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWNyZWF0ZUZpbGUoamF2YUZpbGUsIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShmaWxlQ29udGVudC5nZXRCeXRlcygpKSk7Ci0JCX0JCQotCX0KLQkKLQkKLQkvKioKLQkgKiBVcGRhdGVzIHRoZSAoZXhpc3RpbmcpIEphdmEgZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiAKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBxdWFsaWZpZWQgY2xhc3MgbmFtZS4KLQkgKiAKLQkgKiBAcGFyYW0gamF2YUZpbGUgVGhlIGV4aXN0aW5nIEphdmEgZmlsZSBvZiB0aGUgY2xhc3MgdG8gdXBkYXRlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlQ29udGVudCBUaGUgbmV3IGZpbGUgY29udGVudC4KLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVFeGlzdGluZ0RvbWFpbkNsYXNzKFN0cmluZyBjbGFzc05hbWUsIElGaWxlIGphdmFGaWxlLCBTdHJpbmcgZmlsZUNvbnRlbnQpIHRocm93cyBFeGNlcHRpb24gewotCQkvKnVzZSBDb21waWxhdGlvblVuaXRNb2RpZmllciBpbnN0ZWFkIG9mIGNhbGxpbmcgV2lkZUVudi5nZXRFbnYoKS5zZXRGaWxlQ29udGVudCAKLQkJICogc28gdGhhdCBpZiB0aGUgdW5pdCBpcyB1cCB0byBkYXRlIGlmIGl0IGlzIHVzZWQgYmVmb3JlIGZpbGUgY2hhbmdlIAotCQkgKiBub3RpZmljYXRpb25zIGFyZSBkZWxpdmVyZWQgKHNlZSBFSkIzSW1wb3J0U2NoZW1hV2l6YXJkLnVwZGF0ZUV4aXN0aW5nRG9tYWluQ2xhc3MgZm9yIGV4YW1wbGUpKi8KLQkJSUphdmFQcm9qZWN0IHByb2plY3QgPSBqYXZhUHJvamVjdC5nZXRKYXZhUHJvamVjdCgpOwotCQlDb21waWxhdGlvblVuaXRNb2RpZmllciBtb2RpZmllciA9IG5ldyBDb21waWxhdGlvblVuaXRNb2RpZmllcihwcm9qZWN0LCBjbGFzc05hbWUpOwotCQltb2RpZmllci5zZXRKYXZhU291cmNlKGZpbGVDb250ZW50KTsKLQkJbW9kaWZpZXIuc2F2ZSgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBjcmVhdGVGaWxlKElGaWxlIGZpbGUsIGphdmEuaW8uSW5wdXRTdHJlYW0gY29udGVudHMpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsJCQotCQlmaWxlLmNyZWF0ZShjb250ZW50cywgZmFsc2UsIG51bGwvKm1vbml0b3IqLyk7Ci0JfQotCQotCXB1YmxpYyBJRm9sZGVyIGdldEphdmFQYWNrYWdlRm9sZGVyKE9STUdlblRhYmxlIHRhYmxlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGdldERlZmF1bHRKYXZhU3JvdWNlTG9jYXRpb24gKCBqYXZhUHJvamVjdCAsIHRhYmxlLmdldFNvdXJjZUZvbGRlcigpKSA7Ci0JCVN0cmluZyBwYWNrYWdlTmFtZSA9IHRhYmxlLmdldFBhY2thZ2UoKTsKLQkJaWYoIHBhY2thZ2VOYW1lPT1udWxsICkgcGFja2FnZU5hbWUgPSIiOwotCQlJUGFja2FnZUZyYWdtZW50IHBhY2thZ2VGcmFnbWVudCA9IHJvb3QuZ2V0UGFja2FnZUZyYWdtZW50KHBhY2thZ2VOYW1lKTsKLQkJaWYoICFwYWNrYWdlRnJhZ21lbnQuZXhpc3RzKCkpewotCQkJcm9vdC5jcmVhdGVQYWNrYWdlRnJhZ21lbnQocGFja2FnZU5hbWUsIHRydWUsIG1vbml0b3IpOwotCQl9CQkKLQkJcmV0dXJuIChJRm9sZGVyKXBhY2thZ2VGcmFnbWVudC5nZXRSZXNvdXJjZSgpOwotCX0KLQkKLQlwcml2YXRlIElQYWNrYWdlRnJhZ21lbnRSb290IGdldERlZmF1bHRKYXZhU3JvdWNlTG9jYXRpb24oSUphdmFQcm9qZWN0IGpwcm9qZWN0LCBTdHJpbmcgc291cmNlRm9sZGVyKXsKLQkJSVBhY2thZ2VGcmFnbWVudFJvb3QgZGVmYXVsdFNyY1BhdGggPSBudWxsOwotCQlpZiAoanByb2plY3QgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlpZiAoanByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQkJSVBhY2thZ2VGcmFnbWVudFJvb3RbXSByb290cyA9IGpwcm9qZWN0LmdldFBhY2thZ2VGcmFnbWVudFJvb3RzKCk7Ci0JCQkJCWZvciAoaW50IGk9IDA7IGkgPCByb290cy5sZW5ndGg7IGkrKykgewotCQkJCQkJaWYgKHJvb3RzW2ldLmdldEtpbmQoKSA9PSBJUGFja2FnZUZyYWdtZW50Um9vdC5LX1NPVVJDRSApewotCQkJCQkJCWlmKCBpID09IDAgKSAKLQkJCQkJCQkJZGVmYXVsdFNyY1BhdGggPSByb290c1tpXTsKLQkJCQkJCQlTdHJpbmcgcGF0aCA9IHJvb3RzW2ldLmdldFBhdGgoKS50b1N0cmluZygpOyAKLQkJCQkJCQlpZiggcGF0aC5lcXVhbHMoICIvIitzb3VyY2VGb2xkZXIgKSkgewotCQkJCQkJCQlyZXR1cm4gcm9vdHNbaV0gOyAKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0JCQkJCQkJCi0JCQkJfQotCQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCQlKcHRHZW5QbHVnaW4ubG9nRXhjZXB0aW9uKGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBkZWZhdWx0U3JjUGF0aDsKLQl9Ci0KLQkKLQkvLyAqKioqKioqKioqIGFubm90YXRpb24gbmFtZSBidWlsZGVyICoqKioqKioqKioKLQotCQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9UYWdOYW1lcy5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9UYWdOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTg3ZTVjLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvVGFnTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbDsKLQotLyoqCi0gKiBUT0RPOiBtZXJnZSB3aXRoIEpQQSBjbGFzcyA/Ci0gKiBUaGUgSlBBIG1hcHBpbmcgdGFnIGFuZCBhdHRyaWJ1dGUgbmFtZXMuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRhZ05hbWVzCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFTSUNfVEFHID0gImJhc2ljIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDQVNDQURFX1RBRyA9ICJjYXNjYWRlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xVTU5fVEFHID0gImNvbHVtbiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU1CRURERURfVEFHID0gImVtYmVkZGVkIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTUJFRERFRF9JRF9UQUcgPSAiZW1iZWRkZWQtaWQiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFTkVSQVRFRF9WQUxVRV9UQUcgPSAiZ2VuZXJhdGVkLXZhbHVlIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9UQUcgPSAiaWQiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0NMQVNTX1RBRyA9ICJpZCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSk9JTl9DT0xVTU5fVEFHID0gImpvaW4tY29sdW1uIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZFUlNFX0pPSU5fQ09MVU1OX1RBRyA9ICJpbnZlcnNlLWpvaW4tY29sdW1uIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0JfVEFHID0gImxvYiI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFOWV9UT19NQU5ZX1RBRyA9ICJtYW55LXRvLW1hbnkiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BTllfVE9fT05FX1RBRyA9ICJtYW55LXRvLW9uZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFQUEVEX0JZX1RBRyA9ICJtYXBwZWQtYnkiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9ORV9UT19NQU5ZX1RBRyA9ICJvbmUtdG8tbWFueSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT05FX1RPX09ORV9UQUcgPSAib25lLXRvLW9uZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEtfSk9JTl9DT0xVTU5fVEFHID0gInByaW1hcnkta2V5LWpvaW4tY29sdW1uIjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9UQUcgPSAidGFibGUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlNJT05fVEFHID0gInZlcnNpb24iOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpPSU5fVEFCTEVfVEFHID0gImpvaW4tdGFibGUiOwotCi0JLypjYXNjYWRlIHRhZ3MqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFMTF9DQVNDQURFID0gImFsbCI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEVSU0lTVF9DQVNDQURFID0gInBlcnNpc3QiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FUkdFX0NBU0NBREUgPSAibWVyZ2UiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9WRV9DQVNDQURFID0gInJlbW92ZSI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGUkVTSF9DQVNDQURFID0gInJlZnJlc2giOwotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvRW50aXR5R2VuVG9vbHMuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL0VudGl0eUdlblRvb2xzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZTEwYWMuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvRW50aXR5R2VuVG9vbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC5vbGQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5OYW1lVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci0KLS8qKgotICogVXRpbGl0eSBtZXRob2RzIGZvciBlbnRpdHkgZ2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEVudGl0eUdlblRvb2xzIHsKLQotCS8qKgotCSAqIENvbnZlcnQgdGhlIHNwZWNpZmllZCAoZGF0YWJhc2UpIGlkZW50aWZpZXIgdG8gYSB1bmlxdWUgIkphdmEgc3R5bGUiCi0JICogY2xhc3MgbmFtZS4KLQkgKiBAc2VlICNjb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVJZGVudGlmaWVyKFN0cmluZywgYm9vbGVhbiwgQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoU3RyaW5nIGlkZW50aWZpZXIsIENvbGxlY3Rpb248U3RyaW5nPiBjbGFzc05hbWVzKSB7Ci0JCXJldHVybiBjb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVJZGVudGlmaWVyKGlkZW50aWZpZXIsIHRydWUsIGNsYXNzTmFtZXMpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgdGhlIHNwZWNpZmllZCAoZGF0YWJhc2UpIGlkZW50aWZpZXIgdG8gYSB1bmlxdWUgIkphdmEgc3R5bGUiCi0JICogYXR0cmlidXRlIChmaWVsZC9wcm9wZXJ0eSkgbmFtZS4KLQkgKiBAc2VlICNjb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVJZGVudGlmaWVyKFN0cmluZywgYm9vbGVhbiwgQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKFN0cmluZyBpZGVudGlmaWVyLCBDb2xsZWN0aW9uPFN0cmluZz4gYXR0cmlidXRlTmFtZXMpIHsKLQkJcmV0dXJuIGNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUlkZW50aWZpZXIoaWRlbnRpZmllciwgZmFsc2UsIGF0dHJpYnV0ZU5hbWVzKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgKGRhdGFiYXNlKSBpZGVudGlmaWVyIHRvIGEgdW5pcXVlICJKYXZhIHN0eWxlIgotCSAqIGlkZW50aWZpZXI6Ci0JICogICAgIC0gaWYgdGhlIGlkZW50aWZpZXIgaXMgYWxsLWNhcHMsIGNvbnZlcnQgdW5kZXJzY29yZXMgdG8gImNhbWVsIGNhc2UiCi0JICogICAgIC0gaWYgdGhlIGlkZW50aWZpZXIgaXMgbm90IGFsbC1jYXBzLCBsZWF2ZSBpdCB1bmNoYW5nZWQgKGV4Y2VwdCwgcG9zc2libHksIGZvciB0aGUgZmlyc3QgbGV0dGVyKQotCSAqICAgICAtIGNvbnZlcnQgdG8gYSBsZWdhbCBKYXZhIGlkZW50aWZpZXIKLQkgKiAgICAgICAgIC0gZWxpbWluYXRlIGlsbGVnYWwgY2hhcmFjdGVycwotCSAqICAgICAgICAgLSBpZiB0aGUgcmVzdWx0IGlzIGEgcmVzZXJ2ZWQgd29yZCwgbW9kaWZ5IGl0IHNsaWdodGx5Ci0JICogSWYgdGhlIHJlc3VsdCBpcyBhbHJlYWR5IG9uZSBvZiB0aGUgc3BlY2lmaWVkIGV4aXN0aW5nIGlkZW50aWZpZXJzCi0JICogKGlnbm9yaW5nIGNhc2Ugc28gd2UgZG9uJ3QgaGF2ZSBmaWxlbmFtZSBjb2xsaXNpb25zIG9uIFdpbmRvd3MpLAotCSAqIG1vZGlmeSBpdCBzbGlnaHRseSBhZ2Fpbi4KLQkgKiAgICAgIkZPTyIgPT4gIkZvbyIgb3IgImZvbyIKLQkgKiAgICAgIkZPT19CQVIiID0+ICJGb29CYXIiIG9yICJmb29CYXIiCi0JICogICAgICJQQUNLQUdFIiA9PiAiUGFja2FnZSIgb3IgInBhY2thZ2VfIgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUlkZW50aWZpZXIoU3RyaW5nIGlkZW50aWZpZXIsIGJvb2xlYW4gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyLCBDb2xsZWN0aW9uPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGlkZW50aWZpZXI7Ci0JCWlmIChTdHJpbmdUb29scy5zdHJpbmdJc1VwcGVyY2FzZShyZXN1bHQpIHx8IFN0cmluZ1Rvb2xzLnN0cmluZ0lzTG93ZXJjYXNlKHJlc3VsdCkpIHsKLQkJCS8vIGxlYXZlIG1peGVkIGNhc2UgaWRlbnRpZmllcnMgYWxvbmU/Ci0JCQlyZXN1bHQgPSBTdHJpbmdUb29scy5jb252ZXJ0VW5kZXJzY29yZXNUb0NhbWVsQ2FzZShyZXN1bHQsIGNhcGl0YWxpemVGaXJzdExldHRlcik7Ci0JCX0gZWxzZSB7Ci0JCQlyZXN1bHQgPSBjYXBpdGFsaXplRmlyc3RMZXR0ZXIgPyBTdHJpbmdUb29scy5jYXBpdGFsaXplKHJlc3VsdCkgOiBTdHJpbmdUb29scy51bmNhcGl0YWxpemUocmVzdWx0KTsKLQkJfQotCQlyZXN1bHQgPSBOYW1lVG9vbHMuY29udmVydFRvSmF2YUlkZW50aWZpZXIocmVzdWx0KTsKLQkJLy8gYXNzdW1lIHRoYXQgY29udmVydGluZyB0byBhIHVuaXF1ZSBuYW1lIHdpbGwgbm90IHJlc3VsdCBpbiBhIEphdmEgcmVzZXJ2ZWQgd29yZAotCQkvLyAoc2luY2Ugbm8gSmF2YSByZXNlcnZlZCB3b3JkcyBlbmQgd2l0aCBhIG51bWJlcikKLQkJcmVzdWx0ID0gTmFtZVRvb2xzLnVuaXF1ZU5hbWVGb3JJZ25vcmVDYXNlKHJlc3VsdCwgaWRlbnRpZmllcnMpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb25zdHJ1Y3RvciAqKioqKioqKioqCi0KLQkvKioKLQkgKiBTdXBwcmVzcyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBlbnN1cmluZyBub24taW5zdGFudGlhYmlsaXR5LgotCSAqLwotCXByaXZhdGUgRW50aXR5R2VuVG9vbHMoKSB7Ci0JCXN1cGVyKCk7Ci0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvRW50aXR5R2VuZXJhdG9yLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9FbnRpdHlHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjMjQyYS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9FbnRpdHlHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZDsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5Db2xsYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdWJNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhTW9kZWxTdGF0dXNDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuSmF2YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQm9vbGVhbkhvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5JbmRlbnRpbmdQcmludFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5OYW1lVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkZpbHRlcmluZ0l0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8vIFRPRE8gZm9ybWF0IGdlbmVyYXRlZCBjb2RlIHBlciBwcmVmZXJlbmNlcwotLy8gVE9ETyBvcmdhbml6ZSBnZW5lcmF0ZWQgaW1wb3J0cyBwZXIgcHJlZmVyZW5jZXMKLS8qKgotICogVGhpcyBnZW5lcmF0b3Igd2lsbCBnZW5lcmF0ZSBhbiBlbnRpdHkgZm9yIGEgdGFibGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBFbnRpdHlHZW5lcmF0b3IgewotCWZpbmFsIENvbmZpZyBjb25maWc7Ci0JcHJpdmF0ZSBmaW5hbCBJUGFja2FnZUZyYWdtZW50IHBhY2thZ2VGcmFnbWVudDsKLQlwcml2YXRlIGZpbmFsIEdlblRhYmxlIGdlblRhYmxlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGVudGl0eUNsYXNzTmFtZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBwa0NsYXNzTmFtZTsKLQotCi0JLy8gKioqKioqKioqKiBwdWJsaWMgQVBJICoqKioqKioqKioKLQotCXN0YXRpYyB2b2lkIGdlbmVyYXRlRW50aXR5KAotCQkJQ29uZmlnIGNvbmZpZywKLQkJCUlQYWNrYWdlRnJhZ21lbnQgcGFja2FnZUZyYWdtZW50LAotCQkJR2VuVGFibGUgZ2VuVGFibGUsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcgotCSkgewotCQlpZiAoKGNvbmZpZyA9PSBudWxsKSB8fCAocGFja2FnZUZyYWdtZW50ID09IG51bGwpIHx8IChnZW5UYWJsZSA9PSBudWxsKSkgewotCQkJdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7Ci0JCX0KLQkJbmV3IEVudGl0eUdlbmVyYXRvcihjb25maWcsIHBhY2thZ2VGcmFnbWVudCwgZ2VuVGFibGUpLmdlbmVyYXRlRW50aXR5KHByb2dyZXNzTW9uaXRvcik7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGNvbnN0cnVjdG9yL2luaXRpYWxpemF0aW9uICoqKioqKioqKioKLQotCXByaXZhdGUgRW50aXR5R2VuZXJhdG9yKENvbmZpZyBjb25maWcsIElQYWNrYWdlRnJhZ21lbnQgcGFja2FnZUZyYWdtZW50LCBHZW5UYWJsZSBnZW5UYWJsZSkgewotCQlzdXBlcigpOwotCQl0aGlzLmNvbmZpZyA9IGNvbmZpZzsKLQkJdGhpcy5wYWNrYWdlRnJhZ21lbnQgPSBwYWNrYWdlRnJhZ21lbnQ7Ci0JCXRoaXMuZ2VuVGFibGUgPSBnZW5UYWJsZTsKLQkJdGhpcy5lbnRpdHlDbGFzc05hbWUgPSB0aGlzLmZ1bGx5UXVhbGlmeSh0aGlzLmdldEVudGl0eU5hbWUoKSk7Ci0JCXRoaXMucGtDbGFzc05hbWUgPSB0aGlzLmVudGl0eUNsYXNzTmFtZSArICcuJyArIGNvbmZpZy5nZXRQcmltYXJ5S2V5TWVtYmVyQ2xhc3NOYW1lKCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGNvZGUgZ2VuICoqKioqKioqKioKLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUVudGl0eShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQl0cnkgewotCQkJdGhpcy5nZW5lcmF0ZUVudGl0eV8ocHJvZ3Jlc3NNb25pdG9yKTsKLQkJfSBjYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGV4KSB7Ci0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZ2VuZXJhdGVFbnRpdHlfKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJU3ViTW9uaXRvciBzbSA9IFN1Yk1vbml0b3IuY29udmVydChwcm9ncmVzc01vbml0b3IsIHRoaXMuYnVpbGRUYXNrTmFtZSgpLCAxMDApOwotCQlTdHJpbmcgZmlsZU5hbWUgPSB0aGlzLmdldEVudGl0eU5hbWUoKSArICIuamF2YSI7ICAvLyROT04tTkxTLTEkCi0JCVN0cmluZyBzb3VyY2UgPSB0aGlzLmJ1aWxkU291cmNlKCk7Ci0JCXNtLndvcmtlZCgyMCk7Ci0JCXRyeSB7Ci0JCQl0aGlzLnBhY2thZ2VGcmFnbWVudC5jcmVhdGVDb21waWxhdGlvblVuaXQoZmlsZU5hbWUsIHNvdXJjZSwgZmFsc2UsIHNtLm5ld0NoaWxkKDQwKSk7Ci0JCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBleCkgewotCQkJaWYgKGV4LmdldEphdmFNb2RlbFN0YXR1cygpLmdldENvZGUoKSA9PSBJSmF2YU1vZGVsU3RhdHVzQ29uc3RhbnRzLk5BTUVfQ09MTElTSU9OKSB7Ci0JCQkJaWYgKHRoaXMuY29uZmlnLmdldE92ZXJ3cml0ZUNvbmZpcm1lcigpLm92ZXJ3cml0ZSh0aGlzLmVudGl0eUNsYXNzTmFtZSkpIHsKLQkJCQkJdGhpcy5wYWNrYWdlRnJhZ21lbnQuY3JlYXRlQ29tcGlsYXRpb25Vbml0KGZpbGVOYW1lLCBzb3VyY2UsIHRydWUsIHNtLm5ld0NoaWxkKDQwKSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0aHJvdyBleDsKLQkJCX0KLQkJfQotCQlzbS5zZXRXb3JrUmVtYWluaW5nKDApOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkVGFza05hbWUoKSB7Ci0JCXJldHVybiBOTFMuYmluZChKcHRHZW5NZXNzYWdlcy5FbnRpdHlHZW5lcmF0b3JfdGFza05hbWUsIHRoaXMuZ2V0RW50aXR5TmFtZSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBidWlsZCB0aGUgImJvZHkiIHNvdXJjZSBmaXJzdDsgdGhlbiBidWlsZCB0aGUgInBhY2thZ2UiIGFuZCAiaW1wb3J0cyIgc291cmNlCi0JICogYW5kIGNvbmNhdGVuYXRlIHRoZSAiYm9keSIgc291cmNlIHRvIGl0Ci0JICovCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRTb3VyY2UoKSB7Ci0JCS8vIGJ1aWxkIHRoZSBib2R5IHNvdXJjZSBmaXJzdCBzbyB3ZSBjYW4gZ2F0aGVyIHVwIHRoZSBpbXBvcnQgc3RhdGVtZW50cwotCQlCb2R5U291cmNlIGJvZHlTb3VyY2UgPSB0aGlzLmJ1aWxkQm9keVNvdXJjZSgpOwotCi0JCVN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoYm9keVNvdXJjZS5sZW5ndGgoKSArIDIwMDApOwotCQlQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0JCXRoaXMucHJpbnRQYWNrYWdlQW5kSW1wb3J0c09uKHB3LCBib2R5U291cmNlKTsKLQkJcHcucHJpbnQoYm9keVNvdXJjZS5nZXRTb3VyY2UoKSk7Ci0JCXJldHVybiBzdy50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgQm9keVNvdXJjZSBidWlsZEJvZHlTb3VyY2UoKSB7Ci0JCUVudGl0eVNvdXJjZVdyaXRlciBwdyA9IG5ldyBFbnRpdHlTb3VyY2VXcml0ZXIodGhpcy5nZXRQYWNrYWdlTmFtZSgpLCB0aGlzLmVudGl0eUNsYXNzTmFtZSk7Ci0JCXRoaXMucHJpbnRCb2R5U291cmNlT24ocHcpOwotCQlyZXR1cm4gcHc7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Qm9keVNvdXJjZU9uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQl0aGlzLnByaW50Q2xhc3NEZWNsYXJhdGlvbk9uKHB3KTsKLQotCQlwdy5pbmRlbnQoKTsKLQkJCXRoaXMucHJpbnRFbnRpdHlQcmltYXJ5S2V5RmllbGRzT24ocHcpOwotCQkJdGhpcy5wcmludEVudGl0eU5vblByaW1hcnlLZXlCYXNpY0ZpZWxkc09uKHB3KTsKLQkJCXRoaXMucHJpbnRFbnRpdHlNYW55VG9PbmVGaWVsZHNPbihwdyk7Ci0JCQl0aGlzLnByaW50RW50aXR5T25lVG9NYW55RmllbGRzT24ocHcpOwotCQkJdGhpcy5wcmludEVudGl0eU93bmVkTWFueVRvTWFueUZpZWxkc09uKHB3KTsKLQkJCXRoaXMucHJpbnRFbnRpdHlOb25Pd25lZE1hbnlUb01hbnlGaWVsZHNPbihwdyk7Ci0JCQl0aGlzLnByaW50U2VyaWFsVmVyc2lvblVJREZpZWxkT24ocHcpOwotCQkJcHcucHJpbnRsbigpOwotCi0JCQl0aGlzLnByaW50WmVyb0FyZ3VtZW50Q29uc3RydWN0b3JPbih0aGlzLmdldEVudGl0eU5hbWUoKSwgdGhpcy5jb25maWcuZ2V0TWV0aG9kVmlzaWJpbGl0eUNsYXVzZSgpLCBwdyk7Ci0JCQlpZiAodGhpcy5jb25maWcucHJvcGVydHlBY2Nlc3NUeXBlKCkgfHwgdGhpcy5jb25maWcuZ2VuZXJhdGVHZXR0ZXJzQW5kU2V0dGVycygpKSB7Ci0JCQkJdGhpcy5wcmludEVudGl0eVByaW1hcnlLZXlQcm9wZXJ0aWVzT24ocHcpOwotCQkJCXRoaXMucHJpbnRFbnRpdHlOb25QcmltYXJ5S2V5QmFzaWNQcm9wZXJ0aWVzT24ocHcpOwotCQkJCXRoaXMucHJpbnRFbnRpdHlNYW55VG9PbmVQcm9wZXJ0aWVzT24ocHcpOwotCQkJCXRoaXMucHJpbnRFbnRpdHlPbmVUb01hbnlQcm9wZXJ0aWVzT24ocHcpOwotCQkJCXRoaXMucHJpbnRFbnRpdHlPd25lZE1hbnlUb01hbnlQcm9wZXJ0aWVzT24ocHcpOwotCQkJCXRoaXMucHJpbnRFbnRpdHlOb25Pd25lZE1hbnlUb01hbnlQcm9wZXJ0aWVzT24ocHcpOwotCQkJfQotCi0JCQlpZiAodGhpcy5wcmltYXJ5S2V5Q2xhc3NJc1JlcXVpcmVkKCkpIHsKLQkJCQl0aGlzLnByaW50UHJpbWFyeUtleUNsYXNzT24ocHcpOwotCQkJfQotCQlwdy51bmRlbnQoKTsKLQotCQlwdy5wcmludCgnfScpOwotCQlwdy5wcmludGxuKCk7ICAvLyBFT0YKLQl9Ci0KLQotCS8vICoqKioqKioqKiogY2xhc3MgZGVjbGFyYXRpb24gKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50Q2xhc3NEZWNsYXJhdGlvbk9uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQl0aGlzLnByaW50RW50aXR5QW5ub3RhdGlvbk9uKHB3KTsKLQkJdGhpcy5wcmludFRhYmxlQW5ub3RhdGlvbk9uKHB3KTsKLQkJdGhpcy5wcmludElkQ2xhc3NBbm5vdGF0aW9uT24ocHcpOwotCi0JCXB3LnByaW50KCJwdWJsaWMgY2xhc3MgIik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50VHlwZURlY2xhcmF0aW9uKHRoaXMuZW50aXR5Q2xhc3NOYW1lKTsKLQkJaWYgKGNvbmZpZy5zZXJpYWxpemFibGUoKSkgewotCQkJcHcucHJpbnQoIiBpbXBsZW1lbnRzICIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRUeXBlRGVjbGFyYXRpb24oU2VyaWFsaXphYmxlLmNsYXNzLmdldE5hbWUoKSk7Ci0JCX0KLQkJcHcucHJpbnQoIiB7Iik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50bG4oKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlBbm5vdGF0aW9uT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50QW5ub3RhdGlvbihKUEEuRU5USVRZKTsKLQkJcHcucHJpbnRsbigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludFRhYmxlQW5ub3RhdGlvbk9uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgdGFibGVOYW1lID0gdGhpcy5jb25maWcuZ2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoKS5idWlsZFRhYmxlQW5ub3RhdGlvbk5hbWUodGhpcy5nZXRFbnRpdHlOYW1lKCksIHRoaXMuZ2V0VGFibGUoKSk7Ci0JCWlmICh0YWJsZU5hbWUgPT0gbnVsbCkgewotCQkJcmV0dXJuOyAgLy8gdGhlIGRlZmF1bHQgdGFibGUgbmFtZSBpcyBPSwotCQl9Ci0JCXB3LnByaW50QW5ub3RhdGlvbihKUEEuVEFCTEUpOwotCQlwdy5wcmludCgiKG5hbWU9Iik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50U3RyaW5nTGl0ZXJhbCh0YWJsZU5hbWUpOwotCQlwdy5wcmludCgnKScpOwotCQlwdy5wcmludGxuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50SWRDbGFzc0Fubm90YXRpb25PbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJaWYgKHRoaXMucHJpbWFyeUtleUNsYXNzSXNSZXF1aXJlZCgpICYmIHRoaXMuY29uZmlnLmdlbmVyYXRlSWRDbGFzc0ZvckNvbXBvdW5kUEsoKSkgewotCQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5JRF9DTEFTUyk7Ci0JCQlwdy5wcmludCgnKCcpOwotCQkJcHcucHJpbnRUeXBlRGVjbGFyYXRpb24odGhpcy5wa0NsYXNzTmFtZSk7Ci0JCQlwdy5wcmludCgiLmNsYXNzKSIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRsbigpOwotCQl9Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIHByaW1hcnkga2V5IGZpZWxkcyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlQcmltYXJ5S2V5RmllbGRzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWlmICh0aGlzLnByaW1hcnlLZXlDbGFzc0lzUmVxdWlyZWQoKSAmJiB0aGlzLmNvbmZpZy5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLKCkpIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlFbWJlZGRlZElkUHJpbWFyeUtleUZpZWxkT24ocHcpOwotCQl9IGVsc2UgewotCQkJdGhpcy5wcmludEVudGl0eVJlYWRPbmx5UHJpbWFyeUtleUZpZWxkc09uKHB3KTsKLQkJCXRoaXMucHJpbnRFbnRpdHlXcml0YWJsZVByaW1hcnlLZXlGaWVsZHNPbihwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlFbWJlZGRlZElkUHJpbWFyeUtleUZpZWxkT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWlmICh0aGlzLmNvbmZpZy5maWVsZEFjY2Vzc1R5cGUoKSkgewotCQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5FTUJFRERFRF9JRCk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQkJdGhpcy5wcmludEZpZWxkT24odGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yRW1iZWRkZWRJZCgpLCB0aGlzLnBrQ2xhc3NOYW1lLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5UmVhZE9ubHlQcmltYXJ5S2V5RmllbGRzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXRoaXMucHJpbnRQcmltYXJ5S2V5RmllbGRzT24ocHcsIHRydWUsIHRydWUpOyAgLy8gdHJ1ZT1yZWFkLW9ubHk7IHRydWU9cHJpbnQgSUQgYW5ub3RhdGlvbiBvbiBmaWVsZHMKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlXcml0YWJsZVByaW1hcnlLZXlGaWVsZHNPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJdGhpcy5wcmludFByaW1hcnlLZXlGaWVsZHNPbihwdywgZmFsc2UsIHRydWUpOyAgLy8gZmFsc2U9d3JpdGFibGU7IHRydWU9cHJpbnQgSUQgYW5ub3RhdGlvbiBvbiBmaWVsZHMKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRQcmltYXJ5S2V5RmllbGRzT24oRW50aXR5U291cmNlV3JpdGVyIHB3LCBib29sZWFuIHJlYWRPbmx5LCBib29sZWFuIHByaW50SWRBbm5vdGF0aW9uKSB7Ci0JCWZvciAoSXRlcmF0b3I8Q29sdW1uPiBzdHJlYW0gPSB0aGlzLnByaW1hcnlLZXlDb2x1bW5zKHJlYWRPbmx5KTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50UHJpbWFyeUtleUZpZWxkT24oc3RyZWFtLm5leHQoKSwgcHcsIHJlYWRPbmx5LCBwcmludElkQW5ub3RhdGlvbik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIEl0ZXJhdG9yPENvbHVtbj4gcHJpbWFyeUtleUNvbHVtbnMoYm9vbGVhbiByZWFkT25seSkgewotCQlyZXR1cm4gcmVhZE9ubHkgPyB0aGlzLmdlblRhYmxlLnJlYWRPbmx5UHJpbWFyeUtleUNvbHVtbnMoKSA6IHRoaXMuZ2VuVGFibGUud3JpdGFibGVQcmltYXJ5S2V5Q29sdW1ucygpOwotCX0KLQotCS8vIFRPRE8gaWYgdGhlIGZpZWxkJ3MgdHlwZSBpcyBqYXZhLnV0aWwvc3FsLkRhdGUsIGl0IG5lZWRzIEBUZW1wb3JhbChEQVRFKQotCS8vIFRPRE8gaWYgdGhlIHByaW1hcnkga2V5IGlzIGF1dG8tZ2VuZXJhdGVkLCB0aGUgZmllbGQgbXVzdCBiZSBhbiBpbnRlZ3JhbCB0eXBlCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUZpZWxkT24oQ29sdW1uIGNvbHVtbiwgRW50aXR5U291cmNlV3JpdGVyIHB3LCBib29sZWFuIHJlYWRPbmx5LCBib29sZWFuIHByaW50SWRBbm5vdGF0aW9uKSB7Ci0JCVN0cmluZyBmaWVsZE5hbWUgPSB0aGlzLmdlblRhYmxlLmdldEF0dHJpYnV0ZU5hbWVGb3IoY29sdW1uKTsKLQkJaWYgKHRoaXMuY29uZmlnLmZpZWxkQWNjZXNzVHlwZSgpKSB7Ci0JCQlpZiAocHJpbnRJZEFubm90YXRpb24pIHsKLQkJCQlwdy5wcmludEFubm90YXRpb24oSlBBLklEKTsKLQkJCQlwdy5wcmludGxuKCk7Ci0JCQl9Ci0JCQlTdHJpbmcgY29sdW1uTmFtZSA9IHRoaXMuY29uZmlnLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuYnVpbGRDb2x1bW5Bbm5vdGF0aW9uTmFtZShmaWVsZE5hbWUsIGNvbHVtbik7Ci0JCQlpZiAocmVhZE9ubHkpIHsKLQkJCQl0aGlzLnByaW50UmVhZE9ubHlDb2x1bW5Bbm5vdGF0aW9uT24oY29sdW1uTmFtZSwgcHcpOwotCQkJfSBlbHNlIHsKLQkJCQl0aGlzLnByaW50Q29sdW1uQW5ub3RhdGlvbk9uKGNvbHVtbk5hbWUsIHB3KTsKLQkJCX0KLQkJfQotCQl0aGlzLnByaW50RmllbGRPbihmaWVsZE5hbWUsIGNvbHVtbi5nZXRQcmltYXJ5S2V5SmF2YVR5cGVEZWNsYXJhdGlvbigpLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UmVhZE9ubHlDb2x1bW5Bbm5vdGF0aW9uT24oU3RyaW5nIGNvbHVtbk5hbWUsIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludEFubm90YXRpb24oSlBBLkNPTFVNTik7Ci0JCXB3LnByaW50KCcoJyk7Ci0JCWlmIChjb2x1bW5OYW1lICE9IG51bGwpIHsKLQkJCXB3LnByaW50KCJuYW1lPSIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRTdHJpbmdMaXRlcmFsKGNvbHVtbk5hbWUpOwotCQkJcHcucHJpbnQoIiwgIik7ICAvLyROT04tTkxTLTEkCi0JCX0KLQkJcHcucHJpbnQoImluc2VydGFibGU9ZmFsc2UsIHVwZGF0YWJsZT1mYWxzZSkiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnRsbigpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBiYXNpYyBmaWVsZHMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5Tm9uUHJpbWFyeUtleUJhc2ljRmllbGRzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWZvciAoSXRlcmF0b3I8Q29sdW1uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm5vblByaW1hcnlLZXlCYXNpY0NvbHVtbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50RW50aXR5Tm9uUHJpbWFyeUtleUJhc2ljRmllbGRPbihzdHJlYW0ubmV4dCgpLCBwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlOb25QcmltYXJ5S2V5QmFzaWNGaWVsZE9uKENvbHVtbiBjb2x1bW4sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgZmllbGROYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKGNvbHVtbik7Ci0JCWlmICh0aGlzLmNvbmZpZy5maWVsZEFjY2Vzc1R5cGUoKSkgewotCQkJU3RyaW5nIGNvbHVtbk5hbWUgPSB0aGlzLmNvbmZpZy5nZXREYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcigpLmJ1aWxkQ29sdW1uQW5ub3RhdGlvbk5hbWUoZmllbGROYW1lLCBjb2x1bW4pOwotCQkJdGhpcy5wcmludENvbHVtbkFubm90YXRpb25Pbihjb2x1bW5OYW1lLCBwdyk7Ci0JCX0KLQkJaWYgKGNvbHVtbi5pc0xPQigpKSB7Ci0JCQlwdy5wcmludEFubm90YXRpb24oSlBBLkxPQik7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQkJdGhpcy5wcmludEZpZWxkT24oZmllbGROYW1lLCBjb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Q29sdW1uQW5ub3RhdGlvbk9uKFN0cmluZyBjb2x1bW5OYW1lLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJaWYgKGNvbHVtbk5hbWUgIT0gbnVsbCkgeyAgLy8gdGhlIGNvbHVtbiBuYW1lIGlzIG51bGwgaWYgdGhlIGRlZmF1bHQgaXMgT0sKLQkJCXB3LnByaW50QW5ub3RhdGlvbihKUEEuQ09MVU1OKTsKLQkJCXB3LnByaW50KCIobmFtZT0iKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50U3RyaW5nTGl0ZXJhbChjb2x1bW5OYW1lKTsKLQkJCXB3LnByaW50KCcpJyk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogbWFueS10by1vbmUgZmllbGRzICoqKioqKioqKioKLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU1hbnlUb09uZUZpZWxkc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPE1hbnlUb09uZVJlbGF0aW9uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm1hbnlUb09uZVJlbGF0aW9ucygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlNYW55VG9PbmVGaWVsZE9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU1hbnlUb09uZUZpZWxkT24oTWFueVRvT25lUmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgZmllbGROYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKHJlbGF0aW9uKTsKLQkJaWYgKHRoaXMuY29uZmlnLmZpZWxkQWNjZXNzVHlwZSgpKSB7Ci0JCQl0aGlzLnByaW50TWFueVRvT25lQW5ub3RhdGlvbk9uKGZpZWxkTmFtZSwgcmVsYXRpb24sIHB3KTsKLQkJfQotCQl0aGlzLnByaW50RmllbGRPbihmaWVsZE5hbWUsIHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldFJlZmVyZW5jZWRFbnRpdHlOYW1lKCkpLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50TWFueVRvT25lQW5ub3RhdGlvbk9uKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBNYW55VG9PbmVSZWxhdGlvbiByZWxhdGlvbiwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50QW5ub3RhdGlvbihKUEEuTUFOWV9UT19PTkUpOwotCQlwdy5wcmludGxuKCk7Ci0JCUZvcmVpZ25LZXkgZm9yZWlnbktleSA9IHJlbGF0aW9uLmdldEZvcmVpZ25LZXkoKTsKLQkJaWYgKGZvcmVpZ25LZXkucmVmZXJlbmNlc1NpbmdsZUNvbHVtblByaW1hcnlLZXkoKSkgewotCQkJLy8gaWYgdGhlIEZLIHJlZmVyZW5jZXMgYSBzaW5nbGUtY29sdW1uIFBLLCAncmVmZXJlbmNlZENvbHVtbk5hbWUnIGlzIG5vdCByZXF1aXJlZAotCQkJU3RyaW5nIGpvaW5Db2x1bW5OYW1lID0gdGhpcy5jb25maWcuZ2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoKS5idWlsZEpvaW5Db2x1bW5Bbm5vdGF0aW9uTmFtZShhdHRyaWJ1dGVOYW1lLCBmb3JlaWduS2V5KTsKLQkJCWlmIChqb2luQ29sdW1uTmFtZSA9PSBudWxsKSB7Ci0JCQkJLy8gbm8gSm9pbkNvbHVtbiBhbm5vdGF0aW9uIG5lZWRlZDogdGhlIGRlZmF1bHQgJ25hbWUnIGFuZCAncmVmZXJlbmNlZENvbHVtbk5hbWUnIHdvcmsKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBqb2luIGNvbHVtbiBoZXJlIChqdXN0IG5vdCB0aGUgZGVmYXVsdCBuYW1lKQotCQkJCXRoaXMucHJpbnRKb2luQ29sdW1uQW5ub3RhdGlvbk9uKGpvaW5Db2x1bW5OYW1lLCBudWxsLCBwdyk7Ci0JCQkJcHcucHJpbnRsbigpOwotCQkJfQotCQl9IGVsc2UgewotCQkJdGhpcy5wcmludE1hbnlUb09uZUpvaW5Db2x1bW5zQW5ub3RhdGlvbk9uKGZvcmVpZ25LZXksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludE1hbnlUb09uZUpvaW5Db2x1bW5zQW5ub3RhdGlvbk9uKEZvcmVpZ25LZXkgZm9yZWlnbktleSwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWlmIChmb3JlaWduS2V5LmNvbHVtblBhaXJzU2l6ZSgpID4gMSkgewotCQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5KT0lOX0NPTFVNTlMpOwotCQkJcHcucHJpbnQoIih7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludGxuKCk7Ci0JCQlwdy5pbmRlbnQoKTsKLQkJfQotCQl0aGlzLnByaW50Sm9pbkNvbHVtbkFubm90YXRpb25zT24oZm9yZWlnbktleSwgcHcpOwotCQlpZiAoZm9yZWlnbktleS5jb2x1bW5QYWlyc1NpemUoKSA+IDEpIHsKLQkJCXB3LnVuZGVudCgpOwotCQkJcHcucHJpbnRsbigpOwotCQkJcHcucHJpbnQoIn0pIik7ICAvLyROT04tTkxTLTEkCi0JCX0KLQkJcHcucHJpbnRsbigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEpvaW5Db2x1bW5Bbm5vdGF0aW9uc09uKEZvcmVpZ25LZXkgZm9yZWlnbktleSwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWZvciAoSXRlcmF0b3I8Rm9yZWlnbktleS5Db2x1bW5QYWlyPiBzdHJlYW0gPSBmb3JlaWduS2V5LmNvbHVtblBhaXJzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJdGhpcy5wcmludEpvaW5Db2x1bW5Bbm5vdGF0aW9uT24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQkJaWYgKHN0cmVhbS5oYXNOZXh0KCkpIHsKLQkJCQlwdy5wcmludGxuKCcsJyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRKb2luQ29sdW1uQW5ub3RhdGlvbk9uKEZvcmVpZ25LZXkuQ29sdW1uUGFpciBjb2x1bW5QYWlyLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJdGhpcy5wcmludEpvaW5Db2x1bW5Bbm5vdGF0aW9uT24oCi0JCQl0aGlzLmNvbmZpZy5nZXREYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcigpLmJ1aWxkSm9pbkNvbHVtbkFubm90YXRpb25OYW1lKGNvbHVtblBhaXIuZ2V0QmFzZUNvbHVtbigpKSwKLQkJCXRoaXMuY29uZmlnLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuYnVpbGRKb2luQ29sdW1uQW5ub3RhdGlvbk5hbWUoY29sdW1uUGFpci5nZXRSZWZlcmVuY2VkQ29sdW1uKCkpLAotCQkJcHcKLQkJKTsKLQl9Ci0KLQkvKioKLQkgKiAnYmFzZUNvbHVtbk5hbWUnIGNhbm5vdCBiZSBudWxsOwotCSAqICdyZWZlcmVuY2VkQ29sdW1uTmFtZScgaXMgbnVsbCB3aGVuIHRoZSBkZWZhdWx0IGlzIGFwcGxpY2FibGUgKGkuZS4gdGhlCi0JICogcmVmZXJlbmNlZCBjb2x1bW4gaXMgdGhlIHNpbmdsZS1jb2x1bW4gcHJpbWFyeSBrZXkgY29sdW1uIG9mIHRoZQotCSAqIHJlZmVyZW5jZWQgdGFibGUpCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Sm9pbkNvbHVtbkFubm90YXRpb25PbihTdHJpbmcgYmFzZUNvbHVtbk5hbWUsIFN0cmluZyByZWZlcmVuY2VkQ29sdW1uTmFtZSwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50QW5ub3RhdGlvbihKUEEuSk9JTl9DT0xVTU4pOwotCQlwdy5wcmludCgiKG5hbWU9Iik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50U3RyaW5nTGl0ZXJhbChiYXNlQ29sdW1uTmFtZSk7Ci0KLQkJaWYgKHJlZmVyZW5jZWRDb2x1bW5OYW1lICE9IG51bGwpIHsKLQkJCXB3LnByaW50KCIsIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRTdHJpbmdMaXRlcmFsKHJlZmVyZW5jZWRDb2x1bW5OYW1lKTsKLQkJfQotCi0JCXB3LnByaW50KCcpJyk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIG9uZS10by1tYW55IGZpZWxkcyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlPbmVUb01hbnlGaWVsZHNPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJZm9yIChJdGVyYXRvcjxPbmVUb01hbnlSZWxhdGlvbj4gc3RyZWFtID0gdGhpcy5nZW5UYWJsZS5vbmVUb01hbnlSZWxhdGlvbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50RW50aXR5T25lVG9NYW55RmllbGRPbihzdHJlYW0ubmV4dCgpLCBwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlPbmVUb01hbnlGaWVsZE9uKE9uZVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJU3RyaW5nIGZpZWxkTmFtZSA9IHRoaXMuZ2VuVGFibGUuZ2V0QXR0cmlidXRlTmFtZUZvcihyZWxhdGlvbik7Ci0JCWlmICh0aGlzLmNvbmZpZy5maWVsZEFjY2Vzc1R5cGUoKSkgewotCQkJdGhpcy5wcmludE9uZVRvTWFueUFubm90YXRpb25PbihyZWxhdGlvbiwgcHcpOwotCQl9Ci0JCXRoaXMucHJpbnRDb2xsZWN0aW9uRmllbGRPbihmaWVsZE5hbWUsIHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldFJlZmVyZW5jZWRFbnRpdHlOYW1lKCkpLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50T25lVG9NYW55QW5ub3RhdGlvbk9uKE9uZVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5PTkVfVE9fTUFOWSk7Ci0JCXB3LnByaW50KCIobWFwcGVkQnk9XCIiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnQocmVsYXRpb24uZ2V0TWFwcGVkQnkoKSk7Ci0JCXB3LnByaW50KCJcIikiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnRsbigpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBvd25lZCBtYW55LXRvLW1hbnkgZmllbGRzICoqKioqKioqKioKLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU93bmVkTWFueVRvTWFueUZpZWxkc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPE1hbnlUb01hbnlSZWxhdGlvbj4gIHN0cmVhbSA9IHRoaXMuZ2VuVGFibGUub3duZWRNYW55VG9NYW55UmVsYXRpb25zKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJdGhpcy5wcmludEVudGl0eU93bmVkTWFueVRvTWFueUZpZWxkT24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5T3duZWRNYW55VG9NYW55RmllbGRPbihNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgZmllbGROYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yT3duZWQocmVsYXRpb24pOwotCQlpZiAodGhpcy5jb25maWcuZmllbGRBY2Nlc3NUeXBlKCkpIHsKLQkJCXRoaXMucHJpbnRPd25lZE1hbnlUb01hbnlBbm5vdGF0aW9uT24oZmllbGROYW1lLCByZWxhdGlvbiwgcHcpOwotCQl9Ci0JCXRoaXMucHJpbnRDb2xsZWN0aW9uRmllbGRPbihmaWVsZE5hbWUsIHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldE5vbk93bmluZ0VudGl0eU5hbWUoKSksIHB3KTsKLQl9Ci0KLQkvKioKLQkgKiBvbmx5IHByaW50IHRoZSBKb2luVGFibGUgYW5ub3RhdGlvbiBpZiBvbmUgb3IgbW9yZSBvZiB0aGUKLQkgKiBbZ2VuZXJhdGVkXSBlbGVtZW50cyBpcyBub3QgZGVmYXVsdGVkOgotCSAqICAgICBuYW1lCi0JICogICAgIGpvaW5Db2x1bW5zCi0JICogICAgIGludmVyc2VKb2luQ29sdW1ucwotCSAqIHRodXMgdGhlIG5lZWQgZm9yIHRoZSAncHJpbnRKb2luVGFibGVBbm5vdGF0aW9uJyBmbGFnCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50T3duZWRNYW55VG9NYW55QW5ub3RhdGlvbk9uKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludEFubm90YXRpb24oSlBBLk1BTllfVE9fTUFOWSk7Ci0JCXB3LnByaW50bG4oKTsKLQkJQm9vbGVhbkhvbGRlciBwcmludEpvaW5UYWJsZUFubm90YXRpb24gPSBuZXcgQm9vbGVhbkhvbGRlcih0cnVlKTsKLQotCQlpZiAoICEgcmVsYXRpb24uam9pblRhYmxlTmFtZUlzRGVmYXVsdCgpKSB7ICAvLyBkYi1vbmx5IHRlc3QgLSBubyBuZWVkIHRvIGRlbGVnYXRlIHRvIHBsYXRmb3JtPwotCQkJcHJpbnRKb2luVGFibGVBbm5vdGF0aW9uLnNldEZhbHNlKCk7Ci0JCQlwdy5wcmludEFubm90YXRpb24oSlBBLkpPSU5fVEFCTEUpOwotCQkJcHcucHJpbnQoIihuYW1lPSIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRTdHJpbmdMaXRlcmFsKHRoaXMuY29uZmlnLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuYnVpbGRKb2luVGFibGVBbm5vdGF0aW9uTmFtZShyZWxhdGlvbi5nZXRKb2luR2VuVGFibGUoKS5nZXRUYWJsZSgpKSk7Ci0JCX0KLQotCQl0aGlzLnByaW50Sm9pblRhYmxlSm9pbkNvbHVtbkFubm90YXRpb25zT24oCi0JCQkJImpvaW5Db2x1bW5zIiwgIC8vJE5PTi1OTFMtMSQKLQkJCQlhdHRyaWJ1dGVOYW1lLAotCQkJCXJlbGF0aW9uLmdldE93bmluZ0ZvcmVpZ25LZXkoKSwKLQkJCQlwcmludEpvaW5UYWJsZUFubm90YXRpb24sCi0JCQkJcHcKLQkJKTsKLQotCQl0aGlzLnByaW50Sm9pblRhYmxlSm9pbkNvbHVtbkFubm90YXRpb25zT24oCi0JCQkJImludmVyc2VKb2luQ29sdW1ucyIsICAvLyROT04tTkxTLTEkCi0JCQkJcmVsYXRpb24uZ2V0Tm9uT3duaW5nR2VuVGFibGUoKS5nZXRBdHRyaWJ1dGVOYW1lRm9yTm9uT3duZWQocmVsYXRpb24pLAotCQkJCXJlbGF0aW9uLmdldE5vbk93bmluZ0ZvcmVpZ25LZXkoKSwKLQkJCQlwcmludEpvaW5UYWJsZUFubm90YXRpb24sCi0JCQkJcHcKLQkJKTsKLQotCQlpZiAocHJpbnRKb2luVGFibGVBbm5vdGF0aW9uLmlzRmFsc2UoKSkgewotCQkJcHcucHJpbnQoJyknKTsKLQkJCXB3LnByaW50bG4oKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICdlbGVtZW50TmFtZScgaXMgZWl0aGVyICJqb2luQ29sdW1ucyIgb3IgImludmVyc2VKb2luQ29sdW1ucyIKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJpbnRKb2luVGFibGVKb2luQ29sdW1uQW5ub3RhdGlvbnNPbihTdHJpbmcgZWxlbWVudE5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBGb3JlaWduS2V5IGZvcmVpZ25LZXksIEJvb2xlYW5Ib2xkZXIgcHJpbnRKb2luVGFibGVBbm5vdGF0aW9uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJLy8gd2UgaGF2ZSB0byBwcmUtY2FsY3VsYXRlIHdoZXRoZXIgZWl0aGVyICduYW1lJyBhbmQvb3IgJ3JlZmVyZW5jZWRDb2x1bW5OYW1lJwotCQkvLyBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZXkgYXJlIHdyYXBwZWQgYnkgdGhlIEpvaW5UYWJsZSBhbm5vdGF0aW9uIGFuZCB3ZQotCQkvLyBuZWVkIHRvIHByaW50IHRoZSBKb2luVGFibGUgYW5ub3RhdGlvbiBmaXJzdCAoaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBwcmludGVkKQotCQlib29sZWFuIHByaW50UmVmID0gISBmb3JlaWduS2V5LnJlZmVyZW5jZXNTaW5nbGVDb2x1bW5QcmltYXJ5S2V5KCk7Ci0JCS8vIGlmICdyZWZlcmVuY2VkQ29sdW1uTmFtZScgaXMgcmVxdWlyZWQsICduYW1lJyBpcyBhbHNvIHJlcXVpcmVkIChpLmUuIGl0IGNhbm5vdCBiZSBkZWZhdWx0ZWQpOwotCQkvLyBidXQgd2Ugd2lsbCBjYWxjdWxhdGUgaXQgbGF0ZXIgWzFdLCBzaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBqb2luIGNvbHVtbnMKLQkJU3RyaW5nIGpvaW5Db2x1bW5OYW1lID0gKHByaW50UmVmKSA/Ci0JCQkJCW51bGwgIC8vICdqb2luQ29sdW1uTmFtZScgaXMgbm90IHVzZWQKLQkJCQk6Ci0JCQkJCXRoaXMuY29uZmlnLmdldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKCkuYnVpbGRKb2luQ29sdW1uQW5ub3RhdGlvbk5hbWUoYXR0cmlidXRlTmFtZSwgZm9yZWlnbktleSk7Ci0JCWJvb2xlYW4gcHJpbnRCYXNlID0gKHByaW50UmVmIHx8IChqb2luQ29sdW1uTmFtZSAhPSBudWxsKSk7Ci0JCWlmIChwcmludEJhc2UgfHwgcHJpbnRSZWYpIHsKLQkJCWlmIChwcmludEpvaW5UYWJsZUFubm90YXRpb24uaXNUcnVlKCkpIHsKLQkJCQlwcmludEpvaW5UYWJsZUFubm90YXRpb24uc2V0RmFsc2UoKTsKLQkJCQlwdy5wcmludEFubm90YXRpb24oSlBBLkpPSU5fVEFCTEUpOwotCQkJCXB3LnByaW50KCcoJyk7Ci0JCQl9IGVsc2UgewotCQkJCXB3LnByaW50KCcsJyk7Ci0JCQl9Ci0JCQlwdy5wcmludGxuKCk7Ci0JCQlwdy5pbmRlbnQoKTsKLQkJCQlpZiAocHJpbnRSZWYpIHsKLQkJCQkJLy8gaWYgJ3ByaW50UmVmJyBpcyB0cnVlLCAnam9pbkNvbHVtbk5hbWUnIHdpbGwgYWx3YXlzIGJlICJJR05PUkVEIiAoc28gd2UgaWdub3JlIGl0KQotCQkJCQl0aGlzLnByaW50Sm9pblRhYmxlSm9pbkNvbHVtbkFubm90YXRpb25zT24oZWxlbWVudE5hbWUsIGZvcmVpZ25LZXksIHB3KTsgIC8vIFsxXQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vIGlmIHRoZSBGSyByZWZlcmVuY2VzIGEgc2luZ2xlLWNvbHVtbiBQSywgJ3JlZmVyZW5jZWRDb2x1bW5OYW1lJyBpcyBub3QgcmVxdWlyZWQKLQkJCQkJaWYgKHByaW50QmFzZSkgewotCQkJCQkJLy8gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBqb2luIGNvbHVtbiBoZXJlIChqdXN0IG5vdCB0aGUgZGVmYXVsdCBuYW1lKQotCQkJCQkJcHcucHJpbnQoZWxlbWVudE5hbWUpOwotCQkJCQkJcHcucHJpbnQoJz0nKTsKLQkJCQkJCXRoaXMucHJpbnRKb2luQ29sdW1uQW5ub3RhdGlvbk9uKGpvaW5Db2x1bW5OYW1lLCBudWxsLCBwdyk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvLyBubyBKb2luQ29sdW1uIGFubm90YXRpb24gbmVlZGVkOiB0aGUgZGVmYXVsdCAnbmFtZScgYW5kICdyZWZlcmVuY2VkQ29sdW1uTmFtZScgd29yawotCQkJCQl9Ci0JCQkJfQotCQkJcHcudW5kZW50KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAnZWxlbWVudE5hbWUnIGlzIGVpdGhlciAiam9pbkNvbHVtbnMiIG9yICJpbnZlcnNlSm9pbkNvbHVtbnMiCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Sm9pblRhYmxlSm9pbkNvbHVtbkFubm90YXRpb25zT24oU3RyaW5nIGVsZW1lbnROYW1lLCBGb3JlaWduS2V5IGZvcmVpZ25LZXksIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludChlbGVtZW50TmFtZSk7Ci0JCXB3LnByaW50KCc9Jyk7Ci0JCWlmIChmb3JlaWduS2V5LmNvbHVtblBhaXJzU2l6ZSgpID4gMSkgewotCQkJcHcucHJpbnQoJ3snKTsKLQkJCXB3LnByaW50bG4oKTsKLQkJCXB3LmluZGVudCgpOwotCQl9Ci0JCXRoaXMucHJpbnRKb2luQ29sdW1uQW5ub3RhdGlvbnNPbihmb3JlaWduS2V5LCBwdyk7Ci0JCWlmIChmb3JlaWduS2V5LmNvbHVtblBhaXJzU2l6ZSgpID4gMSkgewotCQkJcHcudW5kZW50KCk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCQlwdy5wcmludCgnfScpOwotCQkJcHcucHJpbnRsbigpOwotCQl9Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIG5vbi1vd25lZCBtYW55LXRvLW1hbnkgZmllbGRzICoqKioqKioqKioKLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU5vbk93bmVkTWFueVRvTWFueUZpZWxkc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPE1hbnlUb01hbnlSZWxhdGlvbj4gc3RyZWFtID0gdGhpcy5nZW5UYWJsZS5ub25Pd25lZE1hbnlUb01hbnlSZWxhdGlvbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50RW50aXR5Tm9uT3duZWRNYW55VG9NYW55RmllbGRPbihzdHJlYW0ubmV4dCgpLCBwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlOb25Pd25lZE1hbnlUb01hbnlGaWVsZE9uKE1hbnlUb01hbnlSZWxhdGlvbiByZWxhdGlvbiwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCVN0cmluZyBmaWVsZE5hbWUgPSB0aGlzLmdlblRhYmxlLmdldEF0dHJpYnV0ZU5hbWVGb3JOb25Pd25lZChyZWxhdGlvbik7Ci0JCWlmICh0aGlzLmNvbmZpZy5maWVsZEFjY2Vzc1R5cGUoKSkgewotCQkJdGhpcy5wcmludE5vbk93bmVkTWFueVRvTWFueUFubm90YXRpb25PbihyZWxhdGlvbiwgcHcpOwotCQl9Ci0JCXRoaXMucHJpbnRDb2xsZWN0aW9uRmllbGRPbihmaWVsZE5hbWUsIHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldE93bmluZ0VudGl0eU5hbWUoKSksIHB3KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnROb25Pd25lZE1hbnlUb01hbnlBbm5vdGF0aW9uT24oTWFueVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5NQU5ZX1RPX01BTlkpOwotCQlwdy5wcmludCgiKG1hcHBlZEJ5PVwiIik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50KHJlbGF0aW9uLmdldE1hcHBlZEJ5KCkpOwotCQlwdy5wcmludCgiXCIpIik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50bG4oKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbWlzYyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRTZXJpYWxWZXJzaW9uVUlERmllbGRPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJaWYgKHRoaXMuY29uZmlnLmdlbmVyYXRlU2VyaWFsVmVyc2lvblVJRCgpKSB7Ci0JCQlwdy5wcmludCgicHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRaZXJvQXJndW1lbnRDb25zdHJ1Y3Rvck9uKFN0cmluZyBjdG9yTmFtZSwgU3RyaW5nIHZpc2liaWxpdHksIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlpZiAodGhpcy5jb25maWcuZ2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IoKSkgewotCQkJcHcucHJpbnRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotCQkJcHcucHJpbnQoY3Rvck5hbWUpOwotCQkJcHcucHJpbnQoIigpIHsiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50bG4oKTsKLQkJCXB3LmluZGVudCgpOwotCQkJCXB3LnByaW50bG4oInN1cGVyKCk7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy51bmRlbnQoKTsKLQkJCXB3LnByaW50KCd9Jyk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogcHJpbWFyeSBrZXkgcHJvcGVydGllcyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlQcmltYXJ5S2V5UHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlpZiAodGhpcy5wcmltYXJ5S2V5Q2xhc3NJc1JlcXVpcmVkKCkgJiYgdGhpcy5jb25maWcuZ2VuZXJhdGVFbWJlZGRlZElkRm9yQ29tcG91bmRQSygpKSB7Ci0JCQl0aGlzLnByaW50RW50aXR5RW1iZWRkZWRJZFByaW1hcnlLZXlQcm9wZXJ0eU9uKHB3KTsKLQkJfSBlbHNlIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlSZWFkT25seVByaW1hcnlLZXlQcm9wZXJ0aWVzT24ocHcpOwotCQkJdGhpcy5wcmludEVudGl0eVdyaXRhYmxlUHJpbWFyeUtleVByb3BlcnRpZXNPbihwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlFbWJlZGRlZElkUHJpbWFyeUtleVByb3BlcnR5T24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWlmICh0aGlzLmNvbmZpZy5wcm9wZXJ0eUFjY2Vzc1R5cGUoKSkgewotCQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5FTUJFRERFRF9JRCk7Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQkJdGhpcy5wcmludFByb3BlcnR5T24odGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yRW1iZWRkZWRJZCgpLCB0aGlzLnBrQ2xhc3NOYW1lLCBwdyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5UmVhZE9ubHlQcmltYXJ5S2V5UHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQl0aGlzLnByaW50UHJpbWFyeUtleVByb3BlcnRpZXNPbihwdywgdHJ1ZSwgdHJ1ZSk7ICAvLyB0cnVlPXJlYWQtb25seTsgdHJ1ZT1wcmludCBJRCBhbm5vdGF0aW9uIG9uIGdldHRlcnMKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlXcml0YWJsZVByaW1hcnlLZXlQcm9wZXJ0aWVzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXRoaXMucHJpbnRQcmltYXJ5S2V5UHJvcGVydGllc09uKHB3LCBmYWxzZSwgdHJ1ZSk7ICAvLyBmYWxzZT13cml0YWJsZTsgdHJ1ZT1wcmludCBJRCBhbm5vdGF0aW9uIG9uIGdldHRlcnMKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRQcmltYXJ5S2V5UHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdywgYm9vbGVhbiByZWFkT25seSwgYm9vbGVhbiBwcmludElkQW5ub3RhdGlvbikgewotCQlmb3IgKEl0ZXJhdG9yPENvbHVtbj4gc3RyZWFtID0gdGhpcy5wcmltYXJ5S2V5Q29sdW1ucyhyZWFkT25seSk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJdGhpcy5wcmludFByaW1hcnlLZXlQcm9wZXJ0eU9uKHN0cmVhbS5uZXh0KCksIHB3LCByZWFkT25seSwgcHJpbnRJZEFubm90YXRpb24pOwotCQl9Ci0JfQotCi0JLy8gVE9ETyBpZiB0aGUgcHJvcGVydHkncyB0eXBlIGlzIGphdmEudXRpbC9zcWwuRGF0ZSwgaXQgbmVlZHMgQFRlbXBvcmFsKERBVEUpCi0JLy8gVE9ETyBpZiB0aGUgcHJpbWFyeSBrZXkgaXMgYXV0by1nZW5lcmF0ZWQsIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIGFuIGludGVncmFsIHR5cGUKLQlwcml2YXRlIHZvaWQgcHJpbnRQcmltYXJ5S2V5UHJvcGVydHlPbihDb2x1bW4gY29sdW1uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcsIGJvb2xlYW4gcmVhZE9ubHksIGJvb2xlYW4gcHJpbnRJZEFubm90YXRpb24pIHsKLQkJU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2VuVGFibGUuZ2V0QXR0cmlidXRlTmFtZUZvcihjb2x1bW4pOwotCQlpZiAodGhpcy5jb25maWcucHJvcGVydHlBY2Nlc3NUeXBlKCkpIHsKLQkJCWlmIChwcmludElkQW5ub3RhdGlvbikgewotCQkJCXB3LnByaW50QW5ub3RhdGlvbihKUEEuSUQpOwotCQkJCXB3LnByaW50bG4oKTsKLQkJCX0KLQkJCVN0cmluZyBjb2x1bW5OYW1lID0gdGhpcy5jb25maWcuZ2V0RGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIoKS5idWlsZENvbHVtbkFubm90YXRpb25OYW1lKHByb3BlcnR5TmFtZSwgY29sdW1uKTsKLQkJCWlmIChyZWFkT25seSkgewotCQkJCXRoaXMucHJpbnRSZWFkT25seUNvbHVtbkFubm90YXRpb25Pbihjb2x1bW5OYW1lLCBwdyk7Ci0JCQl9IGVsc2UgewotCQkJCXRoaXMucHJpbnRDb2x1bW5Bbm5vdGF0aW9uT24oY29sdW1uTmFtZSwgcHcpOwotCQkJfQotCQl9Ci0JCXRoaXMucHJpbnRQcm9wZXJ0eU9uKHByb3BlcnR5TmFtZSwgY29sdW1uLmdldFByaW1hcnlLZXlKYXZhVHlwZURlY2xhcmF0aW9uKCksIHB3KTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogYmFzaWMgcHJvcGVydGllcyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlOb25QcmltYXJ5S2V5QmFzaWNQcm9wZXJ0aWVzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWZvciAoSXRlcmF0b3I8Q29sdW1uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm5vblByaW1hcnlLZXlCYXNpY0NvbHVtbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50RW50aXR5Tm9uUHJpbWFyeUtleUJhc2ljUHJvcGVydHlPbihzdHJlYW0ubmV4dCgpLCBwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlOb25QcmltYXJ5S2V5QmFzaWNQcm9wZXJ0eU9uKENvbHVtbiBjb2x1bW4sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKGNvbHVtbik7Ci0JCWlmICh0aGlzLmNvbmZpZy5wcm9wZXJ0eUFjY2Vzc1R5cGUoKSkgewotCQkJU3RyaW5nIGNvbHVtbk5hbWUgPSB0aGlzLmNvbmZpZy5nZXREYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcigpLmJ1aWxkQ29sdW1uQW5ub3RhdGlvbk5hbWUocHJvcGVydHlOYW1lLCBjb2x1bW4pOwotCQkJdGhpcy5wcmludENvbHVtbkFubm90YXRpb25Pbihjb2x1bW5OYW1lLCBwdyk7Ci0JCX0KLQkJdGhpcy5wcmludFByb3BlcnR5T24ocHJvcGVydHlOYW1lLCBjb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpLCBwdyk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIG1hbnktdG8tb25lIHByb3BlcnRpZXMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5TWFueVRvT25lUHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPE1hbnlUb09uZVJlbGF0aW9uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm1hbnlUb09uZVJlbGF0aW9ucygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlNYW55VG9PbmVQcm9wZXJ0eU9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU1hbnlUb09uZVByb3BlcnR5T24oTWFueVRvT25lUmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKHJlbGF0aW9uKTsKLQkJaWYgKHRoaXMuY29uZmlnLnByb3BlcnR5QWNjZXNzVHlwZSgpKSB7Ci0JCQl0aGlzLnByaW50TWFueVRvT25lQW5ub3RhdGlvbk9uKHByb3BlcnR5TmFtZSwgcmVsYXRpb24sIHB3KTsKLQkJfQotCQlTdHJpbmcgdHlwZURlY2xhcmF0aW9uID0gdGhpcy5mdWxseVF1YWxpZnkocmVsYXRpb24uZ2V0UmVmZXJlbmNlZEVudGl0eU5hbWUoKSk7Ci0JCXRoaXMucHJpbnRQcm9wZXJ0eU9uKHByb3BlcnR5TmFtZSwgdHlwZURlY2xhcmF0aW9uLCBwdyk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIG9uZS10by1tYW55IHByb3BlcnRpZXMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5T25lVG9NYW55UHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPE9uZVRvTWFueVJlbGF0aW9uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm9uZVRvTWFueVJlbGF0aW9ucygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlPbmVUb01hbnlQcm9wZXJ0eU9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU9uZVRvTWFueVByb3BlcnR5T24oT25lVG9NYW55UmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKHJlbGF0aW9uKTsKLQkJaWYgKHRoaXMuY29uZmlnLnByb3BlcnR5QWNjZXNzVHlwZSgpKSB7Ci0JCQl0aGlzLnByaW50T25lVG9NYW55QW5ub3RhdGlvbk9uKHJlbGF0aW9uLCBwdyk7Ci0JCX0KLQkJU3RyaW5nIGVsZW1lbnRUeXBlRGVjbGFyYXRpb24gPSB0aGlzLmZ1bGx5UXVhbGlmeShyZWxhdGlvbi5nZXRSZWZlcmVuY2VkRW50aXR5TmFtZSgpKTsKLQkJdGhpcy5wcmludENvbGxlY3Rpb25Qcm9wZXJ0eU9uKHByb3BlcnR5TmFtZSwgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwgcHcpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBvd25lZCBtYW55LXRvLW1hbnkgcHJvcGVydGllcyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRFbnRpdHlPd25lZE1hbnlUb01hbnlQcm9wZXJ0aWVzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWZvciAoSXRlcmF0b3I8TWFueVRvTWFueVJlbGF0aW9uPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlLm93bmVkTWFueVRvTWFueVJlbGF0aW9ucygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMucHJpbnRFbnRpdHlPd25lZE1hbnlUb01hbnlQcm9wZXJ0eU9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU93bmVkTWFueVRvTWFueVByb3BlcnR5T24oTWFueVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2VuVGFibGUuZ2V0QXR0cmlidXRlTmFtZUZvck93bmVkKHJlbGF0aW9uKTsKLQkJaWYgKHRoaXMuY29uZmlnLnByb3BlcnR5QWNjZXNzVHlwZSgpKSB7Ci0JCQl0aGlzLnByaW50T3duZWRNYW55VG9NYW55QW5ub3RhdGlvbk9uKHByb3BlcnR5TmFtZSwgcmVsYXRpb24sIHB3KTsKLQkJfQotCQlTdHJpbmcgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiA9IHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldE5vbk93bmluZ0VudGl0eU5hbWUoKSk7Ci0JCXRoaXMucHJpbnRDb2xsZWN0aW9uUHJvcGVydHlPbihwcm9wZXJ0eU5hbWUsIGVsZW1lbnRUeXBlRGVjbGFyYXRpb24sIHB3KTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogbm9uLW93bmVkIG1hbnktdG8tbWFueSBwcm9wZXJ0aWVzICoqKioqKioqKioKLQotCXByaXZhdGUgdm9pZCBwcmludEVudGl0eU5vbk93bmVkTWFueVRvTWFueVByb3BlcnRpZXNPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJZm9yIChJdGVyYXRvcjxNYW55VG9NYW55UmVsYXRpb24+IHN0cmVhbSA9IHRoaXMuZ2VuVGFibGUubm9uT3duZWRNYW55VG9NYW55UmVsYXRpb25zKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJdGhpcy5wcmludEVudGl0eU5vbk93bmVkTWFueVRvTWFueVByb3BlcnR5T24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW50aXR5Tm9uT3duZWRNYW55VG9NYW55UHJvcGVydHlPbihNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yTm9uT3duZWQocmVsYXRpb24pOwotCQlpZiAodGhpcy5jb25maWcucHJvcGVydHlBY2Nlc3NUeXBlKCkpIHsKLQkJCXRoaXMucHJpbnROb25Pd25lZE1hbnlUb01hbnlBbm5vdGF0aW9uT24ocmVsYXRpb24sIHB3KTsKLQkJfQotCQlTdHJpbmcgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiA9IHRoaXMuZnVsbHlRdWFsaWZ5KHJlbGF0aW9uLmdldE93bmluZ0VudGl0eU5hbWUoKSk7Ci0JCXRoaXMucHJpbnRDb2xsZWN0aW9uUHJvcGVydHlPbihwcm9wZXJ0eU5hbWUsIGVsZW1lbnRUeXBlRGVjbGFyYXRpb24sIHB3KTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogY29tcG91bmQgcHJpbWFyeSBrZXkgY2xhc3MgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUNsYXNzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50bG4oKTsKLQkJaWYgKHRoaXMuY29uZmlnLmdlbmVyYXRlRW1iZWRkZWRJZEZvckNvbXBvdW5kUEsoKSkgewotCQkJcHcucHJpbnRBbm5vdGF0aW9uKEpQQS5FTUJFRERBQkxFKTsKLQkJCXB3LnByaW50bG4oKTsKLQkJfQotCQlwdy5wcmludCgicHVibGljIHN0YXRpYyBjbGFzcyAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnQodGhpcy5jb25maWcuZ2V0UHJpbWFyeUtleU1lbWJlckNsYXNzTmFtZSgpKTsKLQkJcHcucHJpbnQoIiBpbXBsZW1lbnRzICIpOyAgLy8kTk9OLU5MUy0xJAotCQlwdy5wcmludFR5cGVEZWNsYXJhdGlvbihTZXJpYWxpemFibGUuY2xhc3MuZ2V0TmFtZSgpKTsKLQkJcHcucHJpbnQoIiB7Iik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50bG4oKTsKLQotCQlwdy5pbmRlbnQoKTsKLQkJCWlmICh0aGlzLmNvbmZpZy5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLKCkpIHsKLQkJCQl0aGlzLnByaW50RW1iZWRkYWJsZVJlYWRPbmx5UHJpbWFyeUtleUZpZWxkc09uKHB3KTsKLQkJCQl0aGlzLnByaW50RW1iZWRkYWJsZVdyaXRhYmxlUHJpbWFyeUtleUZpZWxkc09uKHB3KTsKLQkJCX0gZWxzZSB7Ci0JCQkJdGhpcy5wcmludElkRmllbGRzT24ocHcpOwotCQkJfQotCQkJdGhpcy5wcmludFNlcmlhbFZlcnNpb25VSURGaWVsZE9uKHB3KTsKLQkJCXB3LnByaW50bG4oKTsKLQkJCXRoaXMucHJpbnRaZXJvQXJndW1lbnRDb25zdHJ1Y3Rvck9uKHRoaXMuY29uZmlnLmdldFByaW1hcnlLZXlNZW1iZXJDbGFzc05hbWUoKSwgInB1YmxpYyIsIHB3KTsgIC8vJE5PTi1OTFMtMSQKLQotCQkJaWYgKHRoaXMuY29uZmlnLnByb3BlcnR5QWNjZXNzVHlwZSgpIHx8IHRoaXMuY29uZmlnLmdlbmVyYXRlR2V0dGVyc0FuZFNldHRlcnMoKSkgewotCQkJCWlmICh0aGlzLmNvbmZpZy5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLKCkpIHsKLQkJCQkJdGhpcy5wcmludEVtYmVkZGFibGVSZWFkT25seVByaW1hcnlLZXlQcm9wZXJ0aWVzT24ocHcpOwotCQkJCQl0aGlzLnByaW50RW1iZWRkYWJsZVdyaXRhYmxlUHJpbWFyeUtleVByb3BlcnRpZXNPbihwdyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGhpcy5wcmludElkUHJvcGVydGllc09uKHB3KTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXRoaXMucHJpbnRQcmltYXJ5S2V5RXF1YWxzTWV0aG9kT24odGhpcy5jb25maWcuZ2V0UHJpbWFyeUtleU1lbWJlckNsYXNzTmFtZSgpLCB0aGlzLmdldFRhYmxlKCkucHJpbWFyeUtleUNvbHVtbnMoKSwgcHcpOwotCQkJdGhpcy5wcmludFByaW1hcnlLZXlIYXNoQ29kZU1ldGhvZE9uKHRoaXMuZ2V0VGFibGUoKS5wcmltYXJ5S2V5Q29sdW1ucygpLCBwdyk7Ci0JCXB3LnVuZGVudCgpOwotCi0JCXB3LnByaW50KCd9Jyk7Ci0JCXB3LnByaW50bG4oKTsKLQkJcHcucHJpbnRsbigpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb21wb3VuZCBwcmltYXJ5IGtleSBjbGFzcyBmaWVsZHMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW1iZWRkYWJsZVJlYWRPbmx5UHJpbWFyeUtleUZpZWxkc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQl0aGlzLnByaW50UHJpbWFyeUtleUZpZWxkc09uKHB3LCB0cnVlLCBmYWxzZSk7ICAvLyB0cnVlPXJlYWQtb25seTsgZmFsc2U9ZG8gbm90IHByaW50IElEIGFubm90YXRpb24gb24gZmllbGRzCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW1iZWRkYWJsZVdyaXRhYmxlUHJpbWFyeUtleUZpZWxkc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQl0aGlzLnByaW50UHJpbWFyeUtleUZpZWxkc09uKHB3LCBmYWxzZSwgZmFsc2UpOyAgLy8gZmFsc2U9d3JpdGFibGU7IGZhbHNlPWRvIG5vdCBwcmludCBJRCBhbm5vdGF0aW9uIG9uIGZpZWxkcwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludElkRmllbGRzT24oRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCWZvciAoSXRlcmF0b3I8Q29sdW1uPiBzdHJlYW0gPSB0aGlzLmdldFRhYmxlKCkucHJpbWFyeUtleUNvbHVtbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQl0aGlzLnByaW50SWRGaWVsZE9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludElkRmllbGRPbihDb2x1bW4gY29sdW1uLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJdGhpcy5wcmludEZpZWxkT24odGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKGNvbHVtbiksIGNvbHVtbi5nZXRQcmltYXJ5S2V5SmF2YVR5cGVEZWNsYXJhdGlvbigpLCBwdyk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGNvbXBvdW5kIHByaW1hcnkga2V5IGNsYXNzIHByb3BlcnRpZXMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW1iZWRkYWJsZVJlYWRPbmx5UHJpbWFyeUtleVByb3BlcnRpZXNPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJdGhpcy5wcmludFByaW1hcnlLZXlQcm9wZXJ0aWVzT24ocHcsIHRydWUsIGZhbHNlKTsgIC8vIHRydWU9cmVhZC1vbmx5OyBmYWxzZT1kbyBub3QgcHJpbnQgSUQgYW5ub3RhdGlvbiBvbiBnZXR0ZXJzCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RW1iZWRkYWJsZVdyaXRhYmxlUHJpbWFyeUtleVByb3BlcnRpZXNPbihFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJdGhpcy5wcmludFByaW1hcnlLZXlQcm9wZXJ0aWVzT24ocHcsIGZhbHNlLCBmYWxzZSk7ICAvLyBmYWxzZT13cml0YWJsZTsgZmFsc2U9ZG8gbm90IHByaW50IElEIGFubm90YXRpb24gb24gZ2V0dGVycwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludElkUHJvcGVydGllc09uKEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlmb3IgKEl0ZXJhdG9yPENvbHVtbj4gc3RyZWFtID0gdGhpcy5nZXRUYWJsZSgpLnByaW1hcnlLZXlDb2x1bW5zKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJdGhpcy5wcmludElkUHJvcGVydHlPbihzdHJlYW0ubmV4dCgpLCBwdyk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRJZFByb3BlcnR5T24oQ29sdW1uIGNvbHVtbiwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXRoaXMucHJpbnRQcm9wZXJ0eU9uKHRoaXMuZ2VuVGFibGUuZ2V0QXR0cmlidXRlTmFtZUZvcihjb2x1bW4pLCBjb2x1bW4uZ2V0UHJpbWFyeUtleUphdmFUeXBlRGVjbGFyYXRpb24oKSwgcHcpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb21wb3VuZCBwcmltYXJ5IGtleSBjbGFzcyBlcXVhbHMgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUVxdWFsc01ldGhvZE9uKFN0cmluZyBjbGFzc05hbWUsIEl0ZXJhdG9yPENvbHVtbj4gY29sdW1ucywgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50QW5ub3RhdGlvbigiamF2YS5sYW5nLk92ZXJyaWRlIik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50bG4oKTsKLQotCQlwdy5wcmludGxuKCJwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcuaW5kZW50KCk7Ci0JCQlwdy5wcmludGxuKCJpZiAobyA9PSB0aGlzKSB7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5pbmRlbnQoKTsKLQkJCQlwdy5wcmludGxuKCJyZXR1cm4gdHJ1ZTsiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnVuZGVudCgpOwotCQkJcHcucHJpbnQoJ30nKTsKLQkJCXB3LnByaW50bG4oKTsKLQotCQkJcHcucHJpbnQoImlmICggISAobyBpbnN0YW5jZW9mICIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoY2xhc3NOYW1lKTsKLQkJCXB3LnByaW50KCIpKSB7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludGxuKCk7Ci0JCQlwdy5pbmRlbnQoKTsKLQkJCQlwdy5wcmludGxuKCJyZXR1cm4gZmFsc2U7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy51bmRlbnQoKTsKLQkJCXB3LnByaW50KCd9Jyk7Ci0JCQlwdy5wcmludGxuKCk7Ci0KLQkJCXB3LnByaW50KGNsYXNzTmFtZSk7Ci0JCQlwdy5wcmludCgiIG90aGVyID0gKCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoY2xhc3NOYW1lKTsKLQkJCXB3LnByaW50KCIpIG87Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludGxuKCk7Ci0KLQkJCXB3LnByaW50KCJyZXR1cm4gIik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5pbmRlbnQoKTsKLQkJCQl3aGlsZSAoY29sdW1ucy5oYXNOZXh0KCkpIHsKLQkJCQkJdGhpcy5wcmludFByaW1hcnlLZXlFcXVhbHNDbGF1c2VPbihjb2x1bW5zLm5leHQoKSwgcHcpOwotCQkJCQlpZiAoY29sdW1ucy5oYXNOZXh0KCkpIHsKLQkJCQkJCXB3LnByaW50bG4oKTsKLQkJCQkJCXB3LnByaW50KCImJiAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCX0KLQkJCQlwdy5wcmludCgnOycpOwotCQkJCXB3LnByaW50bG4oKTsKLQkJCXB3LnVuZGVudCgpOwotCQlwdy51bmRlbnQoKTsKLQkJcHcucHJpbnQoJ30nKTsKLQkJcHcucHJpbnRsbigpOwotCQlwdy5wcmludGxuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUVxdWFsc0NsYXVzZU9uKENvbHVtbiBjb2x1bW4sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlTdHJpbmcgZmllbGROYW1lID0gdGhpcy5nZW5UYWJsZS5nZXRBdHRyaWJ1dGVOYW1lRm9yKGNvbHVtbik7Ci0JCUphdmFUeXBlIGphdmFUeXBlID0gY29sdW1uLmdldFByaW1hcnlLZXlKYXZhVHlwZSgpOwotCQlpZiAoamF2YVR5cGUuaXNQcmltaXRpdmUoKSkgewotCQkJdGhpcy5wcmludFByaW1pdGl2ZUVxdWFsc0NsYXVzZU9uKGZpZWxkTmFtZSwgcHcpOwotCQl9IGVsc2UgewotCQkJdGhpcy5wcmludFJlZmVyZW5jZUVxdWFsc0NsYXVzZU9uKGZpZWxkTmFtZSwgcHcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWl0aXZlRXF1YWxzQ2xhdXNlT24oU3RyaW5nIGZpZWxkTmFtZSwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50KCIodGhpcy4iKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnQoZmllbGROYW1lKTsKLQkJcHcucHJpbnQoIiA9PSBvdGhlci4iKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnQoZmllbGROYW1lKTsKLQkJcHcucHJpbnQoJyknKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnRSZWZlcmVuY2VFcXVhbHNDbGF1c2VPbihTdHJpbmcgZmllbGROYW1lLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnQoInRoaXMuIik7ICAvLyROT04tTkxTLTEkCi0JCXB3LnByaW50KGZpZWxkTmFtZSk7Ci0JCXB3LnByaW50KCIuZXF1YWxzKG90aGVyLiIpOyAgLy8kTk9OLU5MUy0xJAotCQlwdy5wcmludChmaWVsZE5hbWUpOwotCQlwdy5wcmludCgnKScpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb21wb3VuZCBwcmltYXJ5IGtleSBjbGFzcyBoYXNoIGNvZGUgKioqKioqKioqKgotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUhhc2hDb2RlTWV0aG9kT24oSXRlcmF0b3I8Q29sdW1uPiBjb2x1bW5zLCBFbnRpdHlTb3VyY2VXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnRBbm5vdGF0aW9uKCJqYXZhLmxhbmcuT3ZlcnJpZGUiKTsgIC8vJE5PTi1OTFMtMSQKLQkJcHcucHJpbnRsbigpOwotCi0JCXB3LnByaW50bG4oInB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Iik7ICAvLyROT04tTkxTLTEkCi0JCXB3LmluZGVudCgpOwotCQkJcHcucHJpbnRsbigiZmluYWwgaW50IHByaW1lID0gMzE7Iik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludGxuKCJpbnQgaGFzaCA9IDE3OyIpOyAgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKGNvbHVtbnMuaGFzTmV4dCgpKSB7Ci0JCQkJcHcucHJpbnQoImhhc2ggPSBoYXNoICogcHJpbWUgKyAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCQl0aGlzLnByaW50UHJpbWFyeUtleUhhc2hDb2RlQ2xhdXNlT24oY29sdW1ucy5uZXh0KCksIHB3KTsKLQkJCQlwdy5wcmludCgnOycpOwotCQkJCXB3LnByaW50bG4oKTsKLQkJCX0KLQkJCXB3LnByaW50bG4oInJldHVybiBoYXNoOyIpOyAgLy8kTk9OLU5MUy0xJAotCQlwdy51bmRlbnQoKTsKLQkJcHcucHJpbnQoJ30nKTsKLQkJcHcucHJpbnRsbigpOwotCQlwdy5wcmludGxuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50UHJpbWFyeUtleUhhc2hDb2RlQ2xhdXNlT24oQ29sdW1uIGNvbHVtbiwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCVN0cmluZyBmaWVsZE5hbWUgPSB0aGlzLmdlblRhYmxlLmdldEF0dHJpYnV0ZU5hbWVGb3IoY29sdW1uKTsKLQkJSmF2YVR5cGUgamF2YVR5cGUgPSBjb2x1bW4uZ2V0UHJpbWFyeUtleUphdmFUeXBlKCk7Ci0JCWlmIChqYXZhVHlwZS5pc1ByaW1pdGl2ZSgpKSB7Ci0JCQl0aGlzLnByaW50UHJpbWl0aXZlSGFzaENvZGVDbGF1c2VPbihqYXZhVHlwZS5nZXRFbGVtZW50VHlwZU5hbWUoKSwgZmllbGROYW1lLCBwdyk7Ci0JCX0gZWxzZSB7Ci0JCQl0aGlzLnByaW50UmVmZXJlbmNlSGFzaENvZGVDbGF1c2VPbihmaWVsZE5hbWUsIHB3KTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludFByaW1pdGl2ZUhhc2hDb2RlQ2xhdXNlT24oU3RyaW5nIHByaW1pdGl2ZU5hbWUsIFN0cmluZyBmaWVsZE5hbWUsIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoImludCIpKSB7ICAvLyROT04tTkxTLTEkCi0JCQkvLyB0aGlzLnZhbHVlCi0JCQlwdy5wcmludCgidGhpcy4iKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KGZpZWxkTmFtZSk7Ci0JCX0gZWxzZSBpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoInNob3J0IikgIC8vJE5PTi1OTFMtMSQKLQkJCQl8fCBwcmltaXRpdmVOYW1lLmVxdWFscygiYnl0ZSIpICAvLyROT04tTkxTLTEkCi0JCQkJfHwgcHJpbWl0aXZlTmFtZS5lcXVhbHMoImNoYXIiKSkgeyAgLy8kTk9OLU5MUy0xJAotCQkJLy8gKChpbnQpIHRoaXMudmFsdWUpICAtIGV4cGxpY2l0IGNhc3QKLQkJCXB3LnByaW50KCIoKGludCkgdGhpcy4iKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KGZpZWxkTmFtZSk7Ci0JCQlwdy5wcmludCgnKScpOwotCQl9IGVsc2UgaWYgKHByaW1pdGl2ZU5hbWUuZXF1YWxzKCJsb25nIikpIHsgIC8vIGNyaWJiZWQgZnJvbSBMb25nI2hhc2hDb2RlKCkgIC8vJE5PTi1OTFMtMSQKLQkJCS8vICgoaW50KSAodGhpcy52YWx1ZSBeICh0aGlzLnZhbHVlID4+PiAzMikpKQotCQkJcHcucHJpbnQoIigoaW50KSAodGhpcy4iKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KGZpZWxkTmFtZSk7Ci0JCQlwdy5wcmludCgiIF4gKHRoaXMuIik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludChmaWVsZE5hbWUpOwotCQkJcHcucHJpbnQoIiA+Pj4gMzIpKSkiKTsgIC8vJE5PTi1OTFMtMSQKLQkJfSBlbHNlIGlmIChwcmltaXRpdmVOYW1lLmVxdWFscygiZmxvYXQiKSkgeyAgLy8gY3JpYmJlZCBmcm9tIEZsb2F0I2hhc2hDb2RlKCkgIC8vJE5PTi1OTFMtMSQKLQkJCS8vIGphdmEubGFuZy5GbG9hdC5mbG9hdFRvSW50Qml0cyh0aGlzLnZhbHVlKQotCQkJcHcucHJpbnRUeXBlRGVjbGFyYXRpb24oImphdmEubGFuZy5GbG9hdCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoIi5mbG9hdFRvSW50Qml0cyh0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoZmllbGROYW1lKTsKLQkJCXB3LnByaW50KCcpJyk7Ci0JCX0gZWxzZSBpZiAocHJpbWl0aXZlTmFtZS5lcXVhbHMoImRvdWJsZSIpKSB7ICAvLyBjcmliYmVkIGZyb20gRG91YmxlI2hhc2hDb2RlKCkgIC8vJE5PTi1OTFMtMSQKLQkJCS8vCSgoaW50KSAoamF2YS5sYW5nLkRvdWJsZS5kb3VibGVUb0xvbmdCaXRzKHRoaXMudmFsdWUpIF4gKGphdmEubGFuZy5Eb3VibGUuZG91YmxlVG9Mb25nQml0cyh0aGlzLnZhbHVlKSA+Pj4gMzIpKSkKLQkJCXB3LnByaW50KCIoKGludCkgKCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRUeXBlRGVjbGFyYXRpb24oImphdmEubGFuZy5Eb3VibGUiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KCIuZG91YmxlVG9Mb25nQml0cyh0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoZmllbGROYW1lKTsKLQkJCXB3LnByaW50KCIpIF4gKCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnRUeXBlRGVjbGFyYXRpb24oImphdmEubGFuZy5Eb3VibGUiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KCIuZG91YmxlVG9Mb25nQml0cyh0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJcHcucHJpbnQoZmllbGROYW1lKTsKLQkJCXB3LnByaW50KCIpID4+PiAzMikpKSIpOyAgLy8kTk9OLU5MUy0xJAotCQl9IGVsc2UgaWYgKHByaW1pdGl2ZU5hbWUuZXF1YWxzKCJib29sZWFuIikpIHsgIC8vJE5PTi1OTFMtMSQKLQkJCS8vICh0aGlzLnZhbHVlID8gMSA6IDApCi0JCQlwdy5wcmludCgiKHRoaXMuIik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludChmaWVsZE5hbWUpOwotCQkJcHcucHJpbnQoIiA/IDEgOiAwKSIpOyAgLy8kTk9OLU5MUy0xJAotCQl9IGVsc2UgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihwcmltaXRpdmVOYW1lKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludFJlZmVyZW5jZUhhc2hDb2RlQ2xhdXNlT24oU3RyaW5nIGZpZWxkTmFtZSwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50KCJ0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQlwdy5wcmludChmaWVsZE5hbWUpOwotCQlwdy5wcmludCgiLmhhc2hDb2RlKCkiKTsgIC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQotCS8vICoqKioqKioqKiogcGFja2FnZSBhbmQgaW1wb3J0cyAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgcHJpbnRQYWNrYWdlQW5kSW1wb3J0c09uKFByaW50V3JpdGVyIHB3LCBCb2R5U291cmNlIGJvZHlTb3VyY2UpIHsKLQkJaWYgKHRoaXMuZ2V0UGFja2FnZU5hbWUoKS5sZW5ndGgoKSAhPSAwKSB7Ci0JCQlwdy5wcmludCgicGFja2FnZSAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXB3LnByaW50KHRoaXMuZ2V0UGFja2FnZU5hbWUoKSk7Ci0JCQlwdy5wcmludCgnOycpOwotCQkJcHcucHJpbnRsbigpOwotCQkJcHcucHJpbnRsbigpOwotCQl9Ci0KLQkJZm9yIChJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+PiBzdHJlYW0gPSBib2R5U291cmNlLmltcG9ydEVudHJpZXMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQlNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5ID0gc3RyZWFtLm5leHQoKTsKLQkJCXB3LnByaW50KCJpbXBvcnQgIik7ICAvLyROT04tTkxTLTEkCi0JCQlwdy5wcmludChlbnRyeS5nZXRWYWx1ZSgpKTsgIC8vIHBhY2thZ2UKLQkJCXB3LnByaW50KCcuJyk7Ci0JCQlwdy5wcmludChlbnRyeS5nZXRLZXkoKSk7ICAvLyBzaG9ydCBjbGFzcyBuYW1lCi0JCQlwdy5wcmludCgnOycpOwotCQkJcHcucHJpbnRsbigpOwotCQl9Ci0JCXB3LnByaW50bG4oKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogZmllbGRzICoqKioqKioqKioKLQotCS8qKgotCSAqIHZpc2liaWxpdHkgaXMgc2V0IGluIHRoZSBjb25maWcKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJpbnRGaWVsZE9uKFN0cmluZyBmaWVsZE5hbWUsIFN0cmluZyB0eXBlRGVjbGFyYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludEZpZWxkKAotCQkJCWZpZWxkTmFtZSwKLQkJCQl0eXBlRGVjbGFyYXRpb24sCi0JCQkJdGhpcy5jb25maWcuZ2V0RmllbGRWaXNpYmlsaXR5Q2xhdXNlKCkKLQkJKTsKLQl9Ci0KLQkvKioKLQkgKiB2aXNpYmlsaXR5IGFuZCBjb2xsZWN0aW9uIHR5cGUgYXJlIHNldCBpbiB0aGUgY29uZmlnCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Q29sbGVjdGlvbkZpZWxkT24oU3RyaW5nIGZpZWxkTmFtZSwgU3RyaW5nIGVsZW1lbnRUeXBlRGVjbGFyYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludFBhcmFtZXRlcml6ZWRGaWVsZCgKLQkJCQlmaWVsZE5hbWUsCi0JCQkJdGhpcy5jb25maWcuZ2V0Q29sbGVjdGlvblR5cGVOYW1lKCksCi0JCQkJZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwKLQkJCQl0aGlzLmNvbmZpZy5nZXRGaWVsZFZpc2liaWxpdHlDbGF1c2UoKQotCQkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBwcm9wZXJ0aWVzICoqKioqKioqKioKLQotCS8qKgotCSAqIHZpc2liaWxpdHkgaXMgc2V0IGluIHRoZSBjb25maWcKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJpbnRQcm9wZXJ0eU9uKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFN0cmluZyB0eXBlRGVjbGFyYXRpb24sIEVudGl0eVNvdXJjZVdyaXRlciBwdykgewotCQlwdy5wcmludEdldHRlckFuZFNldHRlcigKLQkJCQlwcm9wZXJ0eU5hbWUsCi0JCQkJdHlwZURlY2xhcmF0aW9uLAotCQkJCXRoaXMuY29uZmlnLmdldE1ldGhvZFZpc2liaWxpdHlDbGF1c2UoKQotCQkpOwotCX0KLQotCS8qKgotCSAqIHZpc2liaWxpdHkgYW5kIGNvbGxlY3Rpb24gdHlwZSBhcmUgc2V0IGluIHRoZSBjb25maWcKLQkgKi8KLQlwcml2YXRlIHZvaWQgcHJpbnRDb2xsZWN0aW9uUHJvcGVydHlPbihTdHJpbmcgcHJvcGVydHlOYW1lLCBTdHJpbmcgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwgRW50aXR5U291cmNlV3JpdGVyIHB3KSB7Ci0JCXB3LnByaW50Q29sbGVjdGlvbkdldHRlckFuZFNldHRlcigKLQkJCQlwcm9wZXJ0eU5hbWUsCi0JCQkJdGhpcy5jb25maWcuZ2V0Q29sbGVjdGlvblR5cGVOYW1lKCksCi0JCQkJZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwKLQkJCQl0aGlzLmNvbmZpZy5nZXRNZXRob2RWaXNpYmlsaXR5Q2xhdXNlKCkKLQkJKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogY29udmVuaWVuY2UgbWV0aG9kcyAqKioqKioqKioqCi0KLQlwcml2YXRlIFN0cmluZyBnZXRQYWNrYWdlTmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMucGFja2FnZUZyYWdtZW50LmdldEVsZW1lbnROYW1lKCk7Ci0JfQotCi0JcHJpdmF0ZSBUYWJsZSBnZXRUYWJsZSgpIHsKLQkJcmV0dXJuIHRoaXMuZ2VuVGFibGUuZ2V0VGFibGUoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRFbnRpdHlOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5nZW5UYWJsZS5nZXRFbnRpdHlOYW1lKCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIHByaW1hcnlLZXlDbGFzc0lzUmVxdWlyZWQoKSB7Ci0JCXJldHVybiB0aGlzLmdldFRhYmxlKCkucHJpbWFyeUtleUNvbHVtbnNTaXplKCkgPiAxOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGZ1bGx5UXVhbGlmeShTdHJpbmcgc2hvcnRDbGFzc05hbWUpIHsKLQkJU3RyaW5nIHBrZyA9IHRoaXMuZ2V0UGFja2FnZU5hbWUoKTsKLQkJcmV0dXJuIChwa2cubGVuZ3RoKCkgPT0gMCkgPyBzaG9ydENsYXNzTmFtZSA6IHBrZyArICcuJyArIHNob3J0Q2xhc3NOYW1lOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuZ2VuVGFibGUuZ2V0TmFtZSgpICsgIiA9PiAiICsgdGhpcy5lbnRpdHlDbGFzc05hbWUpOyAgLy8kTk9OLU5MUy0xJAotCX0KLQotCi0JLy8gKioqKioqKioqKiBzb3VyY2Ugd3JpdGVyICoqKioqKioqKioKLQotCXByaXZhdGUgaW50ZXJmYWNlIEJvZHlTb3VyY2UgewotCi0JCS8qKgotCQkgKiByZXR1cm4gYSBzb3J0ZWQgc2V0IG9mIG1hcCBlbnRyaWVzOyB0aGUga2V5IGlzIHRoZSBzaG9ydCBjbGFzcyBuYW1lLAotCQkgKiB0aGUgdmFsdWUgaXMgdGhlIHBhY2thZ2UgbmFtZQotCQkgKi8KLQkJSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPj4gaW1wb3J0RW50cmllcygpOwotCi0JCS8qKgotCQkgKiByZXR1cm4gdGhlIGJvZHkgc291cmNlIGNvZGUKLQkJICovCi0JCVN0cmluZyBnZXRTb3VyY2UoKTsKLQotCQkvKioKLQkJICogcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGJvZHkgc291cmNlIGNvZGUKLQkJICovCi0JCWludCBsZW5ndGgoKTsKLQotCX0KLQotCS8qKgotCSAqIEV4dGVuZCBJbmRlbnRpbmdQcmludFdyaXRlciB3aXRoIHNvbWUgbWV0aG9kcyB0aGF0IGZhY2lsaXRhdGUgYnVpbGRpbmcKLQkgKiBjbGFzcyBzb3VyY2UgY29kZS4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBFbnRpdHlTb3VyY2VXcml0ZXIgZXh0ZW5kcyBJbmRlbnRpbmdQcmludFdyaXRlciBpbXBsZW1lbnRzIEJvZHlTb3VyY2UgewotCQlmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWU7Ci0JCWZpbmFsIFN0cmluZyBjbGFzc05hbWU7Ci0JCS8vIGtleSA9IHNob3J0IGNsYXNzIG5hbWU7IHZhbHVlID0gcGFja2FnZSBuYW1lCi0JCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBpbXBvcnRzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkJRW50aXR5U291cmNlV3JpdGVyKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIGNsYXNzTmFtZSkgewotCQkJc3VwZXIobmV3IFN0cmluZ1dyaXRlcigyMDAwMCkpOwotCQkJdGhpcy5wYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwotCQkJdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQ29udmVydCB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byBhIFN0cmluZyBMaXRlcmFsIGFuZCBwcmludCBpdCwKLQkJICogYWRkaW5nIHRoZSBzdXJyb3VuZGluZyBkb3VibGUtcXVvdGVzIGFuZCBlc2NhcGluZyBjaGFyYWN0ZXJzCi0JCSAqIGFzIG5lY2Vzc2FyeS4KLQkJICovCi0JCXZvaWQgcHJpbnRTdHJpbmdMaXRlcmFsKFN0cmluZyBzdHJpbmcpIHsKLQkJCVN0cmluZ1Rvb2xzLmNvbnZlcnRUb0phdmFTdHJpbmdMaXRlcmFsT24oc3RyaW5nLCB0aGlzKTsKLQkJfQotCi0JCXZvaWQgcHJpbnRWaXNpYmlsaXR5KFN0cmluZyB2aXNpYmlsaXR5TW9kaWZpZXIpIHsKLQkJCWlmICh2aXNpYmlsaXR5TW9kaWZpZXIubGVuZ3RoKCkgIT0gMCkgewotCQkJCXRoaXMucHJpbnQodmlzaWJpbGl0eU1vZGlmaWVyKTsKLQkJCQl0aGlzLnByaW50KCcgJyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIHByaW50QW5ub3RhdGlvbihTdHJpbmcgYW5ub3RhdGlvbk5hbWUpIHsKLQkJCXRoaXMucHJpbnQoJ0AnKTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24oYW5ub3RhdGlvbk5hbWUpOwotCQl9Ci0KLQkJdm9pZCBwcmludFR5cGVEZWNsYXJhdGlvbihTdHJpbmcgdHlwZURlY2xhcmF0aW9uKSB7Ci0JCQl0aGlzLnByaW50KHRoaXMuYnVpbGRJbXBvcnRlZFR5cGVEZWNsYXJhdGlvbih0eXBlRGVjbGFyYXRpb24pKTsKLQkJfQotCi0JCS8qKgotCQkgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBjbGFzcydzICJpbXBvcnRlZCIgbmFtZS4KLQkJICogVGhlIGNsYXNzIGRlY2xhcmF0aW9uIG11c3QgYmUgb2YgdGhlIGZvcm06Ci0JCSAqICAgICAiaW50IgotCQkgKiAgICAgImludFtdIiAobm90ICJbSSIpCi0JCSAqICAgICAiamF2YS5sYW5nLk9iamVjdCIKLQkJICogICAgICJqYXZhLmxhbmcuT2JqZWN0W10iIChub3QgIltMamF2YS5sYW5nLk9iamVjdDsiKQotCQkgKiAgICAgImphdmEudXRpbC5NYXAuRW50cnkiIChub3QgImphdmEudXRpbC5NYXAkRW50cnkiKQotCQkgKiAgICAgImphdmEudXRpbC5NYXAuRW50cnlbXVtdIiAobm90ICJbW0xqYXZhLnV0aWwuTWFwJEVudHJ5OyIpCi0JCSAqLwotCQlwcml2YXRlIFN0cmluZyBidWlsZEltcG9ydGVkVHlwZURlY2xhcmF0aW9uKFN0cmluZyB0eXBlRGVjbGFyYXRpb24pIHsKLQkJCWlmICh0aGlzLnR5cGVEZWNsYXJhdGlvbklzTWVtYmVyQ2xhc3ModHlwZURlY2xhcmF0aW9uKSkgewotCQkJCS8vIG5vIG5lZWQgZm9yIGFuIGltcG9ydCwganVzdCByZXR1cm4gdGhlIHBhcnRpYWxseS1xdWFsaWZpZWQgbmFtZQotCQkJCXJldHVybiB0aGlzLmJ1aWxkTWVtYmVyQ2xhc3NUeXBlRGVjbGFyYXRpb24odHlwZURlY2xhcmF0aW9uKTsKLQkJCX0KLQkJCWludCBsYXN0ID0gdHlwZURlY2xhcmF0aW9uLmxhc3RJbmRleE9mKCcuJyk7Ci0JCQlTdHJpbmcgcGtnID0gKGxhc3QgPT0gLTEpID8gIiIgOiB0eXBlRGVjbGFyYXRpb24uc3Vic3RyaW5nKDAsIGxhc3QpOyAgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHNob3J0VHlwZURlY2xhcmF0aW9uID0gdHlwZURlY2xhcmF0aW9uLnN1YnN0cmluZyhsYXN0ICsgMSk7Ci0JCQlTdHJpbmcgc2hvcnRFbGVtZW50VHlwZU5hbWUgPSBzaG9ydFR5cGVEZWNsYXJhdGlvbjsKLQkJCXdoaWxlIChzaG9ydEVsZW1lbnRUeXBlTmFtZS5lbmRzV2l0aCgiW10iKSkgeyAgLy8kTk9OLU5MUy0xJAotCQkJCXNob3J0RWxlbWVudFR5cGVOYW1lID0gc2hvcnRFbGVtZW50VHlwZU5hbWUuc3Vic3RyaW5nKDAsIHNob3J0RWxlbWVudFR5cGVOYW1lLmxlbmd0aCgpIC0gMik7Ci0JCQl9Ci0JCQlTdHJpbmcgcHJldiA9IHRoaXMuaW1wb3J0cy5nZXQoc2hvcnRFbGVtZW50VHlwZU5hbWUpOwotCQkJaWYgKHByZXYgPT0gbnVsbCkgewotCQkJCS8vIHRoaXMgaXMgdGhlIGZpcnN0IGNsYXNzIHdpdGggdGhpcyBzaG9ydCBlbGVtZW50IHR5cGUgbmFtZQotCQkJCXRoaXMuaW1wb3J0cy5wdXQoc2hvcnRFbGVtZW50VHlwZU5hbWUsIHBrZyk7Ci0JCQkJcmV0dXJuIHNob3J0VHlwZURlY2xhcmF0aW9uOwotCQkJfQotCQkJaWYgKHByZXYuZXF1YWxzKHBrZykpIHsKLQkJCQkvLyB0aGlzIGVsZW1lbnQgdHlwZSBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkCi0JCQkJcmV0dXJuIHNob3J0VHlwZURlY2xhcmF0aW9uOwotCQkJfQotCQkJLy8gYW5vdGhlciBjbGFzcyB3aXRoIHRoZSBzYW1lIHNob3J0IGVsZW1lbnQgdHlwZSBuYW1lIGhhcyBiZWVuCi0JCQkvLyBwcmV2aW91c2x5IGltcG9ydGVkLCBzbyB0aGlzIG9uZSBtdXN0IGJlIHVzZWQgZnVsbHktcXVhbGlmaWVkCi0JCQlyZXR1cm4gdHlwZURlY2xhcmF0aW9uOwotCQl9Ci0KLQkJLyoqCi0JCSAqIGUuZy4gImZvby5iYXIuRW1wbG95ZWUuUEsiIHdpbGwgcmV0dXJuIHRydWUKLQkJICovCi0JCXByaXZhdGUgYm9vbGVhbiB0eXBlRGVjbGFyYXRpb25Jc01lbWJlckNsYXNzKFN0cmluZyB0eXBlRGVjbGFyYXRpb24pIHsKLQkJCXJldHVybiAodHlwZURlY2xhcmF0aW9uLmxlbmd0aCgpID4gdGhpcy5jbGFzc05hbWUubGVuZ3RoKCkpCi0JCQkJCSYmIHR5cGVEZWNsYXJhdGlvbi5zdGFydHNXaXRoKHRoaXMuY2xhc3NOYW1lKQotCQkJCQkmJiAodHlwZURlY2xhcmF0aW9uLmNoYXJBdCh0aGlzLmNsYXNzTmFtZS5sZW5ndGgoKSkgPT0gJy4nKTsKLQkJfQotCi0JCS8qKgotCQkgKiBlLmcuICJmb28uYmFyLkVtcGxveWVlLlBLIiB3aWxsIHJldHVybiAiRW1wbG95ZWUuUEsiCi0JCSAqIHRoaXMgcHJldmVudHMgY29sbGlzaW9ucyB3aXRoIG90aGVyIGltcG9ydGVkIGNsYXNzZXMgKGUuZy4gImpvby5qYXIuUEsiKQotCQkgKi8KLQkJcHJpdmF0ZSBTdHJpbmcgYnVpbGRNZW1iZXJDbGFzc1R5cGVEZWNsYXJhdGlvbihTdHJpbmcgdHlwZURlY2xhcmF0aW9uKSB7Ci0JCQlpbnQgaW5kZXggPSB0aGlzLnBhY2thZ2VOYW1lLmxlbmd0aCgpOwotCQkJaWYgKGluZGV4ICE9IDApIHsKLQkJCQlpbmRleCsrOyAgLy8gYnVtcCBwYXN0IHRoZSAnLicKLQkJCX0KLQkJCXJldHVybiB0eXBlRGVjbGFyYXRpb24uc3Vic3RyaW5nKGluZGV4KTsKLQkJfQotCi0JCXByaXZhdGUgSXRlcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPj4gc29ydGVkSW1wb3J0RW50cmllcygpIHsKLQkJCVRyZWVTZXQ8TWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPj4gc29ydGVkSW1wb3J0cyA9IG5ldyBUcmVlU2V0PE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4+KHRoaXMuYnVpbGRJbXBvcnRFbnRyaWVzQ29tcGFyYXRvcigpKTsKLQkJCXNvcnRlZEltcG9ydHMuYWRkQWxsKHRoaXMuaW1wb3J0cy5lbnRyeVNldCgpKTsKLQkJCXJldHVybiBzb3J0ZWRJbXBvcnRzLml0ZXJhdG9yKCk7Ci0JCX0KLQotCQlwcml2YXRlIENvbXBhcmF0b3I8TWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPj4gYnVpbGRJbXBvcnRFbnRyaWVzQ29tcGFyYXRvcigpIHsKLQkJCXJldHVybiBuZXcgQ29tcGFyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+PigpIHsKLQkJCQlwdWJsaWMgaW50IGNvbXBhcmUoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlMSwgTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlMikgewotCQkJCQlDb2xsYXRvciBjb2xsYXRvciA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7Ci0JCQkJCWludCBwa2cgPSBjb2xsYXRvci5jb21wYXJlKGUxLmdldFZhbHVlKCksIGUyLmdldFZhbHVlKCkpOwotCQkJCQlyZXR1cm4gKHBrZyA9PSAwKSA/IGNvbGxhdG9yLmNvbXBhcmUoZTEuZ2V0S2V5KCksIGUyLmdldEtleSgpKSA6IHBrZzsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0KLQkJdm9pZCBwcmludEZpZWxkKFN0cmluZyBmaWVsZE5hbWUsIFN0cmluZyB0eXBlRGVjbGFyYXRpb24sIFN0cmluZyB2aXNpYmlsaXR5KSB7Ci0JCQl0aGlzLnByaW50VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24odHlwZURlY2xhcmF0aW9uKTsKLQkJCXRoaXMucHJpbnQoJyAnKTsKLQkJCXRoaXMucHJpbnQoZmllbGROYW1lKTsKLQkJCXRoaXMucHJpbnQoJzsnKTsKLQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy5wcmludGxuKCk7Ci0JCX0KLQotCQl2b2lkIHByaW50UGFyYW1ldGVyaXplZEZpZWxkKFN0cmluZyBmaWVsZE5hbWUsIFN0cmluZyB0eXBlRGVjbGFyYXRpb24sIFN0cmluZyBwYXJhbWV0ZXJUeXBlRGVjbGFyYXRpb24sIFN0cmluZyB2aXNpYmlsaXR5KSB7Ci0JCQl0aGlzLnByaW50VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24odHlwZURlY2xhcmF0aW9uKTsKLQkJCXRoaXMucHJpbnQoJzwnKTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24ocGFyYW1ldGVyVHlwZURlY2xhcmF0aW9uKTsKLQkJCXRoaXMucHJpbnQoJz4nKTsKLQkJCXRoaXMucHJpbnQoJyAnKTsKLQkJCXRoaXMucHJpbnQoZmllbGROYW1lKTsKLQkJCXRoaXMucHJpbnQoJzsnKTsKLQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy5wcmludGxuKCk7Ci0JCX0KLQotCQl2b2lkIHByaW50R2V0dGVyQW5kU2V0dGVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFN0cmluZyB0eXBlRGVjbGFyYXRpb24sIFN0cmluZyB2aXNpYmlsaXR5KSB7Ci0JCQl0aGlzLnByaW50R2V0dGVyKHByb3BlcnR5TmFtZSwgdHlwZURlY2xhcmF0aW9uLCB2aXNpYmlsaXR5KTsKLQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy5wcmludGxuKCk7Ci0KLQkJCXRoaXMucHJpbnRTZXR0ZXIocHJvcGVydHlOYW1lLCB0eXBlRGVjbGFyYXRpb24sIHZpc2liaWxpdHkpOwotCQkJdGhpcy5wcmludGxuKCk7Ci0JCQl0aGlzLnByaW50bG4oKTsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBwcmludEdldHRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBTdHJpbmcgdHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgdmlzaWJpbGl0eSkgewotCQkJdGhpcy5wcmludFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0JCQl0aGlzLnByaW50VHlwZURlY2xhcmF0aW9uKHR5cGVEZWNsYXJhdGlvbik7Ci0JCQl0aGlzLnByaW50KCcgJyk7Ci0JCQl0aGlzLnByaW50KHR5cGVEZWNsYXJhdGlvbi5lcXVhbHMoImJvb2xlYW4iKSA/ICJpcyIgOiAiZ2V0Iik7ICAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQkJdGhpcy5wcmludChTdHJpbmdUb29scy5jYXBpdGFsaXplKHByb3BlcnR5TmFtZSkpOwotCQkJdGhpcy5wcmludCgiKCkgeyIpOyAgLy8kTk9OLU5MUy0xJAotCQkJdGhpcy5wcmludGxuKCk7Ci0KLQkJCXRoaXMuaW5kZW50KCk7Ci0JCQkJdGhpcy5wcmludCgicmV0dXJuIHRoaXMuIik7ICAvLyROT04tTkxTLTEkCi0JCQkJdGhpcy5wcmludChwcm9wZXJ0eU5hbWUpOwotCQkJCXRoaXMucHJpbnQoJzsnKTsKLQkJCQl0aGlzLnByaW50bG4oKTsKLQkJCXRoaXMudW5kZW50KCk7Ci0KLQkJCXRoaXMucHJpbnQoJ30nKTsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBwcmludFNldHRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBTdHJpbmcgdHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgdmlzaWJpbGl0eSkgewotCQkJdGhpcy5wcmludFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0JCQl0aGlzLnByaW50KCJ2b2lkIHNldCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJdGhpcy5wcmludChTdHJpbmdUb29scy5jYXBpdGFsaXplKHByb3BlcnR5TmFtZSkpOwotCQkJdGhpcy5wcmludCgnKCcpOwotCQkJdGhpcy5wcmludFR5cGVEZWNsYXJhdGlvbih0eXBlRGVjbGFyYXRpb24pOwotCQkJdGhpcy5wcmludCgnICcpOwotCQkJdGhpcy5wcmludChwcm9wZXJ0eU5hbWUpOwotCQkJdGhpcy5wcmludCgiKSB7Iik7ICAvLyROT04tTkxTLTEkCi0JCQl0aGlzLnByaW50bG4oKTsKLQotCQkJdGhpcy5pbmRlbnQoKTsKLQkJCQl0aGlzLnByaW50KCJ0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJCXRoaXMucHJpbnQocHJvcGVydHlOYW1lKTsKLQkJCQl0aGlzLnByaW50KCIgPSAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCQl0aGlzLnByaW50KHByb3BlcnR5TmFtZSk7Ci0JCQkJdGhpcy5wcmludCgnOycpOwotCQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy51bmRlbnQoKTsKLQotCQkJdGhpcy5wcmludCgnfScpOwotCQl9Ci0KLQkJdm9pZCBwcmludENvbGxlY3Rpb25HZXR0ZXJBbmRTZXR0ZXIoU3RyaW5nIHByb3BlcnR5TmFtZSwgU3RyaW5nIGNvbGxlY3Rpb25UeXBlRGVjbGFyYXRpb24sIFN0cmluZyBlbGVtZW50VHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgdmlzaWJpbGl0eSkgewotCQkJdGhpcy5wcmludENvbGxlY3Rpb25HZXR0ZXIocHJvcGVydHlOYW1lLCBjb2xsZWN0aW9uVHlwZURlY2xhcmF0aW9uLCBlbGVtZW50VHlwZURlY2xhcmF0aW9uLCB2aXNpYmlsaXR5KTsKLQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy5wcmludGxuKCk7Ci0KLQkJCXRoaXMucHJpbnRDb2xsZWN0aW9uU2V0dGVyKHByb3BlcnR5TmFtZSwgY29sbGVjdGlvblR5cGVEZWNsYXJhdGlvbiwgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwgdmlzaWJpbGl0eSk7Ci0JCQl0aGlzLnByaW50bG4oKTsKLQkJCXRoaXMucHJpbnRsbigpOwotCQl9Ci0KLQkJcHJpdmF0ZSB2b2lkIHByaW50Q29sbGVjdGlvbkdldHRlcihTdHJpbmcgcHJvcGVydHlOYW1lLCBTdHJpbmcgY29sbGVjdGlvblR5cGVEZWNsYXJhdGlvbiwgU3RyaW5nIGVsZW1lbnRUeXBlRGVjbGFyYXRpb24sIFN0cmluZyB2aXNpYmlsaXR5KSB7Ci0JCQl0aGlzLnByaW50VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24oY29sbGVjdGlvblR5cGVEZWNsYXJhdGlvbik7Ci0JCQl0aGlzLnByaW50KCc8Jyk7Ci0JCQl0aGlzLnByaW50VHlwZURlY2xhcmF0aW9uKGVsZW1lbnRUeXBlRGVjbGFyYXRpb24pOwotCQkJdGhpcy5wcmludCgiPiBnZXQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXRoaXMucHJpbnQoU3RyaW5nVG9vbHMuY2FwaXRhbGl6ZShwcm9wZXJ0eU5hbWUpKTsKLQkJCXRoaXMucHJpbnQoIigpIHsiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXRoaXMucHJpbnRsbigpOwotCi0JCQl0aGlzLmluZGVudCgpOwotCQkJCXRoaXMucHJpbnQoInJldHVybiB0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJCXRoaXMucHJpbnQocHJvcGVydHlOYW1lKTsKLQkJCQl0aGlzLnByaW50KCc7Jyk7Ci0JCQkJdGhpcy5wcmludGxuKCk7Ci0JCQl0aGlzLnVuZGVudCgpOwotCi0JCQl0aGlzLnByaW50KCd9Jyk7Ci0JCX0KLQotCQlwcml2YXRlIHZvaWQgcHJpbnRDb2xsZWN0aW9uU2V0dGVyKFN0cmluZyBwcm9wZXJ0eU5hbWUsIFN0cmluZyBjb2xsZWN0aW9uVHlwZURlY2xhcmF0aW9uLCBTdHJpbmcgZWxlbWVudFR5cGVEZWNsYXJhdGlvbiwgU3RyaW5nIHZpc2liaWxpdHkpIHsKLQkJCXRoaXMucHJpbnRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotCQkJdGhpcy5wcmludCgidm9pZCBzZXQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXRoaXMucHJpbnQoU3RyaW5nVG9vbHMuY2FwaXRhbGl6ZShwcm9wZXJ0eU5hbWUpKTsKLQkJCXRoaXMucHJpbnQoJygnKTsKLQkJCXRoaXMucHJpbnRUeXBlRGVjbGFyYXRpb24oY29sbGVjdGlvblR5cGVEZWNsYXJhdGlvbik7Ci0JCQl0aGlzLnByaW50KCc8Jyk7Ci0JCQl0aGlzLnByaW50VHlwZURlY2xhcmF0aW9uKGVsZW1lbnRUeXBlRGVjbGFyYXRpb24pOwotCQkJdGhpcy5wcmludCgnPicpOwotCQkJdGhpcy5wcmludCgnICcpOwotCQkJdGhpcy5wcmludChwcm9wZXJ0eU5hbWUpOwotCQkJdGhpcy5wcmludCgiKSB7Iik7ICAvLyROT04tTkxTLTEkCi0JCQl0aGlzLnByaW50bG4oKTsKLQotCQkJdGhpcy5pbmRlbnQoKTsKLQkJCQl0aGlzLnByaW50KCJ0aGlzLiIpOyAgLy8kTk9OLU5MUy0xJAotCQkJCXRoaXMucHJpbnQocHJvcGVydHlOYW1lKTsKLQkJCQl0aGlzLnByaW50KCIgPSAiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCQl0aGlzLnByaW50KHByb3BlcnR5TmFtZSk7Ci0JCQkJdGhpcy5wcmludCgnOycpOwotCQkJCXRoaXMucHJpbnRsbigpOwotCQkJdGhpcy51bmRlbnQoKTsKLQotCQkJdGhpcy5wcmludCgnfScpOwotCQl9Ci0KLQotCQkvLyAqKioqKioqKioqIEJvZHlTb3VyY2UgaW1wbGVtZW50YXRpb24gKioqKioqKioqKgotCi0JCXB1YmxpYyBJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+PiBpbXBvcnRFbnRyaWVzKCkgewotCQkJcmV0dXJuIG5ldyBGaWx0ZXJpbmdJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+LCBNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+Pih0aGlzLnNvcnRlZEltcG9ydEVudHJpZXMoKSkgewotCQkJCUBPdmVycmlkZQotCQkJCXByb3RlY3RlZCBib29sZWFuIGFjY2VwdChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IG5leHQpIHsKLQkJCQkJU3RyaW5nIHBrZyA9IG5leHQuZ2V0VmFsdWUoKTsKLQkJCQkJaWYgKHBrZy5lcXVhbHMoIiIpICAvLyROT04tTkxTLTEkCi0JCQkJCQkJfHwgcGtnLmVxdWFscygiamF2YS5sYW5nIikgIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl8fCBwa2cuZXF1YWxzKEVudGl0eVNvdXJjZVdyaXRlci50aGlzLnBhY2thZ2VOYW1lKSkgewotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCQl9Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX07Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldFNvdXJjZSgpIHsKLQkJCXJldHVybiB0aGlzLm91dC50b1N0cmluZygpOwotCQl9Ci0KLQkJcHVibGljIGludCBsZW5ndGgoKSB7Ci0JCQlyZXR1cm4gKChTdHJpbmdXcml0ZXIpIHRoaXMub3V0KS5nZXRCdWZmZXIoKS5sZW5ndGgoKTsKLQkJfQotCi0JfQotCi0KLQkvLyAqKioqKioqKioqIGNvbmZpZyAqKioqKioqKioqCi0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIENvbmZpZyB7Ci0JCXByaXZhdGUgYm9vbGVhbiBjb252ZXJ0VG9KYXZhU3R5bGVJZGVudGlmaWVycyA9IHRydWU7Ci0KLQkJcHJpdmF0ZSBib29sZWFuIHByb3BlcnR5QWNjZXNzVHlwZSA9IGZhbHNlOyAgLy8gYXMgb3Bwb3NlZCB0byAiZmllbGQiCi0KLQkJcHJpdmF0ZSBTdHJpbmcgY29sbGVjdGlvblR5cGVOYW1lID0gU2V0LmNsYXNzLmdldE5hbWUoKTsKLQkJcHJpdmF0ZSBTdHJpbmcgY29sbGVjdGlvbkF0dHJpYnV0ZU5hbWVTdWZmaXggPSAiQ29sbGVjdGlvbiI7ICAvLyBlLmcuICJwcml2YXRlIFNldDxGb28+IGZvb0NvbGxlY3Rpb24iICAvLyROT04tTkxTLTEkCi0KLQkJcHJpdmF0ZSBpbnQgZmllbGRWaXNpYmlsaXR5ID0gTW9kaWZpZXIuUFJJVkFURTsKLQkJcHJpdmF0ZSBpbnQgbWV0aG9kVmlzaWJpbGl0eSA9IE1vZGlmaWVyLlBVQkxJQzsKLQotCQlwcml2YXRlIGJvb2xlYW4gZ2VuZXJhdGVHZXR0ZXJzQW5kU2V0dGVycyA9IHRydWU7Ci0JCXByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciA9IHRydWU7Ci0KLQkJcHJpdmF0ZSBib29sZWFuIHNlcmlhbGl6YWJsZSA9IHRydWU7Ci0JCXByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZVNlcmlhbFZlcnNpb25VSUQgPSB0cnVlOwotCi0JCXByaXZhdGUgYm9vbGVhbiBnZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLID0gdHJ1ZTsgIC8vIGFzIG9wcG9zZWQgdG8gSWRDbGFzcwotCQlwcml2YXRlIFN0cmluZyBlbWJlZGRlZElkQXR0cmlidXRlTmFtZSA9ICJwayI7ICAvLyROT04tTkxTLTEkCi0JCXByaXZhdGUgU3RyaW5nIHByaW1hcnlLZXlNZW1iZXJDbGFzc05hbWUgPSAiUEsiOyAgLy8kTk9OLU5MUy0xJAotCi0JCS8qKgotCQkgKiBrZXkgPSB0YWJsZQotCQkgKiB2YWx1ZSA9IGVudGl0eSBuYW1lCi0JCSAqLwotCQlwcml2YXRlIEhhc2hNYXA8VGFibGUsIFN0cmluZz4gdGFibGVzID0gbmV3IEhhc2hNYXA8VGFibGUsIFN0cmluZz4oKTsKLQotCQlwcml2YXRlIERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyIGRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyID0gRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIuRGVmYXVsdC5JTlNUQU5DRTsKLQotCQlwcml2YXRlIE92ZXJ3cml0ZUNvbmZpcm1lciBvdmVyd3JpdGVDb25maXJtZXIgPSBPdmVyd3JpdGVDb25maXJtZXIuTmV2ZXIuSU5TVEFOQ0U7Ci0KLQkJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURSA9IDA7Ci0JCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBQ0tBR0UgPSAxOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9URUNURUQgPSAyOwotCQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQVUJMSUMgPSAzOwotCi0KLQkJcHVibGljIGJvb2xlYW4gY29udmVydFRvSmF2YVN0eWxlSWRlbnRpZmllcnMoKSB7Ci0JCQlyZXR1cm4gdGhpcy5jb252ZXJ0VG9KYXZhU3R5bGVJZGVudGlmaWVyczsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRDb252ZXJ0VG9KYXZhU3R5bGVJZGVudGlmaWVycyhib29sZWFuIGNvbnZlcnRUb0phdmFTdHlsZUlkZW50aWZpZXJzKSB7Ci0JCQl0aGlzLmNvbnZlcnRUb0phdmFTdHlsZUlkZW50aWZpZXJzID0gY29udmVydFRvSmF2YVN0eWxlSWRlbnRpZmllcnM7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBwcm9wZXJ0eUFjY2Vzc1R5cGUoKSB7Ci0JCQlyZXR1cm4gdGhpcy5wcm9wZXJ0eUFjY2Vzc1R5cGU7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0UHJvcGVydHlBY2Nlc3NUeXBlKGJvb2xlYW4gcHJvcGVydHlBY2Nlc3NUeXBlKSB7Ci0JCQl0aGlzLnByb3BlcnR5QWNjZXNzVHlwZSA9IHByb3BlcnR5QWNjZXNzVHlwZTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGZpZWxkQWNjZXNzVHlwZSgpIHsKLQkJCXJldHVybiAhIHRoaXMucHJvcGVydHlBY2Nlc3NUeXBlOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldEZpZWxkQWNjZXNzVHlwZShib29sZWFuIGZpZWxkQWNjZXNzVHlwZSkgewotCQkJdGhpcy5wcm9wZXJ0eUFjY2Vzc1R5cGUgPSAhIGZpZWxkQWNjZXNzVHlwZTsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0Q29sbGVjdGlvblR5cGVOYW1lKCkgewotCQkJcmV0dXJuIHRoaXMuY29sbGVjdGlvblR5cGVOYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldENvbGxlY3Rpb25UeXBlTmFtZShTdHJpbmcgY29sbGVjdGlvblR5cGVOYW1lKSB7Ci0JCQl0aGlzLmNoZWNrUmVxdWlyZWRTdHJpbmcoY29sbGVjdGlvblR5cGVOYW1lLCAiY29sbGVjdGlvbiB0eXBlIG5hbWUgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCXRoaXMuY29sbGVjdGlvblR5cGVOYW1lID0gY29sbGVjdGlvblR5cGVOYW1lOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRDb2xsZWN0aW9uQXR0cmlidXRlTmFtZVN1ZmZpeCgpIHsKLQkJCXJldHVybiB0aGlzLmNvbGxlY3Rpb25BdHRyaWJ1dGVOYW1lU3VmZml4OwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldENvbGxlY3Rpb25BdHRyaWJ1dGVOYW1lU3VmZml4KFN0cmluZyBjb2xsZWN0aW9uQXR0cmlidXRlTmFtZVN1ZmZpeCkgewotCQkJdGhpcy5jb2xsZWN0aW9uQXR0cmlidXRlTmFtZVN1ZmZpeCA9IGNvbGxlY3Rpb25BdHRyaWJ1dGVOYW1lU3VmZml4OwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRGaWVsZFZpc2liaWxpdHkoKSB7Ci0JCQlyZXR1cm4gdGhpcy5maWVsZFZpc2liaWxpdHk7Ci0JCX0KLQkJLyoqIGVudGl0eSBmaWVsZHMgY2Fubm90IGJlICdwdWJsaWMnICovCi0JCXB1YmxpYyB2b2lkIHNldEZpZWxkVmlzaWJpbGl0eShpbnQgZmllbGRWaXNpYmlsaXR5KSB7Ci0JCQlzd2l0Y2ggKGZpZWxkVmlzaWJpbGl0eSkgewotCQkJCWNhc2UgUFJJVkFURToKLQkJCQljYXNlIFBBQ0tBR0U6Ci0JCQkJY2FzZSBQUk9URUNURUQ6Ci0JCQkJCXRoaXMuZmllbGRWaXNpYmlsaXR5ID0gZmllbGRWaXNpYmlsaXR5OwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnZhbGlkIGZpZWxkIHZpc2liaWxpdHk6ICIgKyBmaWVsZFZpc2liaWxpdHkpOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCVN0cmluZyBnZXRGaWVsZFZpc2liaWxpdHlDbGF1c2UoKSB7Ci0JCQlzd2l0Y2ggKHRoaXMuZmllbGRWaXNpYmlsaXR5KSB7Ci0JCQkJY2FzZSBQUklWQVRFOgotCQkJCQlyZXR1cm4gInByaXZhdGUiOyAgLy8kTk9OLU5MUy0xJAotCQkJCWNhc2UgUEFDS0FHRToKLQkJCQkJcmV0dXJuICIiOyAgLy8kTk9OLU5MUy0xJAotCQkJCWNhc2UgUFJPVEVDVEVEOgotCQkJCQlyZXR1cm4gInByb3RlY3RlZCI7ICAvLyROT04tTkxTLTEkCi0JCQkJZGVmYXVsdDoKLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiaW52YWxpZCBmaWVsZCB2aXNpYmlsaXR5OiAiICsgdGhpcy5maWVsZFZpc2liaWxpdHkpOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0KLQkJcHVibGljIGludCBnZXRNZXRob2RWaXNpYmlsaXR5KCkgewotCQkJcmV0dXJuIHRoaXMubWV0aG9kVmlzaWJpbGl0eTsKLQkJfQotCQkvKiogZW50aXR5IHByb3BlcnRpZXMgbXVzdCBiZSAncHVibGljJyBvciAncHJvdGVjdGVkJyAqLwotCQlwdWJsaWMgdm9pZCBzZXRNZXRob2RWaXNpYmlsaXR5KGludCBtZXRob2RWaXNpYmlsaXR5KSB7Ci0JCQlzd2l0Y2ggKG1ldGhvZFZpc2liaWxpdHkpIHsKLQkJCQljYXNlIFBST1RFQ1RFRDoKLQkJCQljYXNlIFBVQkxJQzoKLQkJCQkJdGhpcy5tZXRob2RWaXNpYmlsaXR5ID0gbWV0aG9kVmlzaWJpbGl0eTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW52YWxpZCBtZXRob2QgdmlzaWJpbGl0eTogIiArIG1ldGhvZFZpc2liaWxpdHkpOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCVN0cmluZyBnZXRNZXRob2RWaXNpYmlsaXR5Q2xhdXNlKCkgewotCQkJc3dpdGNoICh0aGlzLm1ldGhvZFZpc2liaWxpdHkpIHsKLQkJCQljYXNlIFBST1RFQ1RFRDoKLQkJCQkJcmV0dXJuICJwcm90ZWN0ZWQiOyAgLy8kTk9OLU5MUy0xJAotCQkJCWNhc2UgUFVCTElDOgotCQkJCQlyZXR1cm4gInB1YmxpYyI7ICAvLyROT04tTkxTLTEkCi0JCQkJZGVmYXVsdDoKLQkJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiaW52YWxpZCBtZXRob2QgdmlzaWJpbGl0eTogIiArIHRoaXMubWV0aG9kVmlzaWJpbGl0eSk7ICAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBnZW5lcmF0ZUdldHRlcnNBbmRTZXR0ZXJzKCkgewotCQkJcmV0dXJuIHRoaXMuZ2VuZXJhdGVHZXR0ZXJzQW5kU2V0dGVyczsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZUdldHRlcnNBbmRTZXR0ZXJzKGJvb2xlYW4gZ2VuZXJhdGVHZXR0ZXJzQW5kU2V0dGVycykgewotCQkJdGhpcy5nZW5lcmF0ZUdldHRlcnNBbmRTZXR0ZXJzID0gZ2VuZXJhdGVHZXR0ZXJzQW5kU2V0dGVyczsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yKCkgewotCQkJcmV0dXJuIHRoaXMuZ2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3I7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0R2VuZXJhdGVEZWZhdWx0Q29uc3RydWN0b3IoYm9vbGVhbiBnZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvcikgewotCQkJdGhpcy5nZW5lcmF0ZURlZmF1bHRDb25zdHJ1Y3RvciA9IGdlbmVyYXRlRGVmYXVsdENvbnN0cnVjdG9yOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gc2VyaWFsaXphYmxlKCkgewotCQkJcmV0dXJuIHRoaXMuc2VyaWFsaXphYmxlOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldFNlcmlhbGl6YWJsZShib29sZWFuIHNlcmlhbGl6YWJsZSkgewotCQkJdGhpcy5zZXJpYWxpemFibGUgPSBzZXJpYWxpemFibGU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBnZW5lcmF0ZVNlcmlhbFZlcnNpb25VSUQoKSB7Ci0JCQlyZXR1cm4gdGhpcy5nZW5lcmF0ZVNlcmlhbFZlcnNpb25VSUQ7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0R2VuZXJhdGVTZXJpYWxWZXJzaW9uVUlEKGJvb2xlYW4gZ2VuZXJhdGVTZXJpYWxWZXJzaW9uVUlEKSB7Ci0JCQl0aGlzLmdlbmVyYXRlU2VyaWFsVmVyc2lvblVJRCA9IGdlbmVyYXRlU2VyaWFsVmVyc2lvblVJRDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGdlbmVyYXRlRW1iZWRkZWRJZEZvckNvbXBvdW5kUEsoKSB7Ci0JCQlyZXR1cm4gdGhpcy5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldEdlbmVyYXRlRW1iZWRkZWRJZEZvckNvbXBvdW5kUEsoYm9vbGVhbiBnZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLKSB7Ci0JCQl0aGlzLmdlbmVyYXRlRW1iZWRkZWRJZEZvckNvbXBvdW5kUEsgPSBnZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gZ2VuZXJhdGVJZENsYXNzRm9yQ29tcG91bmRQSygpIHsKLQkJCXJldHVybiAhIHRoaXMuZ2VuZXJhdGVFbWJlZGRlZElkRm9yQ29tcG91bmRQSzsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRHZW5lcmF0ZUlkQ2xhc3NGb3JDb21wb3VuZFBLKGJvb2xlYW4gZ2VuZXJhdGVJZENsYXNzRm9yQ29tcG91bmRQSykgewotCQkJdGhpcy5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLID0gISBnZW5lcmF0ZUlkQ2xhc3NGb3JDb21wb3VuZFBLOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRFbWJlZGRlZElkQXR0cmlidXRlTmFtZSgpIHsKLQkJCXJldHVybiB0aGlzLmVtYmVkZGVkSWRBdHRyaWJ1dGVOYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldEVtYmVkZGVkSWRBdHRyaWJ1dGVOYW1lKFN0cmluZyBlbWJlZGRlZElkQXR0cmlidXRlTmFtZSkgewotCQkJdGhpcy5jaGVja1JlcXVpcmVkU3RyaW5nKGVtYmVkZGVkSWRBdHRyaWJ1dGVOYW1lLCAiRW1iZWRkZWRJZCBhdHRyaWJ1dGUgbmFtZSBpcyByZXF1aXJlZCIpOyAgLy8kTk9OLU5MUy0xJAotCQkJdGhpcy5lbWJlZGRlZElkQXR0cmlidXRlTmFtZSA9IGVtYmVkZGVkSWRBdHRyaWJ1dGVOYW1lOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRQcmltYXJ5S2V5TWVtYmVyQ2xhc3NOYW1lKCkgewotCQkJcmV0dXJuIHRoaXMucHJpbWFyeUtleU1lbWJlckNsYXNzTmFtZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRQcmltYXJ5S2V5TWVtYmVyQ2xhc3NOYW1lKFN0cmluZyBwcmltYXJ5S2V5TWVtYmVyQ2xhc3NOYW1lKSB7Ci0JCQl0aGlzLmNoZWNrUmVxdWlyZWRTdHJpbmcocHJpbWFyeUtleU1lbWJlckNsYXNzTmFtZSwgInByaW1hcnkga2V5IG1lbWJlciBjbGFzcyBuYW1lIGlzIHJlcXVpcmVkIik7ICAvLyROT04tTkxTLTEkCi0JCQl0aGlzLnByaW1hcnlLZXlNZW1iZXJDbGFzc05hbWUgPSBwcmltYXJ5S2V5TWVtYmVyQ2xhc3NOYW1lOwotCQl9Ci0KLQkJU3RyaW5nIGdldEVudGl0eU5hbWUoVGFibGUgdGFibGUpIHsKLQkJCXJldHVybiB0aGlzLnRhYmxlcy5nZXQodGFibGUpOwotCQl9Ci0JCUl0ZXJhdG9yPFRhYmxlPiB0YWJsZXMoKSB7Ci0JCQlyZXR1cm4gdGhpcy50YWJsZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJfQotCQlpbnQgdGFibGVzU2l6ZSgpIHsKLQkJCXJldHVybiB0aGlzLnRhYmxlcy5zaXplKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgYWRkVGFibGUoVGFibGUgdGFibGUsIFN0cmluZyBlbnRpdHlOYW1lKSB7Ci0JCQlpZiAodGFibGUgPT0gbnVsbCkgewotCQkJCXRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigidGFibGUgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXRoaXMuY2hlY2tSZXF1aXJlZFN0cmluZyhlbnRpdHlOYW1lLCAiZW50aXR5IG5hbWUgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCWlmICh0aGlzLnRhYmxlcy5jb250YWluc0tleSh0YWJsZSkpIHsKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkdXBsaWNhdGUgdGFibGU6ICIgKyB0YWJsZS5nZXROYW1lKCkpOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKHRoaXMudGFibGVzLnZhbHVlcygpLmNvbnRhaW5zKGVudGl0eU5hbWUpKSB7Ci0JCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZHVwbGljYXRlIGVudGl0eSBuYW1lOiAiICsgZW50aXR5TmFtZSk7ICAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlpZiAoICEgTmFtZVRvb2xzLnN0cmluZ0NvbnNpc3RzT2ZKYXZhSWRlbnRpZmllckNoYXJhY3RlcnMoZW50aXR5TmFtZSkpIHsKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJlbnRpdHkgbmFtZSBpcyBub3QgYSB2YWxpZCBKYXZhIGlkZW50aWZpZXI6ICIgKyBlbnRpdHlOYW1lKTsgIC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmIChOYW1lVG9vbHMuSkFWQV9SRVNFUlZFRF9XT1JEU19TRVQuY29udGFpbnMoZW50aXR5TmFtZSkpIHsKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJlbnRpdHkgbmFtZSBpcyBhIEphdmEgcmVzZXJ2ZWQgd29yZDogIiArIGVudGl0eU5hbWUpOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJdGhpcy50YWJsZXMucHV0KHRhYmxlLCBlbnRpdHlOYW1lKTsKLQkJfQotCi0JCXB1YmxpYyBEYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlciBnZXREYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcigpIHsKLQkJCXJldHVybiB0aGlzLmRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyIGRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyKSB7Ci0JCQlpZiAoZGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgPT0gbnVsbCkgewotCQkJCXRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiZGF0YWJhc2UgYW5ub3RhdGlvbiBuYW1lIGJ1aWxkZXIgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXRoaXMuZGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgPSBkYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlcjsKLQkJfQotCi0JCXB1YmxpYyBPdmVyd3JpdGVDb25maXJtZXIgZ2V0T3ZlcndyaXRlQ29uZmlybWVyKCkgewotCQkJcmV0dXJuIHRoaXMub3ZlcndyaXRlQ29uZmlybWVyOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldE92ZXJ3cml0ZUNvbmZpcm1lcihPdmVyd3JpdGVDb25maXJtZXIgb3ZlcndyaXRlQ29uZmlybWVyKSB7Ci0JCQlpZiAob3ZlcndyaXRlQ29uZmlybWVyID09IG51bGwpIHsKLQkJCQl0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oIm92ZXJ3cml0ZSBjb25maXJtZXIgaXMgcmVxdWlyZWQiKTsgIC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXRoaXMub3ZlcndyaXRlQ29uZmlybWVyID0gb3ZlcndyaXRlQ29uZmlybWVyOwotCQl9Ci0KLQkJcHJpdmF0ZSB2b2lkIGNoZWNrUmVxdWlyZWRTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJCWlmICgoc3RyaW5nID09IG51bGwpIHx8IChzdHJpbmcubGVuZ3RoKCkgPT0gMCkpIHsKLQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKG1lc3NhZ2UpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogb3ZlcndyaXRlIGNvbmZpcm1lciAqKioqKioqKioqCi0KLQlwdWJsaWMgc3RhdGljIGludGVyZmFjZSBPdmVyd3JpdGVDb25maXJtZXIgewotCQkvKioKLQkJICogUmV0dXJuIHdoZXRoZXIgdGhlIGVudGl0eSBnZW5lcmF0b3Igc2hvdWxkIG92ZXJ3cml0ZSB0aGUgc3BlY2lmaWVkCi0JCSAqIGZpbGUuCi0JCSAqLwotCQlib29sZWFuIG92ZXJ3cml0ZShTdHJpbmcgY2xhc3NOYW1lKTsKLQotCi0JCWZpbmFsIGNsYXNzIEFsd2F5cyBpbXBsZW1lbnRzIE92ZXJ3cml0ZUNvbmZpcm1lciB7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIE92ZXJ3cml0ZUNvbmZpcm1lciBJTlNUQU5DRSA9IG5ldyBBbHdheXMoKTsKLQkJCXB1YmxpYyBzdGF0aWMgT3ZlcndyaXRlQ29uZmlybWVyIGluc3RhbmNlKCkgewotCQkJCXJldHVybiBJTlNUQU5DRTsKLQkJCX0KLQkJCS8vIGVuc3VyZSBzaW5nbGUgaW5zdGFuY2UKLQkJCXByaXZhdGUgQWx3YXlzKCkgewotCQkJCXN1cGVyKCk7Ci0JCQl9Ci0JCQkvLyBldmVyeXRoaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4KLQkJCXB1YmxpYyBib29sZWFuIG92ZXJ3cml0ZShTdHJpbmcgYXJnMCkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkJCXJldHVybiAiT3ZlcndyaXRlQ29uZmlybWVyLkFsd2F5cyI7ICAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQotCi0JCWZpbmFsIGNsYXNzIE5ldmVyIGltcGxlbWVudHMgT3ZlcndyaXRlQ29uZmlybWVyIHsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgT3ZlcndyaXRlQ29uZmlybWVyIElOU1RBTkNFID0gbmV3IE5ldmVyKCk7Ci0JCQlwdWJsaWMgc3RhdGljIE92ZXJ3cml0ZUNvbmZpcm1lciBpbnN0YW5jZSgpIHsKLQkJCQlyZXR1cm4gSU5TVEFOQ0U7Ci0JCQl9Ci0JCQkvLyBlbnN1cmUgc2luZ2xlIGluc3RhbmNlCi0JCQlwcml2YXRlIE5ldmVyKCkgewotCQkJCXN1cGVyKCk7Ci0JCQl9Ci0JCQkvLyBub3RoaW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4KLQkJCXB1YmxpYyBib29sZWFuIG92ZXJ3cml0ZShTdHJpbmcgYXJnMCkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCQlyZXR1cm4gIk92ZXJ3cml0ZUNvbmZpcm1lci5OZXZlciI7ICAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQotCX0KLQotCi0JLy8gKioqKioqKioqKiBhbm5vdGF0aW9uIG5hbWUgYnVpbGRlciAqKioqKioqKioqCi0KLQkvKioKLQkgKiBQcm92aWRlIGEgcGx1Z2dhYmxlIHdheSB0byBkZXRlcm1pbmUgd2hldGhlciBhbmQgaG93IHRoZSBlbnRpdHkgZ2VuZXJhdG9yCi0JICogcHJpbnRzIHRoZSBuYW1lcyBvZiB2YXJpb3VzIGRhdGFiYXNlIG9iamVjdHMuCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgewotCi0JCS8qKgotCQkgKiBHaXZlbiB0aGUgbmFtZSBvZiBhbiBlbnRpdHkgYW5kIHRoZSB0YWJsZSB0byB3aGljaCBpdCBpcyBtYXBwZWQsCi0JCSAqIGJ1aWxkIGFuZCByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBlbnRpdHkncwotCQkgKiBUYWJsZSBhbm5vdGF0aW9uJ3MgJ25hbWUnIGVsZW1lbnQuIFJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkKLQkJICogbWFwcyB0byB0aGUgdGFibGUgYnkgZGVmYXVsdC4KLQkJICovCi0JCVN0cmluZyBidWlsZFRhYmxlQW5ub3RhdGlvbk5hbWUoU3RyaW5nIGVudGl0eU5hbWUsIFRhYmxlIHRhYmxlKTsKLQotCQkvKioKLQkJICogR2l2ZW4gdGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIChmaWVsZCBvciBwcm9wZXJ0eSkgYW5kIHRoZSBjb2x1bW4KLQkJICogdG8gd2hpY2ggaXQgaXMgbWFwcGVkLAotCQkgKiBidWlsZCBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlJ3MKLQkJICogQ29sdW1uIGFubm90YXRpb24ncyAnbmFtZScgZWxlbWVudC4gUmV0dXJuIG51bGwgaWYgdGhlIGF0dHJpYnV0ZQotCQkgKiBtYXBzIHRvIHRoZSBjb2x1bW4gYnkgZGVmYXVsdC4KLQkJICovCi0JCVN0cmluZyBidWlsZENvbHVtbkFubm90YXRpb25OYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBDb2x1bW4gY29sdW1uKTsKLQotCQkvKioKLQkJICogR2l2ZW4gdGhlIG5hbWUgb2YgYW4gYXR0cmlidXRlIChmaWVsZCBvciBwcm9wZXJ0eSkgYW5kIHRoZQotCQkgKiBtYW55LXRvLW9uZSBvciBtYW55LXRvLW1hbnkgZm9yZWlnbiBrZXkgdG8gd2hpY2ggaXQgaXMgbWFwcGVkLAotCQkgKiBidWlsZCBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0aGUgYXR0cmlidXRlJ3MKLQkJICogSm9pbkNvbHVtbiBhbm5vdGF0aW9uJ3MgJ25hbWUnIGVsZW1lbnQuIFJldHVybiBudWxsIGlmIHRoZSBhdHRyaWJ1dGUKLQkJICogbWFwcyB0byB0aGUgam9pbiBjb2x1bW4gYnkgZGVmYXVsdC4KLQkJICogVGhlIHNwZWNpZmllZCBmb3JlaWduIGtleSBjb25zaXN0cyBvZiBhIHNpbmdsZSBjb2x1bW4gcGFpciB3aG9zZQotCQkgKiByZWZlcmVuY2VkIGNvbHVtbiBpcyB0aGUgc2luZ2xlLWNvbHVtbiBwcmltYXJ5IGtleSBvZiB0aGUgZm9yZWlnbgotCQkgKiBrZXkncyByZWZlcmVuY2VkIHRhYmxlLgotCQkgKi8KLQkJU3RyaW5nIGJ1aWxkSm9pbkNvbHVtbkFubm90YXRpb25OYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBGb3JlaWduS2V5IGZvcmVpZ25LZXkpOwotCi0JCS8qKgotCQkgKiBCdWlsZCBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIEpvaW5Db2x1bW4KLQkJICogYW5ub3RhdGlvbidzICduYW1lJyBvciAncmVmZXJlbmNlZENvbHVtbk5hbWUnIGVsZW1lbnQuCi0JCSAqIFRoaXMgaXMgY2FsbGVkIGZvciBtYW55LXRvLW9uZSBhbmQgbWFueS10by1tYW55IG1hcHBpbmdzIHdoZW4KLQkJICogdGhlIGRlZmF1bHQgam9pbiBjb2x1bW4gbmFtZSBhbmQvb3IgcmVmZXJlbmNlZCBjb2x1bW4gbmFtZSBhcmUvaXMKLQkJICogbm90IGFwcGxpY2FibGUuCi0JCSAqIEBzZWUgYnVpbGRKb2luQ29sdW1uQW5ub3RhdGlvbk5hbWUoU3RyaW5nLCBGb3JlaWduS2V5KQotCQkgKi8KLQkJU3RyaW5nIGJ1aWxkSm9pbkNvbHVtbkFubm90YXRpb25OYW1lKENvbHVtbiBjb2x1bW4pOwotCi0JCS8qKgotCQkgKiBCdWlsZCBhbmQgcmV0dXJuIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciBhIEpvaW5UYWJsZQotCQkgKiBhbm5vdGF0aW9uJ3MgJ25hbWUnIGVsZW1lbnQuCi0JCSAqIFRoaXMgaXMgY2FsbGVkIGZvciBtYW55LXRvLW1hbnkgbWFwcGluZ3Mgd2hlbiB0aGUgZGVmYXVsdAotCQkgKiBqb2luIHRhYmxlIG5hbWUgaXMgbm90IGFwcGxpY2FibGUuCi0JCSAqLwotCQlTdHJpbmcgYnVpbGRKb2luVGFibGVBbm5vdGF0aW9uTmFtZShUYWJsZSB0YWJsZSk7Ci0KLQotCQkvKioKLQkJICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGxlIHJldHVybnMgdGhlIGRhdGFiYXNlIG9iamVjdCdzIG5hbWUsCi0JCSAqIHVuYWx0ZXJlZC4KLQkJICovCi0JCWZpbmFsIGNsYXNzIERlZmF1bHQgaW1wbGVtZW50cyBEYXRhYmFzZUFubm90YXRpb25OYW1lQnVpbGRlciB7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIERhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyIElOU1RBTkNFID0gbmV3IERlZmF1bHQoKTsKLQkJCXB1YmxpYyBzdGF0aWMgRGF0YWJhc2VBbm5vdGF0aW9uTmFtZUJ1aWxkZXIgaW5zdGFuY2UoKSB7Ci0JCQkJcmV0dXJuIElOU1RBTkNFOwotCQkJfQotCQkJLy8gZW5zdXJlIHNpbmdsZSBpbnN0YW5jZQotCQkJcHJpdmF0ZSBEZWZhdWx0KCkgewotCQkJCXN1cGVyKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgU3RyaW5nIGJ1aWxkVGFibGVBbm5vdGF0aW9uTmFtZShTdHJpbmcgZW50aXR5TmFtZSwgVGFibGUgdGFibGUpIHsKLQkJCQlyZXR1cm4gdGFibGUuZ2V0TmFtZSgpOwotCQkJfQotCQkJcHVibGljIFN0cmluZyBidWlsZENvbHVtbkFubm90YXRpb25OYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBDb2x1bW4gY29sdW1uKSB7Ci0JCQkJcmV0dXJuIGNvbHVtbi5nZXROYW1lKCk7Ci0JCQl9Ci0JCQlwdWJsaWMgU3RyaW5nIGJ1aWxkSm9pbkNvbHVtbkFubm90YXRpb25OYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBGb3JlaWduS2V5IGZvcmVpZ25LZXkpIHsKLQkJCQlyZXR1cm4gZm9yZWlnbktleS5nZXRDb2x1bW5QYWlyKCkuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKTsKLQkJCX0KLQkJCXB1YmxpYyBTdHJpbmcgYnVpbGRKb2luQ29sdW1uQW5ub3RhdGlvbk5hbWUoQ29sdW1uIGNvbHVtbikgewotCQkJCXJldHVybiBjb2x1bW4uZ2V0TmFtZSgpOwotCQkJfQotCQkJcHVibGljIFN0cmluZyBidWlsZEpvaW5UYWJsZUFubm90YXRpb25OYW1lKFRhYmxlIHRhYmxlKSB7Ci0JCQkJcmV0dXJuIHRhYmxlLmdldE5hbWUoKTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCQlyZXR1cm4gIkRhdGFiYXNlQW5ub3RhdGlvbk5hbWVCdWlsZGVyLkRlZmF1bHQiOyAgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL0dlblNjb3BlLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9HZW5TY29wZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYzNDVmLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL0dlblNjb3BlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN1Yk1vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkNvbGxlY3Rpb25Ub29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuRmlsdGVyaW5nSXRlcmF0b3I7Ci0KLS8qKgotICogQnVpbGQgYSBHZW5UYWJsZSBmb3IgZWFjaCBkYi5UYWJsZSBwYXNzZWQgaW4uCi0gKiBEZXRlcm1pbmUgYWxsIHRoZSByZWxhdGlvbnMgYW1vbmcgdGhlIHRhYmxlcyBpbiB0aGUgc2NvcGU6Ci0gKiAgICAgbWFueS10by1tYW55Ci0gKiAgICAgbWFueS10by1vbmUKLSAqICAgICBvbmUtdG8tbWFueQotICogTWFrZSBhIGZpcnN0IHBhc3MgdG8gZGV0ZXJtaW5lIGVhY2ggZW50aXR5IHRhYmxlJ3MgSmF2YSBhdHRyaWJ1dGUgbmFtZXMsCi0gKiBiZWNhdXNlIHdlIHdpbGwgbmVlZCB0aGVtIG9uIHN1YnNlcXVlbnQgcGFzc2VzLgotICovCi1jbGFzcyBHZW5TY29wZSB7Ci0JcHJpdmF0ZSBmaW5hbCBFbnRpdHlHZW5lcmF0b3IuQ29uZmlnIGVudGl0eUNvbmZpZzsKLQlwcml2YXRlIGZpbmFsIEhhc2hNYXA8VGFibGUsIEdlblRhYmxlPiBnZW5UYWJsZXM7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0aW9uL2luaXRpYWxpemF0aW9uICoqKioqKioqKioKLQotCUdlblNjb3BlKEVudGl0eUdlbmVyYXRvci5Db25maWcgZW50aXR5Q29uZmlnLCBJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQlzdXBlcigpOwotCQl0aGlzLmVudGl0eUNvbmZpZyA9IGVudGl0eUNvbmZpZzsKLQkJdGhpcy5nZW5UYWJsZXMgPSBuZXcgSGFzaE1hcDxUYWJsZSwgR2VuVGFibGU+KGVudGl0eUNvbmZpZy50YWJsZXNTaXplKCkpOwotCQlTdWJNb25pdG9yIHNtID0gU3ViTW9uaXRvci5jb252ZXJ0KHByb2dyZXNzTW9uaXRvciwgSnB0R2VuTWVzc2FnZXMuR2VuU2NvcGVfdGFza05hbWUsIDQpOwotCi0JCXRoaXMuYnVpbGRHZW5UYWJsZXMoKTsKLQkJc20ud29ya2VkKDEpOwotCQl0aGlzLmNoZWNrQ2FuY2VsZWQoc20pOwotCi0JCXRoaXMuYnVpbGRNYW55VG9NYW55UmVsYXRpb25zKCk7Ci0JCXNtLndvcmtlZCgxKTsKLQkJdGhpcy5jaGVja0NhbmNlbGVkKHNtKTsKLQotCQl0aGlzLmJ1aWxkTWFueVRvT25lUmVsYXRpb25zKCk7ICAvLyB0aGlzIHdpbGwgYWxzbyBidWlsZCB0aGUgY29ycmVzcG9uZGluZyBvbmUtdG8tbWFueSByZWxhdGlvbnMKLQkJc20ud29ya2VkKDEpOwotCQl0aGlzLmNoZWNrQ2FuY2VsZWQoc20pOwotCi0JCXRoaXMuYnVpbGRBdHRyaWJ1dGVOYW1lcygpOwotCQlzbS53b3JrZWQoMSk7Ci0JCXRoaXMuY2hlY2tDYW5jZWxlZChzbSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkR2VuVGFibGVzKCkgewotCQlmb3IgKEl0ZXJhdG9yPFRhYmxlPiBzdHJlYW0gPSBlbnRpdHlDb25maWcudGFibGVzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJVGFibGUgdGFibGUgPSBzdHJlYW0ubmV4dCgpOwotCQkJdGhpcy5nZW5UYWJsZXMucHV0KHRhYmxlLCBuZXcgR2VuVGFibGUodGhpcywgdGFibGUpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIGZpbmQgYWxsIHRoZSAiam9pbiIgdGFibGVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkTWFueVRvTWFueVJlbGF0aW9ucygpIHsKLQkJZm9yIChJdGVyYXRvcjxHZW5UYWJsZT4gc3RyZWFtID0gdGhpcy5nZW5UYWJsZXMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQlzdHJlYW0ubmV4dCgpLmJ1aWxkSm9pblRhYmxlUmVsYXRpb24oKTsKLQkJfQotCi0JCS8vIHJldmVydCBhbnkgImpvaW4iIHRhYmxlIHRoYXQgaXMgcmVmZXJlbmNlZCBieSBhbm90aGVyIHRhYmxlIGJhY2sgdG8gYW4gImVudGl0eSIgdGFibGUKLQkJSGFzaFNldDxHZW5UYWJsZT4gcmVmZXJlbmNlZEdlblRhYmxlcyA9IHRoaXMuYnVpbGRSZWZlcmVuY2VkR2VuVGFibGVzKCk7Ci0JCWZvciAoSXRlcmF0b3I8R2VuVGFibGU+IHN0cmVhbSA9IHRoaXMuam9pbkdlblRhYmxlcygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCUdlblRhYmxlIGpvaW5HZW5UYWJsZSA9IHN0cmVhbS5uZXh0KCk7Ci0JCQlpZiAocmVmZXJlbmNlZEdlblRhYmxlcy5jb250YWlucyhqb2luR2VuVGFibGUpKSB7Ci0JCQkJam9pbkdlblRhYmxlLmNsZWFySm9pblRhYmxlUmVsYXRpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIGZpbmQgYWxsIHRoZSBtYW55LXRvLW9uZSBhbmQgY29ycmVzcG9uZGluZyBvbmUtdG8tbWFueSByZWxhdGlvbnMKLQkgKi8KLQlwcml2YXRlIHZvaWQgYnVpbGRNYW55VG9PbmVSZWxhdGlvbnMoKSB7Ci0JCWZvciAoSXRlcmF0b3I8R2VuVGFibGU+IHN0cmVhbSA9IHRoaXMuZW50aXR5R2VuVGFibGVzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJc3RyZWFtLm5leHQoKS5idWlsZE1hbnlUb09uZVJlbGF0aW9ucygpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogZGV0ZXJtaW5lIGFsbCB0aGUgSmF2YSBhdHRyaWJ1dGUgbmFtZXMgdXAtZnJvbnQgYmVjYXVzZSB3ZSB3aWxsCi0JICogbmVlZCB0aGVtIGZvciB0aGluZ3MgbGlrZSAnbWFwcGVkQnknIGFubm90YXRpb24gZWxlbWVudHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgYnVpbGRBdHRyaWJ1dGVOYW1lcygpIHsKLQkJZm9yIChJdGVyYXRvcjxHZW5UYWJsZT4gc3RyZWFtID0gdGhpcy5lbnRpdHlHZW5UYWJsZXMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQlzdHJlYW0ubmV4dCgpLmJ1aWxkQXR0cmlidXRlTmFtZXMoKTsKLQkJfQotCX0KLQotCi0JLy8gKioqKioqKioqKiBwYWNrYWdlIEFQSSAqKioqKioqKioqCi0KLQlFbnRpdHlHZW5lcmF0b3IuQ29uZmlnIGdldEVudGl0eUNvbmZpZygpIHsKLQkJcmV0dXJuIHRoaXMuZW50aXR5Q29uZmlnOwotCX0KLQotCS8qKgotCSAqIHJldHVybiBvbmx5IHRoZSBnZW4gdGFibGVzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBnZW5lcmF0aW5nCi0JICogZW50aXRpZXMgKGkuZS4gZXhjbHVkZSB0aGUgImpvaW4iIHRhYmxlcykKLQkgKi8KLQlJdGVyYXRvcjxHZW5UYWJsZT4gZW50aXR5R2VuVGFibGVzKCkgewotCQlyZXR1cm4gbmV3IEZpbHRlcmluZ0l0ZXJhdG9yPEdlblRhYmxlLCBHZW5UYWJsZT4odGhpcy5nZW5UYWJsZXMoKSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgYm9vbGVhbiBhY2NlcHQoR2VuVGFibGUgZ2VuVGFibGUpIHsKLQkJCQlyZXR1cm4gISBnZW5UYWJsZS5pc0pvaW5UYWJsZSgpOwotCQkJfQotCQl9OwotCX0KLQotCWludCBlbnRpdHlUYWJsZXNTaXplKCkgewotCQlyZXR1cm4gQ29sbGVjdGlvblRvb2xzLnNpemUodGhpcy5lbnRpdHlHZW5UYWJsZXMoKSk7Ci0JfQotCi0JLyoqCi0JICogcmV0dXJuIHRoZSBnZW4gdGFibGUgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIGRiIHRhYmxlOwotCSAqIHJldHVybiBudWxsIGlmIHRoZSBnZW4gdGFibGUgaXMgbm90ICJpbi1zY29wZSIgKGUuZy4gYSBkYiBmb3JlaWduIGtleQotCSAqIG1pZ2h0IGhhdmUgYSByZWZlcmVuY2UgdG8gYSBkYiB0YWJsZSB0aGF0IHdhcyBub3QgaW5jbHVkZWQgaW4gdGhlCi0JICogc2NvcGUsIHNvIHdlIHdvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGdlbiB0YWJsZSkKLQkgKi8KLQlHZW5UYWJsZSBnZXRHZW5UYWJsZShUYWJsZSB0YWJsZSkgewotCQlyZXR1cm4gdGhpcy5nZW5UYWJsZXMuZ2V0KHRhYmxlKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogaW50ZXJuYWwgbWV0aG9kcyAqKioqKioqKioqCi0KLQlwcml2YXRlIEl0ZXJhdG9yPEdlblRhYmxlPiBnZW5UYWJsZXMoKSB7Ci0JCXJldHVybiB0aGlzLmdlblRhYmxlcy52YWx1ZXMoKS5pdGVyYXRvcigpOwotCX0KLQotCXByaXZhdGUgaW50IGdlblRhYmxlc1NpemUoKSB7Ci0JCXJldHVybiB0aGlzLmdlblRhYmxlcy5zaXplKCk7Ci0JfQotCi0JLyoqCi0JICogcmV0dXJuIG9ubHkgdGhlICJqb2luIiBnZW4gdGFibGVzCi0JICovCi0JcHJpdmF0ZSBJdGVyYXRvcjxHZW5UYWJsZT4gam9pbkdlblRhYmxlcygpIHsKLQkJcmV0dXJuIG5ldyBGaWx0ZXJpbmdJdGVyYXRvcjxHZW5UYWJsZSwgR2VuVGFibGU+KHRoaXMuZ2VuVGFibGVzKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gYWNjZXB0KEdlblRhYmxlIGdlblRhYmxlKSB7Ci0JCQkJcmV0dXJuIGdlblRhYmxlLmlzSm9pblRhYmxlKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JLyoqCi0JICogYnVpbGQgYSBzZXQgb2YgdGhlIGdlbiB0YWJsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBvdGhlciBnZW4gdGFibGVzCi0JICogaW4gdGhlIHNjb3BlCi0JICovCi0JcHJpdmF0ZSBIYXNoU2V0PEdlblRhYmxlPiBidWlsZFJlZmVyZW5jZWRHZW5UYWJsZXMoKSB7Ci0JCUhhc2hTZXQ8R2VuVGFibGU+IHJlZmVyZW5jZWRHZW5UYWJsZXMgPSBuZXcgSGFzaFNldDxHZW5UYWJsZT4odGhpcy5nZW5UYWJsZXNTaXplKCkpOwotCQlmb3IgKEl0ZXJhdG9yPEdlblRhYmxlPiBzdHJlYW0gPSB0aGlzLmdlblRhYmxlcygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXN0cmVhbS5uZXh0KCkuYWRkUmVmZXJlbmNlZEdlblRhYmxlc1RvKHJlZmVyZW5jZWRHZW5UYWJsZXMpOwotCQl9Ci0JCXJldHVybiByZWZlcmVuY2VkR2VuVGFibGVzOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0NhbmNlbGVkKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7Ci0JCWlmIChwcm9ncmVzc01vbml0b3IuaXNDYW5jZWxlZCgpKSB7Ci0JCQl0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuZ2VuVGFibGVzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL0dlblRhYmxlLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9HZW5UYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmEzZDE4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL0dlblRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Gb3JlaWduS2V5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5Db2xsZWN0aW9uVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuTmFtZVRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlN0cmluZ1Rvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5GaWx0ZXJpbmdJdGVyYXRvcjsKLQotLyoqCi0gKiBhc3NvY2lhdGUgYSB0YWJsZSB3aXRoIHRoZSB2YXJpb3VzIHJlbGF0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCB3aGVuCi0gKiBnZW5lcmF0aW5nIHRoZSBlbnRpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgdGFibGUKLSAqLwotY2xhc3MgR2VuVGFibGUgewotCXByaXZhdGUgZmluYWwgR2VuU2NvcGUgc2NvcGU7Ci0JcHJpdmF0ZSBmaW5hbCBUYWJsZSB0YWJsZTsKLQotCS8vIHRoZXNlIHJlbGF0aW9ucyBjYW5ub3QgYmUgYnVpbHQgdW50aWwgYWZ0ZXIgd2UgaGF2ZSBidWlsdCBhbGwgdGhlIHNjb3BlJ3MgdGFibGVzCi0JcHJpdmF0ZSBNYW55VG9NYW55UmVsYXRpb24gam9pblRhYmxlUmVsYXRpb247Ci0JcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TWFueVRvTWFueVJlbGF0aW9uPiBvd25lZE1hbnlUb01hbnlSZWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PE1hbnlUb01hbnlSZWxhdGlvbj4oKTsKLQlwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxNYW55VG9NYW55UmVsYXRpb24+IG5vbk93bmVkTWFueVRvTWFueVJlbGF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8TWFueVRvTWFueVJlbGF0aW9uPigpOwotCXByaXZhdGUgZmluYWwgQXJyYXlMaXN0PE1hbnlUb09uZVJlbGF0aW9uPiBtYW55VG9PbmVSZWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PE1hbnlUb09uZVJlbGF0aW9uPigpOwotCXByaXZhdGUgZmluYWwgQXJyYXlMaXN0PE9uZVRvTWFueVJlbGF0aW9uPiBvbmVUb01hbnlSZWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PE9uZVRvTWFueVJlbGF0aW9uPigpOwotCXByaXZhdGUgZmluYWwgSGFzaFNldDxDb2x1bW4+IGZvcmVpZ25LZXlDb2x1bW5zID0gbmV3IEhhc2hTZXQ8Q29sdW1uPigpOwotCi0JcHJpdmF0ZSBmaW5hbCBIYXNoU2V0PFN0cmluZz4gYXR0cmlidXRlTmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JcHJpdmF0ZSBTdHJpbmcgYXR0cmlidXRlTmFtZUZvckVtYmVkZGVkSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPENvbHVtbiwgU3RyaW5nPiBiYXNpY0F0dHJpYnV0ZU5hbWVzID0gbmV3IEhhc2hNYXA8Q29sdW1uLCBTdHJpbmc+KCk7Ci0JcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPE1hbnlUb09uZVJlbGF0aW9uLCBTdHJpbmc+IG1hbnlUb09uZUF0dHJpYnV0ZU5hbWVzID0gbmV3IEhhc2hNYXA8TWFueVRvT25lUmVsYXRpb24sIFN0cmluZz4oKTsKLQlwcml2YXRlIGZpbmFsIEhhc2hNYXA8T25lVG9NYW55UmVsYXRpb24sIFN0cmluZz4gb25lVG9NYW55QXR0cmlidXRlTmFtZXMgPSBuZXcgSGFzaE1hcDxPbmVUb01hbnlSZWxhdGlvbiwgU3RyaW5nPigpOwotCXByaXZhdGUgZmluYWwgSGFzaE1hcDxNYW55VG9NYW55UmVsYXRpb24sIFN0cmluZz4gb3duZWRNYW55VG9NYW55QXR0cmlidXRlTmFtZXMgPSBuZXcgSGFzaE1hcDxNYW55VG9NYW55UmVsYXRpb24sIFN0cmluZz4oKTsKLQlwcml2YXRlIGZpbmFsIEhhc2hNYXA8TWFueVRvTWFueVJlbGF0aW9uLCBTdHJpbmc+IG5vbk93bmVkTWFueVRvTWFueUF0dHJpYnV0ZU5hbWVzID0gbmV3IEhhc2hNYXA8TWFueVRvTWFueVJlbGF0aW9uLCBTdHJpbmc+KCk7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0aW9uL2luaXRpYWxpemF0aW9uICoqKioqKioqKioKLQotCUdlblRhYmxlKEdlblNjb3BlIHNjb3BlLCBUYWJsZSB0YWJsZSkgewotCQlzdXBlcigpOwotCQl0aGlzLnNjb3BlID0gc2NvcGU7Ci0JCXRoaXMudGFibGUgPSB0YWJsZTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogcGFja2FnZSBBUEkgKioqKioqKioqKgotCi0JRW50aXR5R2VuZXJhdG9yLkNvbmZpZyBnZXRFbnRpdHlDb25maWcoKSB7Ci0JCXJldHVybiB0aGlzLnNjb3BlLmdldEVudGl0eUNvbmZpZygpOwotCX0KLQotCS8qKgotCSAqIGV4YW1wbGVzOgotCSAqICAgR2VuVGFibGUoRk9PKSA9PiAiRk9PX0NPTExFQ1RJT04iCi0JICogICBHZW5UYWJsZShmb28pID0+ICJmb29Db2xsZWN0aW9uIgotCSAqICAgR2VuVGFibGUoRm9vKSA9PiAiRm9vQ29sbGVjdGlvbiIKLQkgKi8KLQlTdHJpbmcgZ2V0Q29sbGVjdGlvbkF0dHJpYnV0ZU5hbWUoKSB7Ci0JCVN0cmluZyBuYW1lID0gdGhpcy5nZXROYW1lKCk7Ci0JCVN0cmluZyBzdWZmaXggPSB0aGlzLmdldEVudGl0eUNvbmZpZygpLmdldENvbGxlY3Rpb25BdHRyaWJ1dGVOYW1lU3VmZml4KCk7Ci0JCWlmIChTdHJpbmdUb29scy5zdHJpbmdJc1VwcGVyY2FzZShuYW1lKSkgeyAgLy8gaG1tbSAgfmJqdgotCQkJc3VmZml4ID0gJ18nICsgc3VmZml4LnRvVXBwZXJDYXNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5hbWUgKyBzdWZmaXg7Ci0JfQotCi0JLyoqCi0JICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhYmxlIGlzIGEgImpvaW4iIHRhYmxlIHdpdGhpbiB0aGUgdGFibGUncyBzY29wZTsKLQkgKiB0aGlzIGNhbiBiZSByZW1vdmVkLCBsYXRlciwgaWYgd2UgZmluZCBhbm90aGVyIHRhYmxlIHJlZmVyZW5jZXMgdGhlLAotCSAqIHNlZW1pbmdseSwgam9pbiB0YWJsZQotCSAqIEBzZWUgI2NsZWFySm9pblRhYmxlUmVsYXRpb24oKSAoYW5kIGNhbGxlcnMpCi0JICovCi0Jdm9pZCBidWlsZEpvaW5UYWJsZVJlbGF0aW9uKCkgewotCQlpZiAoICEgdGhpcy50YWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpIHsKLQkJCXJldHVybjsgIC8vIHRoZSB0YWJsZSBtdXN0IGhhdmUgZXhhY3RseSAyIGZvcmVpZ24ga2V5cwotCQl9Ci0JCUZvcmVpZ25LZXkgb3duaW5nRksgPSB0aGlzLnRhYmxlLmdldEpvaW5UYWJsZU93bmluZ0ZvcmVpZ25LZXkoKTsKLQkJR2VuVGFibGUgb3duaW5nR2VuVGFibGUgPSB0aGlzLnNjb3BlLmdldEdlblRhYmxlKG93bmluZ0ZLLmdldFJlZmVyZW5jZWRUYWJsZSgpKTsKLQkJaWYgKG93bmluZ0dlblRhYmxlID09IG51bGwpIHsKLQkJCXJldHVybjsgIC8vIGJvdGggdGFibGVzIG11c3QgYmUgaW4gdGhlIHNjb3BlCi0JCX0KLQkJRm9yZWlnbktleSBub25Pd25pbmdGSyA9IHRoaXMudGFibGUuZ2V0Sm9pblRhYmxlTm9uT3duaW5nRm9yZWlnbktleSgpOwotCQlHZW5UYWJsZSBub25Pd25pbmdHZW5UYWJsZSA9IHRoaXMuc2NvcGUuZ2V0R2VuVGFibGUobm9uT3duaW5nRksuZ2V0UmVmZXJlbmNlZFRhYmxlKCkpOwotCQlpZiAobm9uT3duaW5nR2VuVGFibGUgPT0gbnVsbCkgewotCQkJcmV0dXJuOyAgLy8gYm90aCB0YWJsZXMgbXVzdCBiZSBpbiB0aGUgc2NvcGUKLQkJfQotCQl0aGlzLmpvaW5UYWJsZVJlbGF0aW9uID0gbmV3IE1hbnlUb01hbnlSZWxhdGlvbigKLQkJCQkJCQkJCQkJdGhpcywKLQkJCQkJCQkJCQkJb3duaW5nRkssCi0JCQkJCQkJCQkJCW93bmluZ0dlblRhYmxlLAotCQkJCQkJCQkJCQlub25Pd25pbmdGSywKLQkJCQkJCQkJCQkJbm9uT3duaW5nR2VuVGFibGUKLQkJCQkJCQkJCQkpOwotCX0KLQotCS8qKgotCSAqIHVzZWQgYnkgdGhlIHNjb3BlIHRvIGZpZ3VyZSBvdXQgd2hldGhlciAiam9pbiIgdGFibGVzIHNob3VsZCBiZQotCSAqIGNvbnZlcnRlZCB0byAiZW50aXR5IiB0YWJsZXMKLQkgKi8KLQl2b2lkIGFkZFJlZmVyZW5jZWRHZW5UYWJsZXNUbyhTZXQ8R2VuVGFibGU+IHJlZmVyZW5jZWRUYWJsZXMpIHsKLQkJZm9yIChJdGVyYXRvcjxGb3JlaWduS2V5PiBzdHJlYW0gPSB0aGlzLnRhYmxlLmZvcmVpZ25LZXlzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJRm9yZWlnbktleSBmayA9IHN0cmVhbS5uZXh0KCk7Ci0JCQlHZW5UYWJsZSBnZW5UYWJsZSA9IHRoaXMuc2NvcGUuZ2V0R2VuVGFibGUoZmsuZ2V0UmVmZXJlbmNlZFRhYmxlKCkpOwotCQkJaWYgKGdlblRhYmxlICE9IG51bGwpIHsKLQkJCQlyZWZlcmVuY2VkVGFibGVzLmFkZChnZW5UYWJsZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgc2NvcGUgY2xlYXJzIHRoZSBqb2luIHRhYmxlIHJlbGF0aW9uIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcwotCSAqIHRvIHRoZSBqb2luIHRhYmxlIGZyb20gb3RoZXIgdGFibGVzIGluIHRoZSBzY29wZQotCSAqLwotCXZvaWQgY2xlYXJKb2luVGFibGVSZWxhdGlvbigpIHsKLQkJdGhpcy5qb2luVGFibGVSZWxhdGlvbi5jbGVhcigpOwotCQl0aGlzLmpvaW5UYWJsZVJlbGF0aW9uID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBmaW5kICJpbi1zY29wZSIgZm9yZWlnbiBrZXlzCi0JICovCi0Jdm9pZCBidWlsZE1hbnlUb09uZVJlbGF0aW9ucygpIHsKLQkJZm9yIChJdGVyYXRvcjxGb3JlaWduS2V5PiBzdHJlYW0gPSB0aGlzLnRhYmxlLmZvcmVpZ25LZXlzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJRm9yZWlnbktleSBmayA9IHN0cmVhbS5uZXh0KCk7Ci0JCQlHZW5UYWJsZSByZWZlcmVuY2VkR2VuVGFibGUgPSB0aGlzLnNjb3BlLmdldEdlblRhYmxlKGZrLmdldFJlZmVyZW5jZWRUYWJsZSgpKTsKLQkJCWlmIChyZWZlcmVuY2VkR2VuVGFibGUgIT0gbnVsbCkgewotCQkJCXRoaXMubWFueVRvT25lUmVsYXRpb25zLmFkZChuZXcgTWFueVRvT25lUmVsYXRpb24odGhpcywgZmssIHJlZmVyZW5jZWRHZW5UYWJsZSkpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogbm93IHRoYXQgYWxsIHRoZSByZWxhdGlvbnMgYXJlIGluIHBsYWNlLCB3ZSBjYW4gY29uZmlndXJlIHRoZSBKYXZhCi0JICogYXR0cmlidXRlIG5hbWVzCi0JICovCi0Jdm9pZCBidWlsZEF0dHJpYnV0ZU5hbWVzKCkgewotCQl0aGlzLmJ1aWxkQXR0cmlidXRlTmFtZUZvckVtYmVkZGVkSWQoKTsKLQotCQkvLyBnYXRoZXIgdXAgYWxsIHRoZSB0YWJsZSdzIGNvbHVtbnMuLi4KLQkJU2V0PENvbHVtbj4gY29sdW1ucyA9IENvbGxlY3Rpb25Ub29scy5zZXQodGhpcy50YWJsZS5jb2x1bW5zKCksIHRoaXMudGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCS8vIC4uLnJlbW92ZSB0aGUgY29sdW1ucyB0aGF0IGJlbG9uZyBleGNsdXNpdmVseSB0byBtYW55LXRvLW9uZSBmb3JlaWduIGtleXMuLi4KLQkJdGhpcy5idWlsZE1hbnlUb09uZUF0dHJpYnV0ZU5hbWVzKGNvbHVtbnMpOwotCQkvLyAuLi5hbmQgdXNlIHRoZSByZW1haW5pbmcgY29sdW1ucyB0byBnZW5lcmF0ZSAiYmFzaWMiIGF0dHJpYnV0ZSBuYW1lcwotCQl0aGlzLmJ1aWxkQmFzaWNBdHRyaWJ1dGVOYW1lcyhjb2x1bW5zKTsKLQotCQl0aGlzLmJ1aWxkT25lVG9NYW55QXR0cmlidXRlTmFtZXMoKTsKLQkJdGhpcy5idWlsZE93bmVkTWFueVRvTWFueUF0dHJpYnV0ZU5hbWVzKCk7Ci0JCXRoaXMuYnVpbGROb25Pd25lZE1hbnlUb01hbnlBdHRyaWJ1dGVOYW1lcygpOwotCX0KLQotCS8qKgotCSAqIHJldHVybiB0aGUgY29sdW1ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSB0YWJsZSdzIHByaW1hcnkga2V5Ci0JICogYnV0IGFyZSBhbHNvIHBhcnQgb2YgYW4gImluLXNjb3BlIiBmb3JlaWduIGtleQotCSAqLwotCUl0ZXJhdG9yPENvbHVtbj4gcmVhZE9ubHlQcmltYXJ5S2V5Q29sdW1ucygpIHsKLQkJcmV0dXJuIG5ldyBGaWx0ZXJpbmdJdGVyYXRvcjxDb2x1bW4sIENvbHVtbj4odGhpcy50YWJsZS5wcmltYXJ5S2V5Q29sdW1ucygpKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBib29sZWFuIGFjY2VwdChDb2x1bW4gcGtDb2x1bW4pIHsKLQkJCQlyZXR1cm4gcGtDb2x1bW4uaXNQYXJ0T2ZGb3JlaWduS2V5KCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JLyoqCi0JICogcmV0dXJuIHRoZSBjb2x1bW5zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHRhYmxlJ3MgcHJpbWFyeSBrZXkKLQkgKiBidXQgYXJlIE5PVCBwYXJ0IG9mIGFueSAiaW4tc2NvcGUiIGZvcmVpZ24ga2V5Ci0JICovCi0JSXRlcmF0b3I8Q29sdW1uPiB3cml0YWJsZVByaW1hcnlLZXlDb2x1bW5zKCkgewotCQlyZXR1cm4gbmV3IEZpbHRlcmluZ0l0ZXJhdG9yPENvbHVtbiwgQ29sdW1uPih0aGlzLnRhYmxlLnByaW1hcnlLZXlDb2x1bW5zKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gYWNjZXB0KENvbHVtbiBwa0NvbHVtbikgewotCQkJCXJldHVybiAhIHBrQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpOwotCQkJfQotCQl9OwotCX0KLQotCS8qKgotCSAqIHJldHVybiB0aGUgY29sdW1ucyB0aGF0IE5FSVRIRVIgcGFydCBvZiB0aGUgdGFibGUncyBwcmltYXJ5IGtleQotCSAqIE5PUiBwYXJ0IG9mIGFueSBmb3JlaWduIGtleQotCSAqLwotCUl0ZXJhdG9yPENvbHVtbj4gbm9uUHJpbWFyeUtleUJhc2ljQ29sdW1ucygpIHsKLQkJcmV0dXJuIG5ldyBGaWx0ZXJpbmdJdGVyYXRvcjxDb2x1bW4sIENvbHVtbj4odGhpcy50YWJsZS5jb2x1bW5zKCkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gYWNjZXB0KENvbHVtbiBjb2x1bW4pIHsKLQkJCQlyZXR1cm4gISAoY29sdW1uLmlzUGFydE9mUHJpbWFyeUtleSgpIHx8IGNvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JVGFibGUgZ2V0VGFibGUoKSB7Ci0JCXJldHVybiB0aGlzLnRhYmxlOwotCX0KLQotCVN0cmluZyBnZXRFbnRpdHlOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5nZXRFbnRpdHlDb25maWcoKS5nZXRFbnRpdHlOYW1lKHRoaXMudGFibGUpOwotCX0KLQotCWJvb2xlYW4gaXNKb2luVGFibGUoKSB7Ci0JCXJldHVybiB0aGlzLmpvaW5UYWJsZVJlbGF0aW9uICE9IG51bGw7Ci0JfQotCi0Jdm9pZCBhZGRPd25lZE1hbnlUb01hbnlSZWxhdGlvbihNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24pIHsKLQkJdGhpcy5vd25lZE1hbnlUb01hbnlSZWxhdGlvbnMuYWRkKHJlbGF0aW9uKTsKLQl9Ci0KLQl2b2lkIHJlbW92ZU93bmVkTWFueVRvTWFueVJlbGF0aW9uKE1hbnlUb01hbnlSZWxhdGlvbiByZWxhdGlvbikgewotCQl0aGlzLm93bmVkTWFueVRvTWFueVJlbGF0aW9ucy5yZW1vdmUocmVsYXRpb24pOwotCX0KLQotCXZvaWQgYWRkTm9uT3duZWRNYW55VG9NYW55UmVsYXRpb24oTWFueVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uKSB7Ci0JCXRoaXMubm9uT3duZWRNYW55VG9NYW55UmVsYXRpb25zLmFkZChyZWxhdGlvbik7Ci0JfQotCi0Jdm9pZCByZW1vdmVOb25Pd25lZE1hbnlUb01hbnlSZWxhdGlvbihNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24pIHsKLQkJdGhpcy5ub25Pd25lZE1hbnlUb01hbnlSZWxhdGlvbnMucmVtb3ZlKHJlbGF0aW9uKTsKLQl9Ci0KLQl2b2lkIGFkZE9uZVRvTWFueVJlbGF0aW9uKE9uZVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uKSB7Ci0JCXRoaXMub25lVG9NYW55UmVsYXRpb25zLmFkZChyZWxhdGlvbik7Ci0JfQotCi0JSXRlcmF0b3I8TWFueVRvT25lUmVsYXRpb24+IG1hbnlUb09uZVJlbGF0aW9ucygpIHsKLQkJcmV0dXJuIHRoaXMubWFueVRvT25lUmVsYXRpb25zLml0ZXJhdG9yKCk7Ci0JfQotCi0JSXRlcmF0b3I8T25lVG9NYW55UmVsYXRpb24+IG9uZVRvTWFueVJlbGF0aW9ucygpIHsKLQkJcmV0dXJuIHRoaXMub25lVG9NYW55UmVsYXRpb25zLml0ZXJhdG9yKCk7Ci0JfQotCi0JSXRlcmF0b3I8TWFueVRvTWFueVJlbGF0aW9uPiBvd25lZE1hbnlUb01hbnlSZWxhdGlvbnMoKSB7Ci0JCXJldHVybiB0aGlzLm93bmVkTWFueVRvTWFueVJlbGF0aW9ucy5pdGVyYXRvcigpOwotCX0KLQotCUl0ZXJhdG9yPE1hbnlUb01hbnlSZWxhdGlvbj4gbm9uT3duZWRNYW55VG9NYW55UmVsYXRpb25zKCkgewotCQlyZXR1cm4gdGhpcy5ub25Pd25lZE1hbnlUb01hbnlSZWxhdGlvbnMuaXRlcmF0b3IoKTsKLQl9Ci0KLQkvKioKLQkgKiB0aGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgd2UgZG9uJ3Qgd2FudCBhbiBlbWJlZGRlZCBpZCBhdHRyaWJ1dGUKLQkgKi8KLQlTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZUZvckVtYmVkZGVkSWQoKSB7Ci0JCXJldHVybiB0aGlzLmF0dHJpYnV0ZU5hbWVGb3JFbWJlZGRlZElkOwotCX0KLQotCVN0cmluZyBnZXRBdHRyaWJ1dGVOYW1lRm9yKENvbHVtbiBjb2x1bW4pIHsKLQkJcmV0dXJuIHRoaXMuYmFzaWNBdHRyaWJ1dGVOYW1lcy5nZXQoY29sdW1uKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZUZvcihNYW55VG9PbmVSZWxhdGlvbiByZWxhdGlvbikgewotCQlyZXR1cm4gdGhpcy5tYW55VG9PbmVBdHRyaWJ1dGVOYW1lcy5nZXQocmVsYXRpb24pOwotCX0KLQotCVN0cmluZyBnZXRBdHRyaWJ1dGVOYW1lRm9yKE9uZVRvTWFueVJlbGF0aW9uIHJlbGF0aW9uKSB7Ci0JCXJldHVybiB0aGlzLm9uZVRvTWFueUF0dHJpYnV0ZU5hbWVzLmdldChyZWxhdGlvbik7Ci0JfQotCi0JU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWVGb3JPd25lZChNYW55VG9NYW55UmVsYXRpb24gcmVsYXRpb24pIHsKLQkJcmV0dXJuIHRoaXMub3duZWRNYW55VG9NYW55QXR0cmlidXRlTmFtZXMuZ2V0KHJlbGF0aW9uKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZUZvck5vbk93bmVkKE1hbnlUb01hbnlSZWxhdGlvbiByZWxhdGlvbikgewotCQlyZXR1cm4gdGhpcy5ub25Pd25lZE1hbnlUb01hbnlBdHRyaWJ1dGVOYW1lcy5nZXQocmVsYXRpb24pOwotCX0KLQotCVN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gdGhpcy50YWJsZS5nZXROYW1lKCk7Ci0JfQotCi0JYm9vbGVhbiBqb2luVGFibGVOYW1lSXNEZWZhdWx0KCkgewotCQlyZXR1cm4gdGhpcy50YWJsZS5qb2luVGFibGVOYW1lSXNEZWZhdWx0KCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGludGVybmFsIEFQSSAqKioqKioqKioqCi0KLQkvKioKLQkgKiBpZiB3ZSBhcmUgZ29pbmcgdG8gZ2VuZXJhdGUgYW4gRW1iZWRkZWRJZCBhdHRyaWJ1dGUsIGFkZCBpdHMgbmFtZSB0bwotCSAqICdhdHRyaWJ1dGVOYW1lcycgc28gd2UgZG9uJ3QgY29sbGlkZSB3aXRoIGl0IGxhdGVyLCB3aGVuIGdlbmVyYXRpbmcKLQkgKiBhdHRyaWJ1dGUgbmFtZXMgZm9yIHRoZSBjb2x1bW5zIGV0Yy4KLQkgKi8KLQlwcml2YXRlIHZvaWQgYnVpbGRBdHRyaWJ1dGVOYW1lRm9yRW1iZWRkZWRJZCgpIHsKLQkJaWYgKCh0aGlzLnRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpID4gMSkgJiYgdGhpcy5nZXRFbnRpdHlDb25maWcoKS5nZW5lcmF0ZUVtYmVkZGVkSWRGb3JDb21wb3VuZFBLKCkpIHsKLQkJCXRoaXMuYXR0cmlidXRlTmFtZUZvckVtYmVkZGVkSWQgPSB0aGlzLmNvbmZpZ3VyZUF0dHJpYnV0ZU5hbWUodGhpcy5nZXRFbnRpdHlDb25maWcoKS5nZXRFbWJlZGRlZElkQXR0cmlidXRlTmFtZSgpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFdoaWxlIHdlIGFyZSBmaWd1cmluZyBvdXQgdGhlIG5hbWVzIGZvciB0aGUgbToxIGF0dHJpYnV0ZXMsIHJlbW92ZSBmcm9tIHRoZQotCSAqIHNwZWNpZmllZCBzZXQgb2YgY29sdW1ucyB0aGUgY29sdW1ucyB0aGF0IGFyZSBvbmx5IHBhcnQgb2YgdGhlIGZvcmVpZ24ga2V5cwotCSAqIChsZWF2aW5nIHRoZSByZW1haW5pbmcgY29sdW1ucyBmb3IgYmFzaWMgYXR0cmlidXRlcykuCi0JICogU3RvcmUgdGhlIGNhbGN1bGF0ZWQgbmFtZXMgc28gd2UgY2FuIGdldCB0aGVtIGJhY2sgbGF0ZXIsIHdoZW4gd2UKLQkgKiBhcmUgZ2VuZXJhdGluZyBzb3VyY2UuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkTWFueVRvT25lQXR0cmlidXRlTmFtZXMoU2V0PENvbHVtbj4gY29sdW1ucykgewotCQlmb3IgKE1hbnlUb09uZVJlbGF0aW9uIHJlbGF0aW9uIDogdGhpcy5tYW55VG9PbmVSZWxhdGlvbnMpIHsKLQkJCUNvbGxlY3Rpb25Ub29scy5yZW1vdmVBbGwoY29sdW1ucywgcmVsYXRpb24uZ2V0Rm9yZWlnbktleSgpLm5vblByaW1hcnlLZXlCYXNlQ29sdW1ucygpKTsKLQkJCUNvbGxlY3Rpb25Ub29scy5hZGRBbGwodGhpcy5mb3JlaWduS2V5Q29sdW1ucywgcmVsYXRpb24uZ2V0Rm9yZWlnbktleSgpLmJhc2VDb2x1bW5zKCkpOwotCQkJU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmNvbmZpZ3VyZUF0dHJpYnV0ZU5hbWUocmVsYXRpb24uZ2V0QXR0cmlidXRlTmFtZSgpKTsKLQkJCXJlbGF0aW9uLnNldE1hcHBlZEJ5KGF0dHJpYnV0ZU5hbWUpOwotCQkJdGhpcy5tYW55VG9PbmVBdHRyaWJ1dGVOYW1lcy5wdXQocmVsYXRpb24sIGF0dHJpYnV0ZU5hbWUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQnVpbGQgYSB1bmlxdWUgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBzcGVjaWZpZWQgImJhc2ljIiBjb2x1bW5zLAotCSAqIGNoZWNraW5nIGZvciBuYW1lIGNvbGxpc2lvbnMuCi0JICogU3RvcmUgdGhlIGNhbGN1bGF0ZWQgbmFtZXMgc28gd2UgY2FuIGdldCB0aGVtIGJhY2sgbGF0ZXIsIHdoZW4gd2UKLQkgKiBhcmUgZ2VuZXJhdGluZyBzb3VyY2UuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQmFzaWNBdHRyaWJ1dGVOYW1lcyhTZXQ8Q29sdW1uPiBjb2x1bW5zKSB7Ci0JCWZvciAoQ29sdW1uIGNvbHVtbiA6IGNvbHVtbnMpIHsKLQkJCVN0cmluZyBhdHRyaWJ1dGVOYW1lID0gdGhpcy5jb25maWd1cmVBdHRyaWJ1dGVOYW1lKGNvbHVtbi5nZXROYW1lKCkpOwotCQkJdGhpcy5iYXNpY0F0dHJpYnV0ZU5hbWVzLnB1dChjb2x1bW4sIGF0dHJpYnV0ZU5hbWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkT25lVG9NYW55QXR0cmlidXRlTmFtZXMoKSB7Ci0JCWZvciAoT25lVG9NYW55UmVsYXRpb24gcmVsYXRpb24gOiB0aGlzLm9uZVRvTWFueVJlbGF0aW9ucykgewotCQkJU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmNvbmZpZ3VyZUF0dHJpYnV0ZU5hbWUocmVsYXRpb24uZ2V0QXR0cmlidXRlTmFtZSgpKTsKLQkJCXRoaXMub25lVG9NYW55QXR0cmlidXRlTmFtZXMucHV0KHJlbGF0aW9uLCBhdHRyaWJ1dGVOYW1lKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE93bmVkTWFueVRvTWFueUF0dHJpYnV0ZU5hbWVzKCkgewotCQlmb3IgKE1hbnlUb01hbnlSZWxhdGlvbiByZWxhdGlvbiA6IHRoaXMub3duZWRNYW55VG9NYW55UmVsYXRpb25zKSB7Ci0JCQlTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMuY29uZmlndXJlQXR0cmlidXRlTmFtZShyZWxhdGlvbi5nZXRPd25lZEF0dHJpYnV0ZU5hbWUoKSk7Ci0JCQlyZWxhdGlvbi5zZXRNYXBwZWRCeShhdHRyaWJ1dGVOYW1lKTsKLQkJCXRoaXMub3duZWRNYW55VG9NYW55QXR0cmlidXRlTmFtZXMucHV0KHJlbGF0aW9uLCBhdHRyaWJ1dGVOYW1lKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE5vbk93bmVkTWFueVRvTWFueUF0dHJpYnV0ZU5hbWVzKCkgewotCQlmb3IgKE1hbnlUb01hbnlSZWxhdGlvbiByZWxhdGlvbiA6IHRoaXMubm9uT3duZWRNYW55VG9NYW55UmVsYXRpb25zKSB7Ci0JCQlTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRoaXMuY29uZmlndXJlQXR0cmlidXRlTmFtZShyZWxhdGlvbi5nZXROb25Pd25lZEF0dHJpYnV0ZU5hbWUoKSk7Ci0JCQl0aGlzLm5vbk93bmVkTWFueVRvTWFueUF0dHJpYnV0ZU5hbWVzLnB1dChyZWxhdGlvbiwgYXR0cmlidXRlTmFtZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG5hbWUgdG8gc29tZXRoaW5nIHVuaXF1ZSBmb3IgdGhlIGVudGl0eSwKLQkgKiBjb252ZXJ0aW5nIGl0IHRvIHNvbWV0aGluZyBKYXZhLWxpa2UgaWYgdGhlIGNvbmZpZyBmbGFnIGlzIHNldC4KLQkgKiBTdG9yZSB0aGUgY2FsY3VsYXRlZCBuYW1lIHRvIHByZXZlbnQgZnV0dXJlIG5hbWUgY29sbGlzaW9ucy4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBjb25maWd1cmVBdHRyaWJ1dGVOYW1lKFN0cmluZyBhdHRyaWJ1dGVOYW1lKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBhdHRyaWJ1dGVOYW1lOwotCQlpZiAodGhpcy5nZXRFbnRpdHlDb25maWcoKS5jb252ZXJ0VG9KYXZhU3R5bGVJZGVudGlmaWVycygpKSB7Ci0JCQlyZXN1bHQgPSBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKHJlc3VsdCwgdGhpcy5hdHRyaWJ1dGVOYW1lcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvLyBmaXJzdCwgY29udmVydCB0aGUgYXR0cmlidXRlIG5hbWUgdG8gYSBsZWdhbCBKYXZhIGlkZW50aWZpZXIKLQkJCXJlc3VsdCA9IE5hbWVUb29scy5jb252ZXJ0VG9KYXZhSWRlbnRpZmllcihyZXN1bHQpOwotCQkJLy8gdGhlbiBtYWtlIHN1cmUgaXQncyB1bmlxdWUKLQkJCXJlc3VsdCA9IE5hbWVUb29scy51bmlxdWVOYW1lRm9ySWdub3JlQ2FzZShhdHRyaWJ1dGVOYW1lLCB0aGlzLmF0dHJpYnV0ZU5hbWVzKTsKLQkJfQotCQl0aGlzLmF0dHJpYnV0ZU5hbWVzLmFkZChyZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMudGFibGUpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvSlBBLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9KUEEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZjMGNjNi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9KUEEuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwub2xkOwotCi0KLS8qKgotICogSlBBIEphdmEtcmVsYXRlZCBzdHVmZiAoYW5ub3RhdGlvbnMgZXRjLikKLSAqIAotICogUHJvdmlzaW9uYWwgQVBJOiBUaGlzIGludGVyZmFjZSBpcyBwYXJ0IG9mIGFuIGludGVyaW0gQVBJIHRoYXQgaXMgc3RpbGwKLSAqIHVuZGVyIGRldmVsb3BtZW50IGFuZCBleHBlY3RlZCB0byBjaGFuZ2Ugc2lnbmlmaWNhbnRseSBiZWZvcmUgcmVhY2hpbmcKLSAqIHN0YWJpbGl0eS4gSXQgaXMgYXZhaWxhYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UgdG8gc29saWNpdCBmZWVkYmFjayBmcm9tCi0gKiBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzIHRoaXMgQVBJCi0gKiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGludGVyZmFjZSBKUEEgewotCi0JLy8gSlBBIHBhY2thZ2UKLQlTdHJpbmcgUEFDS0FHRSA9ICJqYXZheC5wZXJzaXN0ZW5jZSI7Ci0JU3RyaW5nIFBBQ0tBR0VfID0gUEFDS0FHRSArICcuJzsKLQotCi0JLy8gKioqKioqKioqKiBBUEkgKioqKioqKioqKgotCi0JLy8gSlBBIGFubm90YXRpb25zCi0JU3RyaW5nIEFTU09DSUFUSU9OX09WRVJSSURFID0gUEFDS0FHRV8gKyAiQXNzb2NpYXRpb25PdmVycmlkZSI7Ci0JCVN0cmluZyBBU1NPQ0lBVElPTl9PVkVSUklERV9fTkFNRSA9ICJuYW1lIjsKLQkJU3RyaW5nIEFTU09DSUFUSU9OX09WRVJSSURFX19KT0lOX0NPTFVNTlMgPSAiam9pbkNvbHVtbnMiOwotCVN0cmluZyBBU1NPQ0lBVElPTl9PVkVSUklERVMgPSBQQUNLQUdFXyArICJBc3NvY2lhdGlvbk92ZXJyaWRlcyI7Ci0JCVN0cmluZyBBU1NPQ0lBVElPTl9PVkVSUklERVNfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgQVRUUklCVVRFX09WRVJSSURFID0gUEFDS0FHRV8gKyAiQXR0cmlidXRlT3ZlcnJpZGUiOwotCQlTdHJpbmcgQVRUUklCVVRFX09WRVJSSURFX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgQVRUUklCVVRFX09WRVJSSURFX19DT0xVTU4gPSAiY29sdW1uIjsKLQlTdHJpbmcgQVRUUklCVVRFX09WRVJSSURFUyA9IFBBQ0tBR0VfICsgIkF0dHJpYnV0ZU92ZXJyaWRlcyI7Ci0JCVN0cmluZyBBVFRSSUJVVEVfT1ZFUlJJREVTX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIEJBU0lDID0gUEFDS0FHRV8gKyAiQmFzaWMiOwotCQlTdHJpbmcgQkFTSUNfX0ZFVENIID0gImZldGNoIjsKLQkJU3RyaW5nIEJBU0lDX19PUFRJT05BTCA9ICJvcHRpb25hbCI7Ci0JU3RyaW5nIENPTFVNTiA9IFBBQ0tBR0VfICsgIkNvbHVtbiI7Ci0JCVN0cmluZyBDT0xVTU5fX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBDT0xVTU5fX1VOSVFVRSA9ICJ1bmlxdWUiOwotCQlTdHJpbmcgQ09MVU1OX19OVUxMQUJMRSA9ICJudWxsYWJsZSI7Ci0JCVN0cmluZyBDT0xVTU5fX0lOU0VSVEFCTEUgPSAiaW5zZXJ0YWJsZSI7Ci0JCVN0cmluZyBDT0xVTU5fX1VQREFUQUJMRSA9ICJ1cGRhdGFibGUiOwotCQlTdHJpbmcgQ09MVU1OX19DT0xVTU5fREVGSU5JVElPTiA9ICJjb2x1bW5EZWZpbml0aW9uIjsKLQkJU3RyaW5nIENPTFVNTl9fVEFCTEUgPSAidGFibGUiOwotCQlTdHJpbmcgQ09MVU1OX19MRU5HVEggPSAibGVuZ3RoIjsKLQkJU3RyaW5nIENPTFVNTl9fUFJFQ0lTSU9OID0gInByZWNpc2lvbiI7Ci0JCVN0cmluZyBDT0xVTU5fX1NDQUxFID0gInNjYWxlIjsKLQlTdHJpbmcgQ09MVU1OX1JFU1VMVCA9IFBBQ0tBR0VfICsgIkNvbHVtblJlc3VsdCI7Ci0JCVN0cmluZyBDT0xVTU5fUkVTVUxUX19OQU1FID0gIm5hbWUiOwotCVN0cmluZyBESVNDUklNSU5BVE9SX0NPTFVNTiA9IFBBQ0tBR0VfICsgIkRpc2NyaW1pbmF0b3JDb2x1bW4iOwotCQlTdHJpbmcgRElTQ1JJTUlOQVRPUl9DT0xVTU5fX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBESVNDUklNSU5BVE9SX0NPTFVNTl9fRElTQ1JJTUlOQVRPUl9UWVBFID0gImRpc2NyaW1pbmF0b3JUeXBlIjsKLQkJU3RyaW5nIERJU0NSSU1JTkFUT1JfQ09MVU1OX19DT0xVTU5fREVGSU5JVElPTiA9ICJjb2x1bW5EZWZpbml0aW9uIjsKLQkJU3RyaW5nIERJU0NSSU1JTkFUT1JfQ09MVU1OX19MRU5HVEggPSAibGVuZ3RoIjsKLQlTdHJpbmcgRElTQ1JJTUlOQVRPUl9WQUxVRSA9IFBBQ0tBR0VfICsgIkRpc2NyaW1pbmF0b3JWYWx1ZSI7Ci0JCVN0cmluZyBESVNDUklNSU5BVE9SX1ZBTFVFX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIEVNQkVEREFCTEUgPSBQQUNLQUdFXyArICJFbWJlZGRhYmxlIjsKLQlTdHJpbmcgRU1CRURERUQgPSBQQUNLQUdFXyArICJFbWJlZGRlZCI7Ci0JU3RyaW5nIEVNQkVEREVEX0lEID0gUEFDS0FHRV8gKyAiRW1iZWRkZWRJZCI7Ci0JU3RyaW5nIEVOVElUWSA9IFBBQ0tBR0VfICsgIkVudGl0eSI7Ci0JCVN0cmluZyBFTlRJVFlfX05BTUUgPSAibmFtZSI7Ci0JU3RyaW5nIEVOVElUWV9MSVNURU5FUlMgPSBQQUNLQUdFXyArICJFbnRpdHlMaXN0ZW5lcnMiOwotCQlTdHJpbmcgRU5USVRZX0xJU1RFTkVSU19fVkFMVUUgPSAidmFsdWUiOwotCVN0cmluZyBFTlRJVFlfUkVTVUxUID0gUEFDS0FHRV8gKyAiRW50aXR5UmVzdWx0IjsKLQkJU3RyaW5nIEVOVElUWV9SRVNVTFRfX0VOVElUWV9DTEFTUyA9ICJlbnRpdHlDbGFzcyI7Ci0JCVN0cmluZyBFTlRJVFlfUkVTVUxUX19GSUVMRFMgPSAiZmllbGRzIjsKLQkJU3RyaW5nIEVOVElUWV9SRVNVTFRfX0RJU0NSSU1JTkFUT1JfQ09MVU1OID0gImRpc2NyaW1pbmF0b3JDb2x1bW4iOwotCVN0cmluZyBFTlVNRVJBVEVEID0gUEFDS0FHRV8gKyAiRW51bWVyYXRlZCI7Ci0JCVN0cmluZyBFTlVNRVJBVEVEX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIEVYQ0xVREVfREVGQVVMVF9MSVNURU5FUlMgPSBQQUNLQUdFXyArICJFeGNsdWRlRGVmYXVsdExpc3RlbmVycyI7Ci0JU3RyaW5nIEVYQ0xVREVfU1VQRVJDTEFTU19MSVNURU5FUlMgPSBQQUNLQUdFXyArICJFeGNsdWRlU3VwZXJjbGFzc0xpc3RlbmVycyI7Ci0JU3RyaW5nIEZJRUxEX1JFU1VMVCA9IFBBQ0tBR0VfICsgIkZpZWxkUmVzdWx0IjsKLQkJU3RyaW5nIEZJRUxEX1JFU1VMVF9fTkFNRSA9ICJuYW1lIjsKLQkJU3RyaW5nIEZJRUxEX1JFU1VMVF9fQ09MVU1OID0gImNvbHVtbiI7Ci0JU3RyaW5nIEZMVVNIX01PREUgPSBQQUNLQUdFXyArICJGbHVzaE1vZGUiOwotCQlTdHJpbmcgRkxVU0hfTU9ERV9fVkFMVUUgPSAidmFsdWUiOwotCVN0cmluZyBHRU5FUkFURURfVkFMVUUgPSBQQUNLQUdFXyArICJHZW5lcmF0ZWRWYWx1ZSI7Ci0JCVN0cmluZyBHRU5FUkFURURfVkFMVUVfX1NUUkFURUdZID0gInN0cmF0ZWd5IjsKLQkJU3RyaW5nIEdFTkVSQVRFRF9WQUxVRV9fR0VORVJBVE9SID0gImdlbmVyYXRvciI7Ci0JU3RyaW5nIElEID0gUEFDS0FHRV8gKyAiSWQiOwotCVN0cmluZyBJRF9DTEFTUyA9IFBBQ0tBR0VfICsgIklkQ2xhc3MiOwotCQlTdHJpbmcgSURfQ0xBU1NfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgSU5IRVJJVEFOQ0UgPSBQQUNLQUdFXyArICJJbmhlcml0YW5jZSI7Ci0JCVN0cmluZyBJTkhFUklUQU5DRV9fU1RSQVRFR1kgPSAic3RyYXRlZ3kiOwotCVN0cmluZyBKT0lOX0NPTFVNTiA9IFBBQ0tBR0VfICsgIkpvaW5Db2x1bW4iOwotCQlTdHJpbmcgSk9JTl9DT0xVTU5fX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fUkVGRVJFTkNFRF9DT0xVTU5fTkFNRSA9ICJyZWZlcmVuY2VkQ29sdW1uTmFtZSI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fVU5JUVVFID0gInVuaXF1ZSI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fTlVMTEFCTEUgPSAibnVsbGFibGUiOwotCQlTdHJpbmcgSk9JTl9DT0xVTU5fX0lOU0VSVEFCTEUgPSAiaW5zZXJ0YWJsZSI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fVVBEQVRBQkxFID0gInVwZGF0YWJsZSI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fQ09MVU1OX0RFRklOSVRJT04gPSAiY29sdW1uRGVmaW5pdGlvbiI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTl9fVEFCTEUgPSAidGFibGUiOwotCVN0cmluZyBKT0lOX0NPTFVNTlMgPSBQQUNLQUdFXyArICJKb2luQ29sdW1ucyI7Ci0JCVN0cmluZyBKT0lOX0NPTFVNTlNfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgSk9JTl9UQUJMRSA9IFBBQ0tBR0VfICsgIkpvaW5UYWJsZSI7Ci0JCVN0cmluZyBKT0lOX1RBQkxFX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgSk9JTl9UQUJMRV9fQ0FUQUxPRyA9ICJjYXRhbG9nIjsKLQkJU3RyaW5nIEpPSU5fVEFCTEVfX1NDSEVNQSA9ICJzY2hlbWEiOwotCQlTdHJpbmcgSk9JTl9UQUJMRV9fSk9JTl9DT0xVTU5TID0gImpvaW5Db2x1bW5zIjsKLQkJU3RyaW5nIEpPSU5fVEFCTEVfX0lOVkVSU0VfSk9JTl9DT0xVTU5TID0gImludmVyc2VKb2luQ29sdW1ucyI7Ci0JCVN0cmluZyBKT0lOX1RBQkxFX19VTklRVUVfQ09OU1RSQUlOVFMgPSAidW5pcXVlQ29uc3RyYWludHMiOwotCVN0cmluZyBMT0IgPSBQQUNLQUdFXyArICJMb2IiOwotCVN0cmluZyBNQU5ZX1RPX01BTlkgPSBQQUNLQUdFXyArICJNYW55VG9NYW55IjsKLQkJU3RyaW5nIE1BTllfVE9fTUFOWV9fVEFSR0VUX0VOVElUWSA9ICJ0YXJnZXRFbnRpdHkiOwotCQlTdHJpbmcgTUFOWV9UT19NQU5ZX19DQVNDQURFID0gImNhc2NhZGUiOwotCQlTdHJpbmcgTUFOWV9UT19NQU5ZX19GRVRDSCA9ICJmZXRjaCI7Ci0JCVN0cmluZyBNQU5ZX1RPX01BTllfX01BUFBFRF9CWSA9ICJtYXBwZWRCeSI7Ci0JU3RyaW5nIE1BTllfVE9fT05FID0gUEFDS0FHRV8gKyAiTWFueVRvT25lIjsKLQkJU3RyaW5nIE1BTllfVE9fT05FX19UQVJHRVRfRU5USVRZID0gInRhcmdldEVudGl0eSI7Ci0JCVN0cmluZyBNQU5ZX1RPX09ORV9fQ0FTQ0FERSA9ICJjYXNjYWRlIjsKLQkJU3RyaW5nIE1BTllfVE9fT05FX19GRVRDSCA9ICJmZXRjaCI7Ci0JCVN0cmluZyBNQU5ZX1RPX09ORV9fT1BUSU9OQUwgPSAib3B0aW9uYWwiOwotCVN0cmluZyBNQVBfS0VZID0gUEFDS0FHRV8gKyAiTWFwS2V5IjsKLQkJU3RyaW5nIE1BUF9LRVlfX05BTUUgPSAibmFtZSI7Ci0JU3RyaW5nIE1BUFBFRF9TVVBFUkNMQVNTID0gUEFDS0FHRV8gKyAiTWFwcGVkU3VwZXJjbGFzcyI7Ci0JU3RyaW5nIE5BTUVEX05BVElWRV9RVUVSSUVTID0gUEFDS0FHRV8gKyAiTmFtZWROYXRpdmVRdWVyaWVzIjsKLQkJU3RyaW5nIE5BTUVEX05BVElWRV9RVUVSSUVTX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIE5BTUVEX05BVElWRV9RVUVSWSA9IFBBQ0tBR0VfICsgIk5hbWVkTmF0aXZlUXVlcnkiOwotCQlTdHJpbmcgTkFNRURfTkFUSVZFX1FVRVJZX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgTkFNRURfTkFUSVZFX1FVRVJZX19RVUVSWSA9ICJxdWVyeSI7Ci0JCVN0cmluZyBOQU1FRF9OQVRJVkVfUVVFUllfX0hJTlRTID0gImhpbnRzIjsKLQkJU3RyaW5nIE5BTUVEX05BVElWRV9RVUVSWV9fUkVTVUxUX0NMQVNTID0gInJlc3VsdENsYXNzIjsKLQkJU3RyaW5nIE5BTUVEX05BVElWRV9RVUVSWV9fUkVTVUxUX1NFVF9NQVBQSU5HID0gInJlc3VsdFNldE1hcHBpbmciOwotCVN0cmluZyBOQU1FRF9RVUVSSUVTID0gUEFDS0FHRV8gKyAiTmFtZWRRdWVyaWVzIjsKLQkJU3RyaW5nIE5BTUVEX1FVRVJJRVNfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgTkFNRURfUVVFUlkgPSBQQUNLQUdFXyArICJOYW1lZFF1ZXJ5IjsKLQkJU3RyaW5nIE5BTUVEX1FVRVJZX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgTkFNRURfUVVFUllfX1FVRVJZID0gInF1ZXJ5IjsKLQkJU3RyaW5nIE5BTUVEX1FVRVJZX19ISU5UUyA9ICJoaW50cyI7Ci0JU3RyaW5nIE9ORV9UT19NQU5ZID0gUEFDS0FHRV8gKyAiT25lVG9NYW55IjsKLQkJU3RyaW5nIE9ORV9UT19NQU5ZX19UQVJHRVRfRU5USVRZID0gInRhcmdldEVudGl0eSI7Ci0JCVN0cmluZyBPTkVfVE9fTUFOWV9fQ0FTQ0FERSA9ICJjYXNjYWRlIjsKLQkJU3RyaW5nIE9ORV9UT19NQU5ZX19GRVRDSCA9ICJmZXRjaCI7Ci0JCVN0cmluZyBPTkVfVE9fTUFOWV9fTUFQUEVEX0JZID0gIm1hcHBlZEJ5IjsKLQlTdHJpbmcgT05FX1RPX09ORSA9IFBBQ0tBR0VfICsgIk9uZVRvT25lIjsKLQkJU3RyaW5nIE9ORV9UT19PTkVfX1RBUkdFVF9FTlRJVFkgPSAidGFyZ2V0RW50aXR5IjsKLQkJU3RyaW5nIE9ORV9UT19PTkVfX0NBU0NBREUgPSAiY2FzY2FkZSI7Ci0JCVN0cmluZyBPTkVfVE9fT05FX19GRVRDSCA9ICJmZXRjaCI7Ci0JCVN0cmluZyBPTkVfVE9fT05FX19PUFRJT05BTCA9ICJvcHRpb25hbCI7Ci0JCVN0cmluZyBPTkVfVE9fT05FX19NQVBQRURfQlkgPSAibWFwcGVkQnkiOwotCVN0cmluZyBPUkRFUl9CWSA9IFBBQ0tBR0VfICsgIk9yZGVyQnkiOwotCQlTdHJpbmcgT1JERVJfQllfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgUEVSU0lTVEVOQ0VfQ09OVEVYVCA9IFBBQ0tBR0VfICsgIlBlcnNpc3RlbmNlQ29udGV4dCI7Ci0JCVN0cmluZyBQRVJTSVNURU5DRV9DT05URVhUX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgUEVSU0lTVEVOQ0VfQ09OVEVYVF9fVU5JVF9OQU1FID0gInVuaXROYW1lIjsKLQkJU3RyaW5nIFBFUlNJU1RFTkNFX0NPTlRFWFRfX1RZUEUgPSAidHlwZSI7Ci0JU3RyaW5nIFBFUlNJU1RFTkNFX0NPTlRFWFRTID0gUEFDS0FHRV8gKyAiUGVyc2lzdGVuY2VDb250ZXh0cyI7Ci0JCVN0cmluZyBQRVJTSVNURU5DRV9DT05URVhUU19fVkFMVUUgPSAidmFsdWUiOwotCVN0cmluZyBQRVJTSVNURU5DRV9VTklUID0gUEFDS0FHRV8gKyAiWG1sUGVyc2lzdGVuY2VVbml0IjsKLQkJU3RyaW5nIFBFUlNJU1RFTkNFX1VOSVRfX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBQRVJTSVNURU5DRV9VTklUX19VTklUX05BTUUgPSAidW5pdE5hbWUiOwotCVN0cmluZyBQRVJTSVNURU5DRV9VTklUUyA9IFBBQ0tBR0VfICsgIlBlcnNpc3RlbmNlVW5pdHMiOwotCQlTdHJpbmcgUEVSU0lTVEVOQ0VfVU5JVFNfX1ZBTFVFID0gInZhbHVlIjsKLQlTdHJpbmcgUE9TVF9MT0FEID0gUEFDS0FHRV8gKyAiUG9zdExvYWQiOwotCVN0cmluZyBQT1NUX1BFUlNJU1QgPSBQQUNLQUdFXyArICJQb3N0UGVyc2lzdCI7Ci0JU3RyaW5nIFBPU1RfUkVNT1ZFID0gUEFDS0FHRV8gKyAiUG9zdFJlbW92ZSI7Ci0JU3RyaW5nIFBPU1RfVVBEQVRFID0gUEFDS0FHRV8gKyAiUG9zdFVwZGF0ZSI7Ci0JU3RyaW5nIFBSRV9QRVJTSVNUID0gUEFDS0FHRV8gKyAiUHJlUGVyc2lzdCI7Ci0JU3RyaW5nIFBSRV9SRU1PVkUgPSBQQUNLQUdFXyArICJQcmVSZW1vdmUiOwotCVN0cmluZyBQUkVfVVBEQVRFID0gUEFDS0FHRV8gKyAiUHJlVXBkYXRlIjsKLQlTdHJpbmcgUFJJTUFSWV9LRVlfSk9JTl9DT0xVTU4gPSBQQUNLQUdFXyArICJQcmltYXJ5S2V5Sm9pbkNvbHVtbiI7Ci0JCVN0cmluZyBQUklNQVJZX0tFWV9KT0lOX0NPTFVNTl9fTkFNRSA9ICJuYW1lIjsKLQkJU3RyaW5nIFBSSU1BUllfS0VZX0pPSU5fQ09MVU1OX19SRUZFUkVOQ0VEX0NPTFVNTl9OQU1FID0gInJlZmVyZW5jZWRDb2x1bW5OYW1lIjsKLQkJU3RyaW5nIFBSSU1BUllfS0VZX0pPSU5fQ09MVU1OX19DT0xVTU5fREVGSU5JVElPTiA9ICJjb2x1bW5EZWZpbml0aW9uIjsKLQlTdHJpbmcgUFJJTUFSWV9LRVlfSk9JTl9DT0xVTU5TID0gUEFDS0FHRV8gKyAiUHJpbWFyeUtleUpvaW5Db2x1bW5zIjsKLQkJU3RyaW5nIFBSSU1BUllfS0VZX0pPSU5fQ09MVU1OU19fVkFMVUUgPSAidmFsdWUiOwotCVN0cmluZyBRVUVSWV9ISU5UID0gUEFDS0FHRV8gKyAiUXVlcnlIaW50IjsKLQkJU3RyaW5nIFFVRVJZX0hJTlRfX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBRVUVSWV9ISU5UX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIFNFQ09OREFSWV9UQUJMRSA9IFBBQ0tBR0VfICsgIlNlY29uZGFyeVRhYmxlIjsKLQkJU3RyaW5nIFNFQ09OREFSWV9UQUJMRV9fTkFNRSA9ICJuYW1lIjsKLQkJU3RyaW5nIFNFQ09OREFSWV9UQUJMRV9fQ0FUQUxPRyA9ICJjYXRhbG9nIjsKLQkJU3RyaW5nIFNFQ09OREFSWV9UQUJMRV9fU0NIRU1BID0gInNjaGVtYSI7Ci0JCVN0cmluZyBTRUNPTkRBUllfVEFCTEVfX1BLX0pPSU5fQ09MVU1OUyA9ICJwa0pvaW5Db2x1bW5zIjsKLQkJU3RyaW5nIFNFQ09OREFSWV9UQUJMRV9fVU5JUVVFX0NPTlNUUkFJTlRTID0gInVuaXF1ZUNvbnN0cmFpbnRzIjsKLQlTdHJpbmcgU0VDT05EQVJZX1RBQkxFUyA9IFBBQ0tBR0VfICsgIlNlY29uZGFyeVRhYmxlcyI7Ci0JCVN0cmluZyBTRUNPTkRBUllfVEFCTEVTX19WQUxVRSA9ICJ2YWx1ZSI7Ci0JU3RyaW5nIFNFUVVFTkNFX0dFTkVSQVRPUiA9IFBBQ0tBR0VfICsgIlNlcXVlbmNlR2VuZXJhdG9yIjsKLQkJU3RyaW5nIFNFUVVFTkNFX0dFTkVSQVRPUl9fTkFNRSA9ICJuYW1lIjsKLQkJU3RyaW5nIFNFUVVFTkNFX0dFTkVSQVRPUl9fU0VRVUVOQ0VfTkFNRSA9ICJzZXF1ZW5jZU5hbWUiOwotCQlTdHJpbmcgU0VRVUVOQ0VfR0VORVJBVE9SX19JTklUSUFMX1ZBTFVFID0gImluaXRpYWxWYWx1ZSI7Ci0JCVN0cmluZyBTRVFVRU5DRV9HRU5FUkFUT1JfX0FMTE9DQVRJT05fU0laRSA9ICJhbGxvY2F0aW9uU2l6ZSI7Ci0JU3RyaW5nIFNRTF9SRVNVTFRfU0VUX01BUFBJTkcgPSBQQUNLQUdFXyArICJTcWxSZXN1bHRTZXRNYXBwaW5nIjsKLQkJU3RyaW5nIFNRTF9SRVNVTFRfU0VUX01BUFBJTkdfX05BTUUgPSAibmFtZSI7Ci0JCVN0cmluZyBTUUxfUkVTVUxUX1NFVF9NQVBQSU5HX19FTlRJVElFUyA9ICJlbnRpdGllcyI7Ci0JCVN0cmluZyBTUUxfUkVTVUxUX1NFVF9NQVBQSU5HX19DT0xVTU5TID0gImNvbHVtbnMiOwotCVN0cmluZyBUQUJMRSA9IFBBQ0tBR0VfICsgIlRhYmxlIjsKLQkJU3RyaW5nIFRBQkxFX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgVEFCTEVfX0NBVEFMT0cgPSAiY2F0YWxvZyI7Ci0JCVN0cmluZyBUQUJMRV9fU0NIRU1BID0gInNjaGVtYSI7Ci0JCVN0cmluZyBUQUJMRV9fVU5JUVVFX0NPTlNUUkFJTlRTID0gInVuaXF1ZUNvbnN0cmFpbnRzIjsKLQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SID0gUEFDS0FHRV8gKyAiVGFibGVHZW5lcmF0b3IiOwotCQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SX19OQU1FID0gIm5hbWUiOwotCQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SX19UQUJMRSA9ICJ0YWJsZSI7Ci0JCVN0cmluZyBUQUJMRV9HRU5FUkFUT1JfX0NBVEFMT0cgPSAiY2F0YWxvZyI7Ci0JCVN0cmluZyBUQUJMRV9HRU5FUkFUT1JfX1NDSEVNQSA9ICJzY2hlbWEiOwotCQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SX19QS19DT0xVTU5fTkFNRSA9ICJwa0NvbHVtbk5hbWUiOwotCQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SX19WQUxVRV9DT0xVTU5fTkFNRSA9ICJ2YWx1ZUNvbHVtbk5hbWUiOwotCQlTdHJpbmcgVEFCTEVfR0VORVJBVE9SX19QS19DT0xVTU5fVkFMVUUgPSAicGtDb2x1bW5WYWx1ZSI7Ci0JCVN0cmluZyBUQUJMRV9HRU5FUkFUT1JfX0lOSVRJQUxfVkFMVUUgPSAiaW5pdGlhbFZhbHVlIjsKLQkJU3RyaW5nIFRBQkxFX0dFTkVSQVRPUl9fQUxMT0NBVElPTl9TSVpFID0gImFsbG9jYXRpb25TaXplIjsKLQkJU3RyaW5nIFRBQkxFX0dFTkVSQVRPUl9fVU5JUVVFX0NPTlNUUkFJTlRTID0gInVuaXF1ZUNvbnN0cmFpbnRzIjsKLQlTdHJpbmcgVEVNUE9SQUwgPSBQQUNLQUdFXyArICJUZW1wb3JhbCI7Ci0JCVN0cmluZyBURU1QT1JBTF9fVkFMVUUgPSAidmFsdWUiOwotCVN0cmluZyBUUkFOU0lFTlQgPSBQQUNLQUdFXyArICJUcmFuc2llbnQiOwotCVN0cmluZyBVTklRVUVfQ09OU1RSQUlOVCA9IFBBQ0tBR0VfICsgIlVuaXF1ZUNvbnN0cmFpbnQiOwotCQlTdHJpbmcgVU5JUVVFX0NPTlNUUkFJTlRfX0NPTFVNTl9OQU1FUyA9ICJjb2x1bW5OYW1lcyI7Ci0JU3RyaW5nIFZFUlNJT04gPSBQQUNLQUdFXyArICJWZXJzaW9uIjsKLQotCS8vIEpQQSBlbnVtcwotCVN0cmluZyBHRU5FUkFUSU9OX1RZUEUgPSBQQUNLQUdFXyArICJHZW5lcmF0aW9uVHlwZSI7Ci0JCVN0cmluZyBHRU5FUkFUSU9OX1RZUEVfID0gR0VORVJBVElPTl9UWVBFICsgJy4nOwotCQlTdHJpbmcgR0VORVJBVElPTl9UWVBFX19BVVRPID0gR0VORVJBVElPTl9UWVBFXyArICJBVVRPIjsKLQkJU3RyaW5nIEdFTkVSQVRJT05fVFlQRV9fSURFTlRJVFkgPSBHRU5FUkFUSU9OX1RZUEVfICsgIklERU5USVRZIjsKLQkJU3RyaW5nIEdFTkVSQVRJT05fVFlQRV9fU0VRVUVOQ0UgPSBHRU5FUkFUSU9OX1RZUEVfICsgIlNFUVVFTkNFIjsKLQkJU3RyaW5nIEdFTkVSQVRJT05fVFlQRV9fVEFCTEUgPSBHRU5FUkFUSU9OX1RZUEVfICsgIlRBQkxFIjsKLQotCVN0cmluZyBDQVNDQURFX1RZUEUgPSBQQUNLQUdFXyArICJDYXNjYWRlVHlwZSI7Ci0JCVN0cmluZyBDQVNDQURFX1RZUEVfID0gQ0FTQ0FERV9UWVBFICsgJy4nOwotCQlTdHJpbmcgQ0FTQ0FERV9UWVBFX19BTEwgPSBDQVNDQURFX1RZUEVfICsgIkFMTCI7Ci0JCVN0cmluZyBDQVNDQURFX1RZUEVfX01FUkdFID0gQ0FTQ0FERV9UWVBFXyArICJNRVJHRSI7Ci0JCVN0cmluZyBDQVNDQURFX1RZUEVfX1BFUlNJU1QgPSBDQVNDQURFX1RZUEVfICsgIlBFUlNJU1QiOwotCQlTdHJpbmcgQ0FTQ0FERV9UWVBFX19SRUZSRVNIID0gQ0FTQ0FERV9UWVBFXyArICJSRUZSRVNIIjsKLQkJU3RyaW5nIENBU0NBREVfVFlQRV9fUkVNT1ZFID0gQ0FTQ0FERV9UWVBFXyArICJSRU1PVkUiOwotCi0JU3RyaW5nIERJU0NSSU1JTkFUT1JfVFlQRSA9IFBBQ0tBR0VfICsgIkRpc2NyaW1pbmF0b3JUeXBlIjsKLQkJU3RyaW5nIERJU0NSSU1JTkFUT1JfVFlQRV8gPSBESVNDUklNSU5BVE9SX1RZUEUgKyAnLic7Ci0JCVN0cmluZyBESVNDUklNSU5BVE9SX1RZUEVfX0NIQVIgPSBESVNDUklNSU5BVE9SX1RZUEVfICsgIkNIQVIiOwotCQlTdHJpbmcgRElTQ1JJTUlOQVRPUl9UWVBFX19JTlRFR0VSID0gRElTQ1JJTUlOQVRPUl9UWVBFXyArICJJTlRFR0VSIjsKLQkJU3RyaW5nIERJU0NSSU1JTkFUT1JfVFlQRV9fU1RSSU5HID0gRElTQ1JJTUlOQVRPUl9UWVBFXyArICJTVFJJTkciOwotCi0JU3RyaW5nIEVOVU1fVFlQRSA9IFBBQ0tBR0VfICsgIkVudW1UeXBlIjsKLQkJU3RyaW5nIEVOVU1fVFlQRV8gPSBFTlVNX1RZUEUgKyAnLic7Ci0JCVN0cmluZyBFTlVNX1RZUEVfX09SRElOQUwgPSBFTlVNX1RZUEVfICsgIk9SRElOQUwiOwotCQlTdHJpbmcgRU5VTV9UWVBFX19TVFJJTkcgPSBFTlVNX1RZUEVfICsgIlNUUklORyI7Ci0KLQlTdHJpbmcgRkVUQ0hfVFlQRSA9IFBBQ0tBR0VfICsgIkZldGNoVHlwZSI7Ci0JCVN0cmluZyBGRVRDSF9UWVBFXyA9IEZFVENIX1RZUEUgKyAnLic7Ci0JCVN0cmluZyBGRVRDSF9UWVBFX19FQUdFUiA9IEZFVENIX1RZUEVfICsgIkVBR0VSIjsKLQkJU3RyaW5nIEZFVENIX1RZUEVfX0xBWlkgPSBGRVRDSF9UWVBFXyArICJMQVpZIjsKLQotCVN0cmluZyBGTFVTSF9NT0RFX1RZUEUgPSBQQUNLQUdFXyArICJGbHVzaE1vZGVUeXBlIjsKLQkJU3RyaW5nIEZMVVNIX01PREVfVFlQRV8gPSBGTFVTSF9NT0RFX1RZUEUgKyAnLic7Ci0JCVN0cmluZyBGTFVTSF9NT0RFX1RZUEVfX0FVVE8gPSBGTFVTSF9NT0RFX1RZUEVfICsgIkFVVE8iOwotCQlTdHJpbmcgRkxVU0hfTU9ERV9UWVBFX19DT01NSVQgPSBGTFVTSF9NT0RFX1RZUEVfICsgIkNPTU1JVCI7Ci0KLQlTdHJpbmcgSU5IRVJJVEFOQ0VfVFlQRSA9IFBBQ0tBR0VfICsgIkluaGVyaXRhbmNlVHlwZSI7Ci0JCVN0cmluZyBJTkhFUklUQU5DRV9UWVBFXyA9IElOSEVSSVRBTkNFX1RZUEUgKyAnLic7Ci0JCVN0cmluZyBJTkhFUklUQU5DRV9UWVBFX19KT0lORUQgPSBJTkhFUklUQU5DRV9UWVBFXyArICJKT0lORUQiOwotCQlTdHJpbmcgSU5IRVJJVEFOQ0VfVFlQRV9fU0lOR0xFX1RBQkxFID0gSU5IRVJJVEFOQ0VfVFlQRV8gKyAiU0lOR0xFX1RBQkxFIjsKLQkJU3RyaW5nIElOSEVSSVRBTkNFX1RZUEVfX1RBQkxFX1BFUl9DTEFTUyA9IElOSEVSSVRBTkNFX1RZUEVfICsgIlRBQkxFX1BFUl9DTEFTUyI7Ci0KLQlTdHJpbmcgUEVSU0lTVEVOQ0VfQ09OVEVYVF9UWVBFID0gUEFDS0FHRV8gKyAiUGVyc2lzdGVuY2VDb250ZXh0VHlwZSI7Ci0JCVN0cmluZyBQRVJTSVNURU5DRV9DT05URVhUX1RZUEVfID0gUEVSU0lTVEVOQ0VfQ09OVEVYVF9UWVBFICsgJy4nOwotCQlTdHJpbmcgUEVSU0lTVEVOQ0VfQ09OVEVYVF9UWVBFX19FWFRFTkRFRCA9IFBFUlNJU1RFTkNFX0NPTlRFWFRfVFlQRV8gKyAiRVhURU5ERUQiOwotCQlTdHJpbmcgUEVSU0lTVEVOQ0VfQ09OVEVYVF9UWVBFX19UUkFOU0FDVElPTiA9IFBFUlNJU1RFTkNFX0NPTlRFWFRfVFlQRV8gKyAiVFJBTlNBQ1RJT04iOwotCi0JU3RyaW5nIFRFTVBPUkFMX1RZUEUgPSBQQUNLQUdFXyArICJUZW1wb3JhbFR5cGUiOwotCQlTdHJpbmcgVEVNUE9SQUxfVFlQRV8gPSBURU1QT1JBTF9UWVBFICsgJy4nOwotCQlTdHJpbmcgVEVNUE9SQUxfVFlQRV9fREFURSA9IFRFTVBPUkFMX1RZUEVfICsgIkRBVEUiOwotCQlTdHJpbmcgVEVNUE9SQUxfVFlQRV9fVElNRSA9IFRFTVBPUkFMX1RZUEVfICsgIlRJTUUiOwotCQlTdHJpbmcgVEVNUE9SQUxfVFlQRV9fVElNRVNUQU1QID0gVEVNUE9SQUxfVFlQRV8gKyAiVElNRVNUQU1QIjsKLQotCS8vIEpQQSBpbnRlcmZhY2VzCi0JU3RyaW5nIEVOVElUWV9NQU5BR0VSID0gUEFDS0FHRV8gKyAiRW50aXR5TWFuYWdlciI7Ci0JU3RyaW5nIEVOVElUWV9NQU5BR0VSX0ZBQ1RPUlkgPSBQQUNLQUdFXyArICJFbnRpdHlNYW5hZ2VyRmFjdG9yeSI7Ci0JU3RyaW5nIEVOVElUWV9UUkFOU0FDVElPTiA9IFBBQ0tBR0VfICsgIkVudGl0eVRyYW5zYWN0aW9uIjsKLQlTdHJpbmcgSU5TVFJVTUVOVEFCTEVfQ0xBU1NfTE9BREVSID0gUEFDS0FHRV8gKyAiSW5zdHJ1bWVudGFibGVDbGFzc0xvYWRlciI7Ci0JU3RyaW5nIFFVRVJZID0gUEFDS0FHRV8gKyAiUXVlcnkiOwotCi0JLy8gSlBBIGNsYXNzZXMKLQlTdHJpbmcgUEVSU0lTVEVOQ0UgPSBQQUNLQUdFXyArICJYbWxQZXJzaXN0ZW5jZSI7Ci0KLQkvLyBKUEEgZXhjZXB0aW9ucwotCVN0cmluZyBOT05fVU5JUVVFX1JFU1VMVF9FWENFUFRJT04gPSBQQUNLQUdFXyArICJOb25VbmlxdWVSZXN1bHRFeGNlcHRpb24iOwotCVN0cmluZyBPQkpFQ1RfTk9UX0ZPVU5EX0VYQ0VQVElPTiA9IFBBQ0tBR0VfICsgIk9iamVjdE5vdEZvdW5kRXhjZXB0aW9uIjsKLQlTdHJpbmcgUEVSU0lTVEVOQ0VfRVhDRVBUSU9OID0gUEFDS0FHRV8gKyAiUGVyc2lzdGVuY2VFeGNlcHRpb24iOwotCi0KLQkvLyAqKioqKioqKioqIFNQSSAqKioqKioqKioqCi0KLQkvLyBKUEEgU1BJIHBhY2thZ2UKLQlTdHJpbmcgU1BJX1BBQ0tBR0UgPSBQQUNLQUdFXyArICJzcGkiOwotCVN0cmluZyBTUElfUEFDS0FHRV8gPSBTUElfUEFDS0FHRSArICcuJzsKLQotCS8vIEpQQSBTUEkgaW50ZXJmYWNlcwotCVN0cmluZyBFTlRJVFlfTUFOQUdFUl9GQUNUT1JZX1BST1ZJREVSID0gU1BJX1BBQ0tBR0VfICsgIkVudGl0eU1hbmFnZXJGYWN0b3J5UHJvdmlkZXIiOwotCVN0cmluZyBQRVJTSVNURU5DRV9JTkZPID0gU1BJX1BBQ0tBR0VfICsgIlBlcnNpc3RlbmNlSW5mbyI7Ci0JU3RyaW5nIFBFUlNJU1RFTkNFX1BST1ZJREVSID0gU1BJX1BBQ0tBR0VfICsgIlBlcnNpc3RlbmNlUHJvdmlkZXIiOwotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9KcHRHZW5NZXNzYWdlcy5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvSnB0R2VuTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA3MDVkZS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9KcHRHZW5NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogTG9jYWxpemVkIG1lc3NhZ2VzIHVzZWQgYnkgRGFsaSBlbnRpdHkgZ2VuZXJhdGlvbi4KLSAqLwotY2xhc3MgSnB0R2VuTWVzc2FnZXMgewotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUGFja2FnZUdlbmVyYXRvcl90YXNrTmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBHZW5TY29wZV90YXNrTmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBFbnRpdHlHZW5lcmF0b3JfdGFza05hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgVGVtcGxhdGVzX25vdEZvdW5kOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gImpwdF9nZW4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3M8Pz4gQlVORExFX0NMQVNTID0gSnB0R2VuTWVzc2FnZXMuY2xhc3M7Ci0Jc3RhdGljIHsKLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgQlVORExFX0NMQVNTKTsKLQl9Ci0JCi0JcHJpdmF0ZSBKcHRHZW5NZXNzYWdlcygpIHsKLQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9NYW55VG9NYW55UmVsYXRpb24uamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL01hbnlUb01hbnlSZWxhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBjOWFjLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL01hbnlUb01hbnlSZWxhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC5vbGQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5TdHJpbmdUb29sczsKLQotLyoqCi0gKiBUaGlzIG9iamVjdCBpcyBzaGFyZWQgYnkgdGhlIHR3byBnZW4gdGFibGVzIHRoYXQgbWFrZSB1cCB0aGUgcmVsYXRpb24uCi0gKiBVcG9uIGNvbnN0cnVjdGlvbiwgJ21hcHBlZEJ5JyB3aWxsIGJlICdudWxsJy4gVGhlIGZpcnN0IGdlbiB0YWJsZSB0byBiZQotICogdXNlZCB0byBnZW5lcmF0ZSBhbiBlbnRpdHkgd2lsbCBmaWxsIGluICdtYXBwZWRCeScgd2l0aCB0aGUgYXBwcm9wcmlhdGUKLSAqIGF0dHJpYnV0ZSAoZmllbGQvcHJvcGVydHkpIG5hbWUuCi0gKi8KLWNsYXNzIE1hbnlUb01hbnlSZWxhdGlvbiB7Ci0JcHJpdmF0ZSBmaW5hbCBHZW5UYWJsZSBqb2luR2VuVGFibGU7Ci0JcHJpdmF0ZSBmaW5hbCBGb3JlaWduS2V5IG93bmluZ0ZvcmVpZ25LZXk7Ci0JcHJpdmF0ZSBmaW5hbCBHZW5UYWJsZSBvd25pbmdHZW5UYWJsZTsKLQlwcml2YXRlIGZpbmFsIEZvcmVpZ25LZXkgbm9uT3duaW5nRm9yZWlnbktleTsKLQlwcml2YXRlIGZpbmFsIEdlblRhYmxlIG5vbk93bmluZ0dlblRhYmxlOwotCXByaXZhdGUgU3RyaW5nIG1hcHBlZEJ5OyAgLy8gc2V0IHdoaWxlIGdlbmVyYXRpbmcgZW50aXRpZXMKLQotCi0JTWFueVRvTWFueVJlbGF0aW9uKAotCQkJR2VuVGFibGUgam9pbkdlblRhYmxlLAotCQkJRm9yZWlnbktleSBvd25pbmdGb3JlaWduS2V5LAotCQkJR2VuVGFibGUgb3duaW5nR2VuVGFibGUsCi0JCQlGb3JlaWduS2V5IG5vbk93bmluZ0ZvcmVpZ25LZXksCi0JCQlHZW5UYWJsZSBub25Pd25pbmdHZW5UYWJsZQotCSkgewotCQlzdXBlcigpOwotCQl0aGlzLmpvaW5HZW5UYWJsZSA9IGpvaW5HZW5UYWJsZTsKLQotCQl0aGlzLm93bmluZ0ZvcmVpZ25LZXkgPSBvd25pbmdGb3JlaWduS2V5OwotCQl0aGlzLm93bmluZ0dlblRhYmxlID0gb3duaW5nR2VuVGFibGU7Ci0JCW93bmluZ0dlblRhYmxlLmFkZE93bmVkTWFueVRvTWFueVJlbGF0aW9uKHRoaXMpOwotCi0JCXRoaXMubm9uT3duaW5nRm9yZWlnbktleSA9IG5vbk93bmluZ0ZvcmVpZ25LZXk7Ci0JCXRoaXMubm9uT3duaW5nR2VuVGFibGUgPSBub25Pd25pbmdHZW5UYWJsZTsKLQkJbm9uT3duaW5nR2VuVGFibGUuYWRkTm9uT3duZWRNYW55VG9NYW55UmVsYXRpb24odGhpcyk7Ci0JfQotCi0JR2VuVGFibGUgZ2V0Sm9pbkdlblRhYmxlKCkgewotCQlyZXR1cm4gdGhpcy5qb2luR2VuVGFibGU7Ci0JfQotCi0JRm9yZWlnbktleSBnZXRPd25pbmdGb3JlaWduS2V5KCkgewotCQlyZXR1cm4gdGhpcy5vd25pbmdGb3JlaWduS2V5OwotCX0KLQotCUdlblRhYmxlIGdldE93bmluZ0dlblRhYmxlKCkgewotCQlyZXR1cm4gdGhpcy5vd25pbmdHZW5UYWJsZTsKLQl9Ci0KLQlGb3JlaWduS2V5IGdldE5vbk93bmluZ0ZvcmVpZ25LZXkoKSB7Ci0JCXJldHVybiB0aGlzLm5vbk93bmluZ0ZvcmVpZ25LZXk7Ci0JfQotCi0JR2VuVGFibGUgZ2V0Tm9uT3duaW5nR2VuVGFibGUoKSB7Ci0JCXJldHVybiB0aGlzLm5vbk93bmluZ0dlblRhYmxlOwotCX0KLQotCVN0cmluZyBnZXRPd25lZEF0dHJpYnV0ZU5hbWUoKSB7Ci0JCXJldHVybiB0aGlzLm5vbk93bmluZ0dlblRhYmxlLmdldENvbGxlY3Rpb25BdHRyaWJ1dGVOYW1lKCk7Ci0JfQotCi0JU3RyaW5nIGdldE5vbk93bmVkQXR0cmlidXRlTmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMub3duaW5nR2VuVGFibGUuZ2V0Q29sbGVjdGlvbkF0dHJpYnV0ZU5hbWUoKTsKLQl9Ci0KLQkvKioKLQkgKiB0aGUgc2NvcGUgY2xlYXJzIHRoZSBqb2luIHRhYmxlIHJlbGF0aW9uIGlmIHRoZXJlIGFyZSBhbnkgcmVmZXJlbmNlcwotCSAqIHRvIHRoZSBqb2luIHRhYmxlCi0JICovCi0Jdm9pZCBjbGVhcigpIHsKLQkJdGhpcy5vd25pbmdHZW5UYWJsZS5yZW1vdmVPd25lZE1hbnlUb01hbnlSZWxhdGlvbih0aGlzKTsKLQkJdGhpcy5ub25Pd25pbmdHZW5UYWJsZS5yZW1vdmVOb25Pd25lZE1hbnlUb01hbnlSZWxhdGlvbih0aGlzKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0TWFwcGVkQnkoKSB7Ci0JCXJldHVybiB0aGlzLm1hcHBlZEJ5OwotCX0KLQotCXZvaWQgc2V0TWFwcGVkQnkoU3RyaW5nIG1hcHBlZEJ5KSB7Ci0JCXRoaXMubWFwcGVkQnkgPSBtYXBwZWRCeTsKLQl9Ci0KLQlTdHJpbmcgZ2V0T3duaW5nRW50aXR5TmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMub3duaW5nR2VuVGFibGUuZ2V0RW50aXR5TmFtZSgpOwotCX0KLQotCVN0cmluZyBnZXROb25Pd25pbmdFbnRpdHlOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5ub25Pd25pbmdHZW5UYWJsZS5nZXRFbnRpdHlOYW1lKCk7Ci0JfQotCi0JYm9vbGVhbiBqb2luVGFibGVOYW1lSXNEZWZhdWx0KCkgewotCQlyZXR1cm4gdGhpcy5qb2luR2VuVGFibGUuam9pblRhYmxlTmFtZUlzRGVmYXVsdCgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuam9pbkdlblRhYmxlKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL01hbnlUb09uZVJlbGF0aW9uLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9NYW55VG9PbmVSZWxhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzdmYjg1Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL01hbnlUb09uZVJlbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwub2xkOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nVG9vbHM7Ci0KLS8qKgotICogVGhpcyBvYmplY3QgaXMgaGVsZCBieSB0aGUgImJhc2UiIGdlbiB0YWJsZSBhbmQsIGluZGlyZWN0bHkgdmlhIGEKLSAqIG9uZS10by1tYW55IHJlbGF0aW9uLCB0aGUgInJlZmVyZW5jZWQiIGdlbiB0YWJsZS4KLSAqIFRoZSAibWFwcGVkIGJ5IiBhdHRyaWJ1dGUgKGZpZWxkL3Byb3BlcnR5KSBuYW1lIGlzIHNldCB3aGlsZSB0aGUKLSAqICJiYXNlIiB0YWJsZSBpcyBjYWxjdWxhdGluZyBpdHMgYXR0cmlidXRlIG5hbWVzLgotICovCi1jbGFzcyBNYW55VG9PbmVSZWxhdGlvbiB7Ci0JcHJpdmF0ZSBmaW5hbCBHZW5UYWJsZSBiYXNlR2VuVGFibGU7ICAvLyB0aGUgIm1hbnkiIHNpZGUgKGUuZy4gRGV0YWlsKQotCXByaXZhdGUgZmluYWwgRm9yZWlnbktleSBmb3JlaWduS2V5OwotCXByaXZhdGUgZmluYWwgR2VuVGFibGUgcmVmZXJlbmNlZEdlblRhYmxlOyAgLy8gdGhlICJvbmUiIHNpZGUgKGUuZy4gTWFzdGVyKQotCXByaXZhdGUgU3RyaW5nIG1hcHBlZEJ5OyAgLy8gc2V0IHdoaWxlIGdlbmVyYXRpbmcgZW50aXRpZXM7IHVzZWQgYnkgcGFydG5lciBvbmUtdG8tbWFueSByZWxhdGlvbgotCi0KLQlNYW55VG9PbmVSZWxhdGlvbigKLQkJCUdlblRhYmxlIGJhc2VHZW5UYWJsZSwKLQkJCUZvcmVpZ25LZXkgZm9yZWlnbktleSwKLQkJCUdlblRhYmxlIHJlZmVyZW5jZWRHZW5UYWJsZQotCSkgewotCQlzdXBlcigpOwotCQl0aGlzLmJhc2VHZW5UYWJsZSA9IGJhc2VHZW5UYWJsZTsKLQkJdGhpcy5mb3JlaWduS2V5ID0gZm9yZWlnbktleTsKLQkJdGhpcy5yZWZlcmVuY2VkR2VuVGFibGUgPSByZWZlcmVuY2VkR2VuVGFibGU7Ci0JCXJlZmVyZW5jZWRHZW5UYWJsZS5hZGRPbmVUb01hbnlSZWxhdGlvbihuZXcgT25lVG9NYW55UmVsYXRpb24odGhpcykpOwotCX0KLQotCUdlblRhYmxlIGdldEJhc2VHZW5UYWJsZSgpIHsKLQkJcmV0dXJuIHRoaXMuYmFzZUdlblRhYmxlOwotCX0KLQotCUZvcmVpZ25LZXkgZ2V0Rm9yZWlnbktleSgpIHsKLQkJcmV0dXJuIHRoaXMuZm9yZWlnbktleTsKLQl9Ci0KLQlHZW5UYWJsZSBnZXRSZWZlcmVuY2VkR2VuVGFibGUoKSB7Ci0JCXJldHVybiB0aGlzLnJlZmVyZW5jZWRHZW5UYWJsZTsKLQl9Ci0KLQlTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMuZm9yZWlnbktleS5nZXRBdHRyaWJ1dGVOYW1lKCk7Ci0JfQotCi0JU3RyaW5nIGdldE1hcHBlZEJ5KCkgewotCQlyZXR1cm4gdGhpcy5tYXBwZWRCeTsKLQl9Ci0KLQl2b2lkIHNldE1hcHBlZEJ5KFN0cmluZyBtYXBwZWRCeSkgewotCQl0aGlzLm1hcHBlZEJ5ID0gbWFwcGVkQnk7Ci0JfQotCi0JU3RyaW5nIGdldEJhc2VFbnRpdHlOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5iYXNlR2VuVGFibGUuZ2V0RW50aXR5TmFtZSgpOwotCX0KLQotCVN0cmluZyBnZXRSZWZlcmVuY2VkRW50aXR5TmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMucmVmZXJlbmNlZEdlblRhYmxlLmdldEVudGl0eU5hbWUoKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0QmFzZUdlblRhYmxlQ29sbGVjdGlvbkF0dHJpYnV0ZU5hbWUoKSB7Ci0JCXJldHVybiB0aGlzLmJhc2VHZW5UYWJsZS5nZXRDb2xsZWN0aW9uQXR0cmlidXRlTmFtZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuZm9yZWlnbktleSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9PbmVUb01hbnlSZWxhdGlvbi5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvT25lVG9NYW55UmVsYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkMDcwOC4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL29sZC9PbmVUb01hbnlSZWxhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLm9sZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlN0cmluZ1Rvb2xzOwotCi0vKioKLSAqIFRoaXMgb2JqZWN0IGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1hbnktdG8tb25lIHJlbGF0aW9uLgotICovCi1jbGFzcyBPbmVUb01hbnlSZWxhdGlvbiB7Ci0JcHJpdmF0ZSBmaW5hbCBNYW55VG9PbmVSZWxhdGlvbiBtYW55VG9PbmVSZWxhdGlvbjsKLQotCi0JT25lVG9NYW55UmVsYXRpb24oTWFueVRvT25lUmVsYXRpb24gbWFueVRvT25lUmVsYXRpb24pIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5tYW55VG9PbmVSZWxhdGlvbiA9IG1hbnlUb09uZVJlbGF0aW9uOwotCX0KLQotCU1hbnlUb09uZVJlbGF0aW9uIGdldE1hbnlUb09uZVJlbGF0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5tYW55VG9PbmVSZWxhdGlvbjsKLQl9Ci0KLQlTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZSgpIHsKLQkJcmV0dXJuIHRoaXMubWFueVRvT25lUmVsYXRpb24uZ2V0QmFzZUdlblRhYmxlQ29sbGVjdGlvbkF0dHJpYnV0ZU5hbWUoKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0TWFwcGVkQnkoKSB7Ci0JCXJldHVybiB0aGlzLm1hbnlUb09uZVJlbGF0aW9uLmdldE1hcHBlZEJ5KCk7Ci0JfQotCi0JU3RyaW5nIGdldFJlZmVyZW5jZWRFbnRpdHlOYW1lKCkgewotCQlyZXR1cm4gdGhpcy5tYW55VG9PbmVSZWxhdGlvbi5nZXRCYXNlRW50aXR5TmFtZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMubWFueVRvT25lUmVsYXRpb24pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvUGFja2FnZUdlbmVyYXRvci5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC9vbGQvUGFja2FnZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc2YmIxLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvb2xkL1BhY2thZ2VHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwub2xkOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3ViTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlN0cmluZ1Rvb2xzOwotCi0vKioKLSAqIFRoaXMgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgYSBwYWNrYWdlIG9mIGVudGl0aWVzIGZvciBhIHNldCBvZiB0YWJsZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQYWNrYWdlR2VuZXJhdG9yIHsKLQlwcml2YXRlIGZpbmFsIENvbmZpZyBjb25maWc7Ci0JcHJpdmF0ZSBmaW5hbCBFbnRpdHlHZW5lcmF0b3IuQ29uZmlnIGVudGl0eUNvbmZpZzsKLQlwcml2YXRlIGZpbmFsIEdlblNjb3BlIHNjb3BlOwotCi0KLQkvLyAqKioqKioqKioqIHB1YmxpYyBBUEkgKioqKioqKioqKgotCi0JcHVibGljIHN0YXRpYyB2b2lkIGdlbmVyYXRlRW50aXRpZXMoCi0JCQlDb25maWcgY29uZmlnLAotCQkJRW50aXR5R2VuZXJhdG9yLkNvbmZpZyBlbnRpdHlDb25maWcsCi0JCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcgotCSkgewotCQlpZiAoKGNvbmZpZyA9PSBudWxsKSB8fCAoZW50aXR5Q29uZmlnID09IG51bGwpKSB7Ci0JCQl0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKLQkJfQotCQlTdWJNb25pdG9yIHNtID0gU3ViTW9uaXRvci5jb252ZXJ0KHByb2dyZXNzTW9uaXRvciwgSnB0R2VuTWVzc2FnZXMuUGFja2FnZUdlbmVyYXRvcl90YXNrTmFtZSwgMTAwKTsKLQkJbmV3IFBhY2thZ2VHZW5lcmF0b3IoY29uZmlnLCBlbnRpdHlDb25maWcsIHNtLm5ld0NoaWxkKDEwKSkuZ2VuZXJhdGVFbnRpdGllcyhzbS5uZXdDaGlsZCg5MCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb25zdHJ1Y3Rpb24vaW5pdGlhbGl6YXRpb24gKioqKioqKioqKgotCi0JcHJpdmF0ZSBQYWNrYWdlR2VuZXJhdG9yKAotCQkJQ29uZmlnIGNvbmZpZywKLQkJCUVudGl0eUdlbmVyYXRvci5Db25maWcgZW50aXR5Q29uZmlnLAotCQkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IKLQkpIHsKLQkJc3VwZXIoKTsKLQkJdGhpcy5jb25maWcgPSBjb25maWc7Ci0JCXRoaXMuZW50aXR5Q29uZmlnID0gZW50aXR5Q29uZmlnOwotCQl0aGlzLnNjb3BlID0gbmV3IEdlblNjb3BlKGVudGl0eUNvbmZpZywgcHJvZ3Jlc3NNb25pdG9yKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogZ2VuZXJhdGlvbiAqKioqKioqKioqCi0KLQlwcml2YXRlIHZvaWQgZ2VuZXJhdGVFbnRpdGllcyhJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgewotCQlTdWJNb25pdG9yIHNtID0gU3ViTW9uaXRvci5jb252ZXJ0KHByb2dyZXNzTW9uaXRvciwgdGhpcy5zY29wZS5lbnRpdHlUYWJsZXNTaXplKCkpOwotCQlmb3IgKEl0ZXJhdG9yPEdlblRhYmxlPiBzdHJlYW0gPSB0aGlzLnNjb3BlLmVudGl0eUdlblRhYmxlcygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMuY2hlY2tDYW5jZWxlZChzbSk7Ci0JCQl0aGlzLmdlbmVyYXRlRW50aXR5KHN0cmVhbS5uZXh0KCksIHNtLm5ld0NoaWxkKDEpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBnZW5lcmF0ZUVudGl0eShHZW5UYWJsZSBnZW5UYWJsZSwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKLQkJRW50aXR5R2VuZXJhdG9yLmdlbmVyYXRlRW50aXR5KAotCQkJCXRoaXMuZW50aXR5Q29uZmlnLAotCQkJCXRoaXMuY29uZmlnLmdldFBhY2thZ2VGcmFnbWVudCgpLAotCQkJCWdlblRhYmxlLAotCQkJCXByb2dyZXNzTW9uaXRvcgotCQkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0NhbmNlbGVkKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7Ci0JCWlmIChwcm9ncmVzc01vbml0b3IuaXNDYW5jZWxlZCgpKSB7Ci0JCQl0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCXJldHVybiBTdHJpbmdUb29scy5idWlsZFRvU3RyaW5nRm9yKHRoaXMsIHRoaXMuc2NvcGUpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBjb25maWcgKioqKioqKioqKgotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBDb25maWcgewotCQlwcml2YXRlIElQYWNrYWdlRnJhZ21lbnQgcGFja2FnZUZyYWdtZW50OwotCi0JCXB1YmxpYyBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudCgpIHsKLQkJCXJldHVybiB0aGlzLnBhY2thZ2VGcmFnbWVudDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50IHBhY2thZ2VGcmFnbWVudCkgewotCQkJdGhpcy5wYWNrYWdlRnJhZ21lbnQgPSBwYWNrYWdlRnJhZ21lbnQ7Ci0JCX0KLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0NvbXBpbGF0aW9uVW5pdE1vZGlmaWVyLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL3V0aWwvQ29tcGlsYXRpb25Vbml0TW9kaWZpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2ZjAxYi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL3V0aWwvQ29tcGlsYXRpb25Vbml0TW9kaWZpZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDb21waWxhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5kb20uQVNUOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5BU1RQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLkNvbXBpbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuVGV4dEVkaXQ7Ci0KLQotLyoqCi0gKiBQZXJmb3JtcyB0aGUgZ3J1bnQgd29yayBuZWVkZWQgZm9yIG1vZGlmeWluZyBhIGNvbXBpbGF0aW9uIAotICogdW5pdCBhbmQgcGVyZm9ybXMgdGhlIG1vZGlmaWVkIGNvbXBpbGF0aW9uIHVuaXQgc2F2ZS4KLSAqIAotICogVGhlIHR5cGljYWwgdXNhZ2UgaXMgYXMgZm9sbG93czoKLSAqIDxvbD48bGk+Q3JlYXRlIGFuIGluc3RhbmNlLgotICogCi0gKiA8bGk+TW9kaWZ5IHRoZSBjb21waWxhdGlvbiB1bml0IHVzaW5nIEFTVCBvcGVyYXRpb25zIHBlcmZvcm1lZCAKLSAqIAlvbiB0aGUgbm9kZSByZXR1cm5lZCBieSB7QGxpbmsgI2dldENvbXBpbGF0aW9uVW5pdE5vZGUoKX0uCi0gKiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGNhbGwgPGNvZGU+c2V0SmF2YVNvdXJjZTwvY29kZT4gdG8gY2hhbmdlIHRoZSBlbnRpcmUgc291cmNlIGNvZGUuIAotICogCi0gKiA8bGk+Q2FsbCB0aGUge0BsaW5rICNzYXZlKCl9IG1ldGhvZC4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQ29tcGlsYXRpb25Vbml0TW9kaWZpZXIKLXsKLQlwcml2YXRlIElKYXZhUHJvamVjdCBtUHJvamVjdDsKLQlwcml2YXRlIElDb21waWxhdGlvblVuaXQgbUNvbXBpbGF0aW9uVW5pdDsKLQlwcml2YXRlIENvbXBpbGF0aW9uVW5pdCBtQ29tcGlsYXRpb25Vbml0Tm9kZTsKLQlwcml2YXRlIERvY3VtZW50IG1Eb2N1bWVudDsKLQkKLQlwdWJsaWMgQ29tcGlsYXRpb25Vbml0TW9kaWZpZXIoSUphdmFQcm9qZWN0IHByb2plY3QsIFN0cmluZyBjbGFzc05hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlcigpOwotCQkKLQkJbVByb2plY3QgPSBwcm9qZWN0OwotCQkKLQkJSVR5cGUgdHlwZSA9IHByb2plY3QuZmluZFR5cGUoY2xhc3NOYW1lKTsKLQkJaWYgKHR5cGUgPT0gbnVsbCkgewotCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIGNsYXNzICIgKyBjbGFzc05hbWUgKyAiIGRvZXMgbm90IGV4aXN0LiIpOwotCQl9Ci0JCW1Db21waWxhdGlvblVuaXQgPSB0eXBlLmdldENvbXBpbGF0aW9uVW5pdCgpOwotCQlpZiAobUNvbXBpbGF0aW9uVW5pdCA9PSBudWxsKSB7Ci0JCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgc291cmNlIGNvZGUgZm9yICIgKyBjbGFzc05hbWUgKyAiIGRvZXMgbm90IGV4aXN0LiIpOwotCQl9Ci0JfQotCXB1YmxpYyBDb21waWxhdGlvblVuaXRNb2RpZmllcihJSmF2YVByb2plY3QgcHJvamVjdCwgSUNvbXBpbGF0aW9uVW5pdCBjdSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyKCk7Ci0JCQotCQltUHJvamVjdCA9IHByb2plY3Q7Ci0JCW1Db21waWxhdGlvblVuaXQgPSBjdTsKLQl9Ci0JcHVibGljIENvbXBpbGF0aW9uVW5pdE1vZGlmaWVyKElKYXZhUHJvamVjdCBwcm9qZWN0LCBJQ29tcGlsYXRpb25Vbml0IGN1LCBDb21waWxhdGlvblVuaXQgY3VOb2RlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIoKTsKLQkJCi0JCW1Qcm9qZWN0ID0gcHJvamVjdDsKLQkJbUNvbXBpbGF0aW9uVW5pdCA9IGN1OwotCQltQ29tcGlsYXRpb25Vbml0Tm9kZSA9IGN1Tm9kZTsKLQkJCi0JCWdldENvbXBpbGF0aW9uVW5pdE5vZGUoKTsgLy90byBjcmVhdGUgbURvY3VtZW50ICh0aGUgY2FsbGVyIGluIHRoaXMgY2FzZSBkb2VzIG5vdCBoYXZlIHRvIGNhbGwgZ2V0Q29tcGlsYXRpb25Vbml0Tm9kZSkKLQl9Ci0JcHVibGljIElDb21waWxhdGlvblVuaXQgZ2V0Q29tcGlsYXRpb25Vbml0KCkgewotCQlyZXR1cm4gbUNvbXBpbGF0aW9uVW5pdDsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgY29tcGlsYXRpb24gdW5pdCBub2RlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIAotCSAqIHR5aGUgbW9kaWZpY2F0aW9uIEFTVCBvcGVyYXRpb25zLgotCSAqLwotCXB1YmxpYyBDb21waWxhdGlvblVuaXQgZ2V0Q29tcGlsYXRpb25Vbml0Tm9kZSgpIHsKLQkJaWYgKG1Db21waWxhdGlvblVuaXROb2RlID09IG51bGwpIHsKLQkJCUFTVFBhcnNlciBjID0gQVNUUGFyc2VyLm5ld1BhcnNlcihBU1QuSkxTMyk7Ci0JCQljLnNldFNvdXJjZShtQ29tcGlsYXRpb25Vbml0KTsKLQkJCWMuc2V0UmVzb2x2ZUJpbmRpbmdzKHRydWUpOwotCQkJbUNvbXBpbGF0aW9uVW5pdE5vZGUgPSAoQ29tcGlsYXRpb25Vbml0KWMuY3JlYXRlQVNUKG51bGwpOwotCQl9Ci0JCWlmIChtRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQltRG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQobUNvbXBpbGF0aW9uVW5pdC5nZXRCdWZmZXIoKS5nZXRDb250ZW50cygpKTsKLQkJCX0gY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCQotCQkJbUNvbXBpbGF0aW9uVW5pdE5vZGUucmVjb3JkTW9kaWZpY2F0aW9ucygpOwotCQl9Ci0JCQotCQlyZXR1cm4gbUNvbXBpbGF0aW9uVW5pdE5vZGU7Ci0JfQotCS8qKgotCSAqIENoYW5nZXMgdGhlIGVudGlyZSBKYXZhIHNvdXJjZSBjb2RlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0LgotCSAqLwotCXB1YmxpYyB2b2lkIHNldEphdmFTb3VyY2UoU3RyaW5nIG5ld1NvdXJjZSkgewotCQl0cnkgewotCQkJbUNvbXBpbGF0aW9uVW5pdC5nZXRCdWZmZXIoKS5zZXRDb250ZW50cyhuZXdTb3VyY2UpOwotCQl9IGNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkvKioKLQkgKiBTYXZlcyB0aGUgY29tcGlsYXRpb24gdW5pdCBtb2RpZmljYXRpb25zLgotCSAqLwotCXB1YmxpYyB2b2lkIHNhdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKG1Db21waWxhdGlvblVuaXROb2RlICE9IG51bGwpIHsKLQkJCWFzc2VydChtRG9jdW1lbnQgIT0gbnVsbCk7IC8vc2VlIGdldENvbXBpbGF0aW9uVW5pdE5vZGUKLQkJCQotCQkJLy9jb21wdXRhdGlvbiBvZiB0aGUgdGV4dCBlZGl0cwotCQkJVGV4dEVkaXQgZWRpdHMgPSBtQ29tcGlsYXRpb25Vbml0Tm9kZS5yZXdyaXRlKG1Eb2N1bWVudCwgbVByb2plY3QuZ2V0T3B0aW9ucyh0cnVlKSk7Ci0JCQkvL2NvbXB1dGF0aW9uIG9mIHRoZSBuZXcgc291cmNlIGNvZGUKLQkJCWVkaXRzLmFwcGx5KG1Eb2N1bWVudCk7Ci0JCQlTdHJpbmcgbmV3U291cmNlID0gbURvY3VtZW50LmdldCgpOwotCQkJLy8gdXBkYXRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0Ci0JCQltQ29tcGlsYXRpb25Vbml0LmdldEJ1ZmZlcigpLnNldENvbnRlbnRzKG5ld1NvdXJjZSk7Ci0JCX0KLQkJCi0JCWlmIChtQ29tcGlsYXRpb25Vbml0LmlzV29ya2luZ0NvcHkoKSkgewotCQkJbUNvbXBpbGF0aW9uVW5pdC5jb21taXRXb3JraW5nQ29weSh0cnVlLypmb3JjZSovLCBudWxsLyptb25pdG9yKi8pOwotCQl9IGVsc2UgewotCQkJbUNvbXBpbGF0aW9uVW5pdC5zYXZlKG51bGwvKm1vbml0b3IqLywgdHJ1ZS8qZm9yY2UqLyk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL3V0aWwvRFRQVXRpbC5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0RUUFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA5NzE2MS4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL3V0aWwvRFRQVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXkuQ29sdW1uUGFpcjsKLQotLyoqCi0gKiBDb2xsZWN0aW9uIG9mIHV0aWxpdHkgbWV0aG9kcyB0byBhY2Nlc3MgRFRQIGFuZCBvdGhlciBqcHQuZGIgQVBJcyAKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBEVFBVdGlsIHsKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0F1dG9JbmNyZW1lbnQoQ29sdW1uIGMpewotCQkvL0AgVE9ETwotCQkvL0Jsb2NrZWQgYnkgRFRQIGJ1ZwotCQkvL2h0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNTAwMjMKLQkJLy9UaGUgRGFsaSBidWcgaXMKLQkJLy9odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NjU4Ci0JCS8vCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gbGlzdCBvZiBmawotCSAqIEBwYXJhbSBkYlRhYmxlCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgTGlzdDxGb3JlaWduS2V5SW5mbz4gZ2V0Rm9yZWlnbktleXMoVGFibGUgZGJUYWJsZSkgewotCQlMaXN0PEZvcmVpZ25LZXlJbmZvPiByZXQgPSBuZXcgQXJyYXlMaXN0PEZvcmVpZ25LZXlJbmZvPigpOwotCQlpZihkYlRhYmxlIT1udWxsKXsKLQkJCUl0ZXJhdG9yPEZvcmVpZ25LZXk+IGZrcyA9IGRiVGFibGUuZm9yZWlnbktleXMoKTsKLQkJCXdoaWxlKCBma3MuaGFzTmV4dCgpICl7Ci0JCQkJRm9yZWlnbktleSBmayAgPSBma3MubmV4dCgpOwotCQkJCUl0ZXJhdG9yPENvbHVtblBhaXI+IGNvbHVtblBhaXJlcyA9IGZrLmNvbHVtblBhaXJzKCk7Ci0JCQkJRm9yZWlnbktleUluZm8gZmtJbmZvID0gbnVsbDsKLQkJCQl3aGlsZSggY29sdW1uUGFpcmVzLmhhc05leHQoKSApewotCQkJCQlDb2x1bW5QYWlyIGNvbHVtblBhaXIgPSBjb2x1bW5QYWlyZXMubmV4dCgpOwotCQkJCQlpZiggZmtJbmZvID09IG51bGwpewotCQkJCQkJU3RyaW5nIHRhYmxlTmFtZSA9IGRiVGFibGUuZ2V0TmFtZSgpOwotCQkJCQkJU3RyaW5nIHJlZmVyZW5jZWRUYWJsZU5hbWUgPSAiIjsKLQkJCQkJCVRhYmxlIHJlZmVyZW5jZWRUYWJsZSA9IGZrLmdldFJlZmVyZW5jZWRUYWJsZSgpOwotCQkJCQkJcmVmZXJlbmNlZFRhYmxlTmFtZSA9IHJlZmVyZW5jZWRUYWJsZS5nZXROYW1lKCk7Ci0JCQkJCQlma0luZm8gPSBuZXcgRm9yZWlnbktleUluZm8oZmssIHRhYmxlTmFtZSwgcmVmZXJlbmNlZFRhYmxlTmFtZSApOwotCQkJCQl9Ci0JCQkJCVN0cmluZyBiYXNlQ29sTmFtZSA9IGNvbHVtblBhaXIuZ2V0QmFzZUNvbHVtbigpLmdldE5hbWUoKTsKLQkJCQkJU3RyaW5nIHJlZmVyZW5jZWRDb2xOYW1lID0gY29sdW1uUGFpci5nZXRSZWZlcmVuY2VkQ29sdW1uKCkuZ2V0TmFtZSgpOwotCQkJCQlma0luZm8uYWRkQ29sdW1uTWFwcGluZyggYmFzZUNvbE5hbWUsICByZWZlcmVuY2VkQ29sTmFtZSApOwotCQkJCX0gCi0JCQkJaWYoIGZrSW5mbyAhPW51bGwgKQotCQkJCQlyZXQuYWRkKCBma0luZm8gKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEphdmFUeXBlKENvbHVtbiBkYkNvbHVtbikgewotCQlyZXR1cm4gZGJDb2x1bW4uaXNQYXJ0T2ZQcmltYXJ5S2V5KCkgPwotCQkJCWRiQ29sdW1uLmdldFByaW1hcnlLZXlKYXZhVHlwZURlY2xhcmF0aW9uKCkgOgotCQkJCWRiQ29sdW1uLmdldEphdmFUeXBlRGVjbGFyYXRpb24oKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWZhdWx0U2NoZW1hKFRhYmxlIGRiVGFibGUpewotCQlTdHJpbmcgc2NoZW1hTmFtZSA9IGRiVGFibGUuZ2V0U2NoZW1hKCkuZ2V0TmFtZSgpOwotCQlTY2hlbWEgZGVmYXVsdFNjaGVtYSA9IGRiVGFibGUuZ2V0U2NoZW1hKCkuZ2V0Q29ubmVjdGlvblByb2ZpbGUoKS5nZXREYXRhYmFzZSgpLmdldERlZmF1bHRTY2hlbWEoKTsKLQkJcmV0dXJuIGRlZmF1bHRTY2hlbWEuZ2V0TmFtZSgpID09IHNjaGVtYU5hbWU7Ci0JfQkKLX0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvdXRpbC9GaWxlVXRpbC5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExN2NhODUuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5qYXIuSmFySW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLmphci5NYW5pZmVzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQ29sbGVjdGlvbnMgb2YgdXRpbGl0eSBtZXRob2RzIGhhbmRsaW5nIGZpbGVzLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbAotewotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBERUxFVEVfRk9MREVSX0VSUiA9ICJUaGUgZGlyZWN0b3J5ICVzIGNvdWxkIG5vdCBiZSBkZWxldGVkLiI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERFTEVURV9GSUxFX0VSUiA9ICJUaGUgZmlsZSAlcyBjb3VsZCBub3QgYmUgZGVsZXRlZC4iOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBGSUxFX1JFQURPTkxZX0VSUiA9ICJUaGUgZmlsZSAlcyBjb3VsZCBub3QgYmUgbW9kaWZpZWQgYmVjYXVzZSB3cml0ZSBhY2Nlc3MgaXMgZGVuaWVkLlxuUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBtYXJrZWQgYXMgcmVhZG9ubHkgaW4gdGhlIGZpbGUgc3lzdGVtLiI7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZGVsZXRlRm9sZGVyKEZpbGUgZm9sZGVyKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCUZpbGVbXSBmaWxlcyA9IGZvbGRlci5saXN0RmlsZXMoKTsKLQkJLy9lbXB0eSB0aGUgZm9sZGVyIGZpcnN0IChqYXZhLmlvLmZpbGUuZGVsZXRlIHJlcXVpcmVzIGl0IGVtcHR5KQotCQlpZiAoZmlsZXMgIT0gbnVsbCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7ICsraSkgewotCQkJCUZpbGUgZiA9IGZpbGVzW2ldOwotCQkJCWlmIChmLmlzRGlyZWN0b3J5KCkpCi0JCQkJCWRlbGV0ZUZvbGRlcihmKTsKLQkJCQllbHNlCi0JCQkJCWRlbGV0ZVBhdGgoZik7Ci0JCQl9Ci0JCX0KLQkJZGVsZXRlUGF0aChmb2xkZXIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkZWxldGVQYXRoKEZpbGUgZikKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlpZiAoIWYuZGVsZXRlKCkpIHsKLQkJCVN0cmluZyBtc2dJZCA9IGYuaXNEaXJlY3RvcnkoKSA/ICBERUxFVEVfRk9MREVSX0VSUiA6ICBERUxFVEVfRklMRV9FUlI7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIFN0cmluZy5mb3JtYXQobXNnSWQsZi5nZXRQYXRoKCkpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgc3RhdGljIGJ5dGVbXSByZWFkRmlsZShGaWxlIHNyYykKLQkJdGhyb3dzIElPRXhjZXB0aW9uCi0JewotCQlqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbSBmaW4gPSBuZXcgamF2YS5pby5GaWxlSW5wdXRTdHJlYW0oc3JjKTsKLQkJdHJ5IHsKLQkJCWxvbmcgZmlsZUxlbiA9IHNyYy5sZW5ndGgoKTsKLQkJCWlmIChmaWxlTGVuID4gSW50ZWdlci5NQVhfVkFMVUUpCi0JCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJmaWxlIGxlbmd0aCB0b28gYmlnIHRvIGJlIHJlYWQgYnkgRmlsZVV0aWwucmVhZEZpbGU6ICIgKyBmaWxlTGVuKTsKLQkJCi0JCQlieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsoaW50KWZpbGVMZW5dOwotCQkJZmluLnJlYWQoYnl0ZXMpOwotCQkJcmV0dXJuIGJ5dGVzOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZmluLmNsb3NlKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVGaWxlKEZpbGUgZGVzdCwgYnl0ZVtdIGJ5dGVzKQotCQl0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWlmIChkZXN0LmV4aXN0cygpICYmICFkZXN0LmNhbldyaXRlKCkpCi0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIEZJTEVfUkVBRE9OTFlfRVJSICk7ICAvL3Rocm93IHdpdGggYSBjbGVhciBlcnJvciBiZWNhdXNlIG90aGVyd2lzZSBGaWxlT3V0cHV0U3RyZWFtIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24hCi0JCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbShkZXN0LmdldFBhdGgoKSwgZmFsc2UvKmFwcGVuZCovKTsKLQkJdHJ5IHsKLQkJCWZvdXQud3JpdGUoYnl0ZXMpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZm91dC5mbHVzaCgpOwotCQkJZm91dC5jbG9zZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdXJsIGZvciBhIGZpbGUuCi0JICogVGhpcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgZmlsZS50b1VybCgpIGJ1dCB3aXRob3V0IHRoZSBub24tc2Vuc2UgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEZpbGVVcmwoRmlsZSBmaWxlKSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmlsZS50b1VSSSgpLnRvVVJMKCk7Ci0JCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gbnVsbDsgLy9zaG91bGQgbm90IGhhcHBlbiBhcyBmaWxlLnRvVVJMKCkgZG9lcyBub3QgcmVhbGx5IHRocm93IGFuIGV4Y2VwdGlvbgotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNldEZpbGVDb250ZW50KEZpbGUgZmlsZSwgamF2YS5pby5JbnB1dFN0cmVhbSBjb250ZW50cykgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotCQlQYXRoIHBhdGggPSBuZXcgUGF0aChmaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLQkJdHJ5IHsKLQkJCUlGaWxlIGlGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlRm9yTG9jYXRpb24ocGF0aCk7Ci0JCQlpZiAoaUZpbGUgPT0gbnVsbCkgewotCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiVGhlIHBhdGggIiArIGZpbGUgKyAiIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB2YWxpZCBmaWxlIHBhdGguIik7Ci0JCQl9Ci0JCQlpRmlsZS5zZXRDb250ZW50cyhjb250ZW50cywgdHJ1ZS8qZm9yY2UqLywgdHJ1ZS8qa2VlcEhpc3RvcnkqLywgbnVsbC8qbW9uaXRvciovKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBleCkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9CQotCQotICAgIC8qKgotICAgICAqIEV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIGEgSmFyIGFyY2hpdmUgdG8gdGhlIHNwZWNpZmllZCBkZXN0aW5hdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdW5qYXIoSW5wdXRTdHJlYW0gaW4sIEZpbGUgZGVzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCFkZXN0LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICBkZXN0Lm1rZGlycygpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZGVzdC5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRlc3RpbmF0aW9uIG11c3QgYmUgYSBkaXJlY3RvcnkuIik7Ly8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIEphcklucHV0U3RyZWFtIGppbiA9IG5ldyBKYXJJbnB1dFN0cmVhbShpbik7Ci0gICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0XTsKLQotICAgICAgICBaaXBFbnRyeSBlbnRyeSA9IGppbi5nZXROZXh0RW50cnkoKTsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGVudHJ5LmdldE5hbWUoKTsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5jaGFyQXQoZmlsZU5hbWUubGVuZ3RoKCkgLSAxKSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sZW5ndGgoKSAtIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmNoYXJBdCgwKSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChGaWxlLnNlcGFyYXRvckNoYXIgIT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGRlc3QsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzCi0gICAgICAgICAgICAgICAgZmlsZS5ta2RpcnMoKTsKLSAgICAgICAgICAgICAgICBqaW4uY2xvc2VFbnRyeSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMKLSAgICAgICAgICAgICAgICBGaWxlIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50RmlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCAmJiAhcGFyZW50LmV4aXN0cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC5ta2RpcnMoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBkdW1wIHRoZSBmaWxlCi0gICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgICAgICAgIGludCBsZW4gPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlICgobGVuID0gamluLnJlYWQoYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoKSkgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGJ1ZmZlciwgMCwgbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgamluLmNsb3NlRW50cnkoKTsKLSAgICAgICAgICAgICAgICBmaWxlLnNldExhc3RNb2RpZmllZChlbnRyeS5nZXRUaW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZW50cnkgPSBqaW4uZ2V0TmV4dEVudHJ5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIE1FVEEtSU5GL01BTklGRVNULk1GIHNvIHRoYXQgYW55IGhlYWRlcnMgc3VjaAotICAgICAgICAgYXMgdGhlIENsYXNzLVBhdGggYXJlIHNlZW4gZm9yIHRoZSB1bnBhY2thZ2VkIGphcgotICAgICAgICAgKi8KLSAgICAgICAgTWFuaWZlc3QgbWYgPSBqaW4uZ2V0TWFuaWZlc3QoKTsKLSAgICAgICAgaWYgKG1mICE9IG51bGwpIHsKLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGRlc3QsICJNRVRBLUlORi9NQU5JRkVTVC5NRiIpOy8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIEZpbGUgcGFyZW50ID0gZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50LmV4aXN0cygpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50Lm1rZGlycygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotICAgICAgICAgICAgbWYud3JpdGUob3V0KTsKLSAgICAgICAgICAgIG91dC5mbHVzaCgpOwotICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgamluLmNsb3NlKCk7Ci0gICAgfQotICAgIAotCS8vVXNlZCB0byBVbnppcCB0aGUgYSBzcGVjaWZpYyBmb2xkZXIgcGFja2VkIGluc2lkZSBhIHBsdWctaW4gYnVuZGxlIHRvIHRoZSBwbHVnLWluIHN0YXRlIGxvY2F0aW9uCi0JcHVibGljIHN0YXRpYyBGaWxlIGV4dHJhY3RGaWxlc0Zyb21CdW5kbGUoIFVSTCB1cmwsIEJ1bmRsZSBidW5kbGUsIFN0cmluZyBwYXRoICkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCBqYXJVcmwgPSBVcmxVdGlsLmdldEphckZpbGVVcmwodXJsKTsKLQkJRmlsZSBqYXJGaWxlID0gbmV3IEZpbGUoamFyVXJsLmdldEZpbGUoKSApOwotCQlMb2NhdGlvbiBjb25maWdMb2NhdGlvbiA9IFBsYXRmb3JtLmdldENvbmZpZ3VyYXRpb25Mb2NhdGlvbigpOwotCQlTdHJpbmcgcGx1Z2luSWQgPSBidW5kbGUuZ2V0U3ltYm9saWNOYW1lKCk7Ci0JCUZpbGUgY29uZmlnRm9sZGVyID0gbmV3IEZpbGUoIGNvbmZpZ0xvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSwgcGx1Z2luSWQpOwotCQlGaWxlIHRlbXBsRGlyID0gbmV3IEZpbGUoIGNvbmZpZ0ZvbGRlciwgcGF0aCApOwotCQlpZiggIXRlbXBsRGlyLmV4aXN0cygpICl7Ci0JCQlGaWxlVXRpbC51bmphciggbmV3IEZpbGVJbnB1dFN0cmVhbSggamFyRmlsZSApLCBjb25maWdGb2xkZXIgKTsKLQkJCS8vRGVsZXRlIHVuLXJlbGF0ZWQgZmlsZXMgYW5kIGZvbGRlcnMKLQkJCUZpbGVbXSBmaWxlcyA9IGNvbmZpZ0ZvbGRlci5saXN0RmlsZXMoKTsKLQkJCWZvciggRmlsZSBmIDogZmlsZXMgKXsKLQkJCQlpZiggZi5pc0ZpbGUoKSApCi0JCQkJCWYuZGVsZXRlKCk7Ci0JCQkJZWxzZSBpZiggIHRlbXBsRGlyLmdldFBhdGgoKS5pbmRleE9mKCBmLmdldFBhdGgoKSApICE9MCAgKXsKLQkJCQkJRmlsZVV0aWwuZGVsZXRlRm9sZGVyKGYpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdGVtcGxEaXIgOwotCX0JCi19Ci0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvdXRpbC9Gb3JlaWduS2V5SW5mby5qYXZhIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0ZvcmVpZ25LZXlJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZTkxZTkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL0ZvcmVpZ25LZXlJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Gb3JlaWduS2V5OwotCi0vKioKLSAqIFJlcHJlc2VudHMgdGhlIG1ldGFkYXRhIGZvciBhIHBhcnRpY3VsYXIgZm9yZWlnbiBrZXkgcmVsYXRpb25zaGlwIAotICogaW4gYSByZWxhdGlvbmFsIGRhdGFiYXNlIHNjaGVtYS4KLSAqIDxwLz4KLSAqIFRoZSByZWZlcnJlciBjb2x1bW4gaXMgb25lIHdoaWNoIGFjdHVhbGx5IGNvbnRhaW5zIGEgZm9yZWlnbiAKLSAqIGtleSBjb25zdHJhaW50LCBhbmQgaXMgZXF1aXZhbGVudCB0byB0aGUgImZvcmVpZ24ga2V5IiBjb2x1bW4uCi0gKiA8cC8+Ci0gKiBUaGUgcmVmZXJlbmNlZCBjb2x1bW4gaXMgb25lIHdoaWNoIGEgcmVmZXJyZXIgb3IgZm9yZWlnbiBrZXkgCi0gKiBjb2x1bW4gcmVmZXJlbmNlcywgYW5kIGlzIGVxdWl2YWxlbnQgdG8gdGhlICJwcmltYXJ5IGtleSIgY29sdW1uLgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGb3JlaWduS2V5SW5mbwotewotCXByaXZhdGUgdHJhbnNpZW50IEZvcmVpZ25LZXkgbUZvcmVpZ25LZXkgOwotICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIG1SZWZlcnJlclRhYmxlTmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBtUmVmZXJlbmNlZFRhYmxlTmFtZTsKLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtUmVmZXJyZXJDb2xOYW1lcyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtUmVmZXJlbmNlZENvbE5hbWVzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSBmayBUaGUgbmFtZSBvZiB0aGUgY29uc3RyYWludCBiYWNraW5nIAotICAgICAqIHRoaXMgZm9yZWlnbiBrZXkgbWV0YWRhdGEgaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIEZvcmVpZ25LZXlJbmZvKEZvcmVpZ25LZXkgZmssIFN0cmluZyByZWZlcnJlclRhYmxlTmFtZSwgU3RyaW5nIHJlZmVyZW5jZWRUYWJsZU5hbWUpIHsKLSAgICAJbUZvcmVpZ25LZXkgPSBmazsKLSAgICAJbU5hbWUgPSBmay5nZXROYW1lKCk7Ci0gICAgCW1SZWZlcnJlclRhYmxlTmFtZSA9IHJlZmVycmVyVGFibGVOYW1lOwotICAgIAltUmVmZXJlbmNlZFRhYmxlTmFtZSA9IHJlZmVyZW5jZWRUYWJsZU5hbWU7Ci0JfQotICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY29uc3RyYWludCBuYW1lIGZvciB0aGlzIGZvcmVpZ24ga2V5IHNwZWNpZmljYXRpb24uCi0gICAgICogVGhlIG5hbWUgZm9yIGEgRm9yZWlnbiBLZXkgbWF5LCBhcyBwZXIgdGhlIEpEQkMgc3BlY2lmaWNhdGlvbiwKLSAgICAgKiBiZSA8Y29kZT5udWxsPC9jb2RlPiB3aGVyZSB0aGUgY29uc3RyYWludCBpcyBub3QgbmFtZWQuCi0gICAgICogSW4gYWRkaXRpb24sIGl0IG1heSBiZSBoYXJkbHkgcmVjb2duaXphYmxlIHRvIHRoZSB1c2VyLAotICAgICAqIHBhcnRpY3VsYXJseSBmb3IgREIvMiBjb25zdHJhaW50cy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50IGJhY2tpbmcKLSAgICAgKiAgICAgICAgIHRoaXMgZm9yZWlnbiBrZXkgbWV0YWRhdGEgaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtTmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEZvcmVpZ25LZXkgZ2V0Rm9yZWlnbktleSgpewotICAgIAlyZXR1cm4gbUZvcmVpZ25LZXk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIEFkZCBhbm90aGVyIHBhaXIgb2YgZm9yZWlnbiBrZXkgbWFwcGluZ3MgZm9yIHRoaXMgZm9yZWlnbiBrZXkKLSAgICAgKiBkZWZpbml0aW9uLgotICAgICAqIAotICAgICAqIEBwYXJhbSByZWZlcnJlckNvbHVtbiBUaGUgcmVmZXJyZXIgY29sdW1uIG5hbWUgZm9yIHRoaXMgbWFwcGluZy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcmVmZXJlbmNlZENvbHVtbiBUaGUgcmVmZXJlbmNlZCBjb2x1bW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZENvbHVtbk1hcHBpbmcoU3RyaW5nIHJlZmVycmVyQ29sTmFtZSwgU3RyaW5nIHJlZmVyZW5jZWRDb2xOYW1lKSB7Ci0gICAgCW1SZWZlcnJlckNvbE5hbWVzLmFkZChyZWZlcnJlckNvbE5hbWUpOwotICAgIAltUmVmZXJlbmNlZENvbE5hbWVzLmFkZChyZWZlcmVuY2VkQ29sTmFtZSk7Ci0gICAgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHJlZmVycmVyIHRhYmxlIG5hbWUgb2YgdGhpcyBmb3JlaWduIGtleQotICAgICAqIHJlbGF0aW9uc2hpcC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFJlZmVycmVyVGFibGVOYW1lKCkgewotICAgICAgICByZXR1cm4gbVJlZmVycmVyVGFibGVOYW1lOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSByZWZlcnJlciBjb2x1bW4gbmFtZXMgZm9yIHRoaXMKLSAgICAgKiBmb3JlaWduIGtleS4KLSAgICAgKiBUaGUgc2l6ZSBvZiB0aGlzIGxpc3QgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzaXplIG9mIAotICAgICAqIHRoZSBsaXN0IHJldHVyZWQgZnJvbSA8Y29kZT5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZXM8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSZWZlcnJlckNvbHVtbk5hbWVzKCkgewotICAgICAgICByZXR1cm4gbVJlZmVycmVyQ29sTmFtZXM7Ci0gICAgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHJlZmVyZW5jZWQgdGFibGUgbmFtZSBvZiB0aGlzIGZvcmVpZ24ga2V5Ci0gICAgICogcmVsYXRpb25zaGlwLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpIHsKLSAgICAJIHJldHVybiBtUmVmZXJlbmNlZFRhYmxlTmFtZTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcmVmZXJlbmNlZCBjb2x1bW4gbmFtZXMgZm9yIHRoaXMKLSAgICAgKiBmb3JlaWduIGtleS4KLSAgICAgKiBUaGUgc2l6ZSBvZiB0aGlzIGxpc3QgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzaXplIG9mIAotICAgICAqIHRoZSBsaXN0IHJldHVyZWQgZnJvbSA8Y29kZT5nZXRSZWZlcnJlckNvbHVtbk5hbWVzPC9jb2RlPgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWVzKCkgewotICAgICAgICByZXR1cm4gbVJlZmVyZW5jZWRDb2xOYW1lczsKLSAgICB9Ci0gICAgLyogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAJcmV0dXJuICJuYW1lPSIgKyBtTmFtZQotCQkrICIsIHJlZmVycmVyVGFibGU9IiArIG1SZWZlcnJlclRhYmxlTmFtZQotCQkrICIsIHJlZmVyZW5jZWRUYWJsZT0iICsgbVJlZmVyZW5jZWRUYWJsZU5hbWUKLQkJKyAiLCByZWZlcnJlckNvbHVtbnM9IiArIG1SZWZlcnJlckNvbE5hbWVzCi0JCSsgIiwgcmVmZXJlbmNlZENvbHVtbnM9IiArIG1SZWZlcmVuY2VkQ29sTmFtZXMKLQkJCTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvdXRpbC9TdHJpbmdVdGlsLmphdmEgYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL2ludGVybmFsL3V0aWwvU3RyaW5nVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQ1ZTA2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvdXRpbC9TdHJpbmdVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZ2VuLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmJlYW5zLkludHJvc3BlY3RvcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdVdGlsCi17Ci0JLyoqCi0JICogUGFkcyBhIHN0cmluZyBieSBhZGRpbmcgYSBzZXF1ZW5jZSBvZiBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcuCi0JICogQHBhcmFtIHBhZENoYXIgVGhlIGNoYXJhY3RlciB0byBiZSB1c2VkIGZvciBwYWRkaW5nLgotCSAqIEBwYXJhbSBsZW4gVGhlIGRlc2lyZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmcuCi0JICogQHJldHVybiBUaGUgcGFkZGVkIHN0cmluZy4gRm9yIGV4YW1wbGUgaWYgPGNvZGU+c3RyPC9jb2RlPiBpcyAiZjRlIiBhbmQgPGNvZGU+cGFkQ2hhcjwvY29kZT4gaXMgJzAnIAotCSAqIGFuZCA8Y29kZT5sZW48L2NvZGU+IGlzIDYgdGhlbiB0aGlzIG1ldGhvZCByZXR1cm5zICIwMDBmNGUiCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcGFkTGVmdChTdHJpbmcgc3RyLCBjaGFyIHBhZENoYXIsIGludCBsZW4pIHsKLQkJaWYoc3RyID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCWludCBzdHJMZW4gPSBzdHIubGVuZ3RoKCk7Ci0JCWlmIChzdHJMZW4gPCBsZW4pIHsKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGxlbik7Ci0JCQlpbnQgY291bnQgPSBsZW4tc3RyTGVuOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotCQkJCWJ1ZmZlci5hcHBlbmQocGFkQ2hhcik7Ci0JCQlidWZmZXIuYXBwZW5kKHN0cik7Ci0JCQlzdHIgPSBidWZmZXIudG9TdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gc3RyOwotCX0KLQkvKioKLQkgKiBJbnNlcnRzIGEgZ2l2ZW4gY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIHNwZWNpZmllZCBzdHJpbmcuCi0JICogRm9yIGV4YW1wbGUgaWYgdGhlIHN0cmluZyBpcyA8dHQ+ZXh0cmVtZTwvdHQ+IGFuZCB0aGUgY2hhciBpcyA8dHQ+JzwvdHQ+IHRoZW4gCi0JICogdGhlIHJldHVybmVkIHN0cmluZyBpcyA8dHQ+J2V4dGVybWUnPC90dD4uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcXVvdGUoU3RyaW5nIHN0ciwgY2hhciBjKSB7Ci0JCWFzc2VydChzdHIgIT0gbnVsbCk7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKHN0ci5sZW5ndGgoKSsyKTsKLQkJYnVmZmVyLmFwcGVuZChjKTsKLQkJYnVmZmVyLmFwcGVuZChzdHIpOwotCQlidWZmZXIuYXBwZW5kKGMpOwotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRvdWJsZVF1b3RlKFN0cmluZyBzdHIpIHsKLQkJcmV0dXJuIHF1b3RlKHN0ciwgJyInKTsKLQl9Ci0JLyoqCi0JICogUmVtb3ZlcyB0aGUgZmlyc3QgYW5kIGxhc3Qgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKGlmIHRoZXkgZXhpc3QpLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHVucXVvdGUoU3RyaW5nIHF1b3RlZCkgewotCQlpZiAocXVvdGVkICE9IG51bGwgJiYgcXVvdGVkLmxlbmd0aCgpID49IDIpewotCQkJaW50IGxlbiA9IHF1b3RlZC5sZW5ndGgoKTsKLQkJCWNoYXIgZmlyc3RDaGFyID0gcXVvdGVkLmNoYXJBdCgwKTsKLQkJCWNoYXIgbGFzdENoYXIgPSBxdW90ZWQuY2hhckF0KGxlbi0xKTsKLQkJCWlmIChmaXJzdENoYXIgPT0gbGFzdENoYXIgJiYgKGZpcnN0Q2hhciA9PSAnXCcnIHx8IGZpcnN0Q2hhciA9PSAnIicpKSB7Ci0JCQkJcmV0dXJuIHF1b3RlZC5zdWJzdHJpbmcoMSwgbGVuLTEpOwotCQkJfQotCQl9Ci0JCXJldHVybiBxdW90ZWQ7Ci0JfQotCS8qKgotCSAqIFRydW5jYXRlcyBhIHN0cmluZyBhbmQgYWRkcyAiLi4uIiBpbiB0aGUgcmVzdWx0IHN0cmluZy4KLQkgKiBJZiB0aGUgc3RyaW5nIGxlbmd0aCBpcyBsZXNzIG9yIGVxdWFsIHRvIHRoZSBtYXggbGVuIHRoZW4gCi0JICogdGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0cnVuY2F0ZShTdHJpbmcgcywgaW50IG1heExlbikgewotCQlpZiAocyA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlpbnQgbGVuID0gcy5sZW5ndGgoKTsKLQkJaWYgKGxlbiA+IG1heExlbikgewotCQkJaW50IHNlZ21lbnRMZW4gPSBtYXhMZW4vMjsKLQkJCXMgPSBzLnN1YnN0cmluZygwLCBzZWdtZW50TGVuKSArICIuLi4iICsgcy5zdWJzdHJpbmcobGVuLXNlZ21lbnRMZW4pOwotCQl9Ci0JCXJldHVybiBzOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNhbWUgY2hhcmFjdGVyIHJlcGVhdGVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlcGVhdChjaGFyIGMsIGludCBjb3VudCkgewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihjb3VudCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkJYnVmZmVyLmFwcGVuZChjKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGdpdmVuIHN0cmluZyB1bmxlc3MgaXQgaXMgZW10cHR5IHdoZXJlIGl0IHJldHVybnMgbnVsbC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBudWxsSWZFbXB0eShTdHJpbmcgcykgewotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPT0gMCkgewotCQkJcyA9IG51bGw7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCS8qKgotICAgICAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIHRoZSBhcmd1bWVudCBzdHJpbmcgCi0JICogZXhjZXB0IHRoYXQgdGhlIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgdGhlIHRoZWlyIGhleCBjb2RlLgotCSAqIEZvciBleGFtcGxlIGlmIHRoZSBzdHJpbmcgaXMgImFiXG5jIiB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzICJhYnsweEF9YyIuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VmlzaWJsZVN0cmluZyhTdHJpbmcgcykgewotCQlpZiAocyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWludCBsZW4gPSBzLmxlbmd0aCgpOwotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0JCQljaGFyIGMgPSBzLmNoYXJBdChpKTsKLQkJCWlmIChjIDw9IDB4MUYgfHwgKGMgPT0gMHgyMCAmJiAoaSA9PSAwIHx8IGkgPT0gbGVuLTEpKSkgewotCQkJCWJ1ZmZlci5hcHBlbmQoIigweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKChpbnQpYykudG9VcHBlckNhc2UoKSArICIpIik7Ci0JCQl9Ci0JCQllbHNlIGJ1ZmZlci5hcHBlbmQoYyk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQkvKioKLQkgKiBSZXBsYWNlcyBhIHBvcnRpb24gb2Ygc3RyaW5nLgotCSAqIEBwYXJhbSBzdHIgVGhlIG9yaWdpbmFsIHN0cmluZy4KLQkgKiBAcGFyYW0gb2Zmc2V0IFRoZSBvZmZzZXQgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyB3aGVyZSB0aGUgcmVwbGFjZSBzdGFydHMKLQkgKiBAcGFyYW0gbGVuIFRoZSByZXBsYWNlIGxlbmd0aCB0aGUgb3JpZ2luYWwgc3RyaW5nCi0JICogQHBhcmFtIHJlcGxhY2VTdHIgVGhlIHJlcGxhY2VtZW50IHN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHN0clJlcGxhY2UoU3RyaW5nIHN0ciwgaW50IG9mZnNldCwgaW50IGxlbiwgU3RyaW5nIHJlcGxhY2VTdHIpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoc3RyLmxlbmd0aCgpLWxlbityZXBsYWNlU3RyLmxlbmd0aCgpKTsKLQkJYnVmZmVyLmFwcGVuZChzdHIuc3Vic3RyaW5nKDAsIG9mZnNldCkpOwotCQlidWZmZXIuYXBwZW5kKHJlcGxhY2VTdHIpOwotCQlidWZmZXIuYXBwZW5kKHN0ci5zdWJzdHJpbmcob2Zmc2V0K2xlbikpOwotCQkKLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBzdHJSZXBsYWNlKFN0cmluZyBzdHIsIFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZVN0cikKLQl7Ci0JCWlmKHN0ciA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlpZihwYXR0ZXJuID09IG51bGwgfHwgcGF0dGVybi5lcXVhbHMoIiIpKSB7Ci0JCQlyZXR1cm4gc3RyOwotCQl9Ci0JCWludCBpbmRleCA9IHN0ci5pbmRleE9mKHBhdHRlcm4pOwotCQlpZiAoaW5kZXggPCAwKQotCQkJcmV0dXJuIHN0cjsKLQkJCi0JCWlmIChyZXBsYWNlU3RyID09IG51bGwpCi0JCQlyZXBsYWNlU3RyID0gIiI7Ci0JCXJldHVybiBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VTdHIgKyBzdHIuc3Vic3RyaW5nKGluZGV4ICsgcGF0dGVybi5sZW5ndGgoKSk7Ci0JfQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHN0clJlcGxhY2VBbGwoU3RyaW5nIHN0ciwgU3RyaW5nIHBhdHRlcm4sIFN0cmluZyByZXBsYWNlU3RyKQotCXsKLQkJaWYoc3RyID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCWlmIChyZXBsYWNlU3RyID09IG51bGwpCi0JCQlyZXBsYWNlU3RyID0gIiI7Ci0JCWlmKHBhdHRlcm4gPT0gbnVsbCB8fCBwYXR0ZXJuLmVxdWFscygiIikpIHsKLQkJCXJldHVybiBzdHI7Ci0JCX0KLQkJaW50IGluZGV4ID0gc3RyLmluZGV4T2YocGF0dGVybik7Ci0JCXdoaWxlIChpbmRleCA+PSAwKSB7Ci0JCQlzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VTdHIgKyBzdHIuc3Vic3RyaW5nKGluZGV4ICsgcGF0dGVybi5sZW5ndGgoKSk7Ci0JCQlpbmRleCA9IHN0ci5pbmRleE9mKHBhdHRlcm4sIGluZGV4K3JlcGxhY2VTdHIubGVuZ3RoKCkpOwotCQl9Ci0JCXJldHVybiBzdHI7Ci0JfQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHN0ckluc2VydChTdHJpbmcgc3RyLCBpbnQgaW5kZXgsIFN0cmluZyBpbnNlcnRTdHIpCi0JewotCQlyZXR1cm4gc3RyLnN1YnN0cmluZygwLCBpbmRleCkKLQkJCQkrIGluc2VydFN0cgotCQkJCSsgc3RyLnN1YnN0cmluZyhpbmRleCk7Ci0JfQotICAgIC8qKgotICAgICAqIFRva2VuaXplIHRoZSBzcGVjaWZpZWQgc3RyaW5nIGludG8gYSA8Y29kZT5MaXN0PC9jb2RlPiBvZgotICAgICAqIHdvcmRzLgotICAgICAqIElmIHRoZSBzdHJpbmcgc3BlY2lmaWVkIGlzIDxjb2RlPm51bGw8L2NvZGU+IG9yIGVtcHR5LCB0aGlzCi0gICAgICogbWV0aG9kIHdpbGwgcmV0dXJuIDxjb2RlPm51bGw8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbSBzICAgICAgVGhlIHN0cmluZyB0byB0b2tlbml6ZSBpbnRvIGEgPGNvZGU+TGlzdDwvY29kZT4uCi0gICAgICogQHBhcmFtIHNlcCAgICBUaGUgc2VwYXJhdG9yIGNoYXJhY3RlciB0byB1c2UgdG8gc3BsaXQKLSAgICAgKiAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuCi0gICAgICogQHBhcmFtIHRyaW0gICBJZiA8Y29kZT50cnVlPC9jb2RlPiwgcnVuIDxjb2RlPnRyaW08L2NvZGU+IG9uCi0gICAgICogICAgICAgICAgICAgICBlYWNoIGVsZW1lbnQgaW4gdGhlIHJlc3VsdCA8Y29kZT5MaXN0PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIEEgPGNvZGU+TGlzdDwvY29kZT4gY29udGFpbmluZyBhbGwgdG9rZW5pemVkIHdvcmRzCi0gICAgICogICAgICAgICBpbiB0aGUgcGFyYW1ldGVyIHN0cmluZy4KLSAgICAgKiAgICAgICAgIEVhY2ggZWxlbWVudCBpcyBvZiB0eXBlIDxjb2RlPlN0cmluZzwvY29kZT4uCi0gICAgICovCi0JcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gc3RyVG9MaXN0KFN0cmluZyBzLCBjaGFyIHNlcCwgYm9vbGVhbiB0cmltKQotCXsKLQkvL2V4OiBpZiBzZXAgaXMgJzsnIHRoZW4gcyBzaG91bGQgYmUgc29tZXRpbmcgbGlrZSAiUmVkO0JsYWNrIgotCQlpZiAocyA9PSBudWxsIHx8IHMubGVuZ3RoKCkgPT0gMCkKLQkJCXJldHVybiBudWxsOwotCQkJCi0JCUFycmF5TGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQkKLQkJY2hhciBkZWxpbWl0ZXJzW10gPSB7c2VwfTsKLQkJamF2YS51dGlsLlN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcihzLCBuZXcgU3RyaW5nKGRlbGltaXRlcnMpLCB0cnVlLypyZXR1cm5EZWxpbWl0ZXJzKi8pOwotCQlTdHJpbmcgbGFzdFRvaz1udWxsOwotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJU3RyaW5nIHRvayA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKLQkJCWlmICh0b2subGVuZ3RoKCk9PTEgJiYgdG9rLmNoYXJBdCgwKT09c2VwKXsvL2RlbGltaXRlcgotCQkJICAgIGlmICh0b2suZXF1YWxzKGxhc3RUb2spfHxsYXN0VG9rPT1udWxsLypmaXJzdCBlbGVtZW50IGlzIGVtcHR5Ki8pCi0JCQkgICAgICAgIHJlc3VsdC5hZGQoIiIpOwotCQkJfQotCQkJZWxzZXsKLQkJCSAgICBpZiAodHJpbSkKLQkJCSAgICAgICAgdG9rID0gdG9rLnRyaW0oKTsKLQkJCSAgICByZXN1bHQuYWRkKHRvayk7Ci0JCQl9Ci0JCQlsYXN0VG9rPXRvazsKLQkJfQotCQlpZihsYXN0VG9rLmxlbmd0aCgpPT0xICYmIGxhc3RUb2suY2hhckF0KDApPT1zZXApLy9sYXN0IGVsZW1lbnQgaXMgZW1wdHkKLQkJICAgIHJlc3VsdC5hZGQoIiIpOwotCQlyZXN1bHQudHJpbVRvU2l6ZSgpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBzdHJUb0xpc3QoU3RyaW5nIHMsIGNoYXIgc2VwKQotCXsKLQkJcmV0dXJuIHN0clRvTGlzdChzLCBzZXAsIGZhbHNlLyp0cmltKi8pOwotCX0KLQkKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBsaXN0VG9TdHIoQ29sbGVjdGlvbiBhLCBjaGFyIHNlcCkKLQl7Ci0JCXJldHVybiBsaXN0VG9TdHIoYSwgU3RyaW5nLnZhbHVlT2Yoc2VwKSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxpc3RUb1N0cihDb2xsZWN0aW9uPE9iamVjdD4gYSwgU3RyaW5nIHNlcCkgewotCQkvL3JldmVyc2Ugb2Ygc3RyVG9MaXN0Ci0JCWlmIChhID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaW50IGNvdW50ID0gYS5zaXplKCk7Ci0JCWlmIChjb3VudCA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbnVsbDsKLQkJZm9yIChJdGVyYXRvcjxPYmplY3Q+IGl0ZXIgPSBhLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyApCi0JCXsKLQkJCU9iamVjdCBvYmogPSBpdGVyLm5leHQoKTsKLQkJCWlmIChvYmogPT0gbnVsbCkKLQkJCQljb250aW51ZTsKLQkJCQotCQkJaWYgKGJ1ZmZlciA9PSBudWxsKQotCQkJCWJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWVsc2UKLQkJCQlidWZmZXIuYXBwZW5kKHNlcCk7Ci0JCQlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKQotCQkJCWJ1ZmZlci5hcHBlbmQoKFN0cmluZylvYmopOwotCQkJZWxzZQotCQkJCWJ1ZmZlci5hcHBlbmQob2JqKTsKLQkJfQotCQlyZXR1cm4gKGJ1ZmZlciAhPSBudWxsKSA/IGJ1ZmZlci50b1N0cmluZygpIDogbnVsbDsKLQl9Ci0JLyoqCi0JICogQ29udmVydCB0aGUgdGV4dCBvZiBhIFN0cmluZyBpbnRvIGEgTWFwIG9mIFN0cmluZ3MsIHdoZXJlIGVhY2gKLQkgKiBrZXkgYW5kIHZhbHVlIGluIHRoZSBNYXAgaXMgb2YgdHlwZSBTdHJpbmcuCi0JICogCi0JICogQHBhcmFtIHMgICAgICBUaGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZCB0byBhIE1hcC4KLQkgKiBAcGFyYW0gc2VwMSAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBrZXlzIGFuZCB0aGVpcgotCSAqICAgICAgICAgICAgICAgdmFsdWVzLgotCSAqIEBwYXJhbSBzZXAyICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGtleS12YWx1ZSBwYWlycy4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzdHJpbmcgY29udmVydGVkIHRvIGEgTWFwLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgamF2YS51dGlsLk1hcDxTdHJpbmcsIFN0cmluZz4gc3RyVG9NYXAoU3RyaW5nIHMsIGNoYXIgc2VwMSwgY2hhciBzZXAyKQotCXsKLQkJcmV0dXJuIHN0clRvTWFwKHMsIHNlcDEsIHNlcDIsIGZhbHNlLypsb3dlcmNhc2VLZXlzKi8pOwotCX0KLQkvKioKLQkgKiBDb252ZXJ0IHRoZSB0ZXh0IG9mIGEgU3RyaW5nIGludG8gYSBNYXAgb2YgU3RyaW5ncywgd2hlcmUgZWFjaAotCSAqIGtleSBhbmQgdmFsdWUgaW4gdGhlIE1hcCBpcyBvZiB0eXBlIFN0cmluZy4KLQkgKiBUaGlzIGZvcm0gYWxzbyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhhdCBhbGwga2V5cyB3aWxsIGJlCi0JICogY29udmVydGVkIHRvIGxvd2VyLWNhc2UgYmVmb3JlIGFkZGluZyB0byB0aGUgTWFwLgotCSAqIAotCSAqIEBwYXJhbSBzICAgICAgVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBNYXAuCi0JICogQHBhcmFtIHNlcDEgICBUaGUgc2VwYXJhdG9yIGJldHdlZW4ga2V5cyBhbmQgdGhlaXIKLQkgKiAgICAgICAgICAgICAgIHZhbHVlcy4KLQkgKiBAcGFyYW0gc2VwMiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBrZXktdmFsdWUgcGFpcnMuCi0JICogQHBhcmFtIGxvd2VyY2FzZUtleXMKLQkgKiAgICAgICAgICAgICAgIFdoZXRoZXIgdG8gY29udmVydCBrZXlzIHRvIGxvd2VyIGNhc2UKLQkgKiAgICAgICAgICAgICAgIGJlZm9yZSBhZGRpbmcgdG8gdGhlIE1hcC4KLQkgKiAKLQkgKiBAcmV0dXJuIFRoZSBzdHJpbmcgY29udmVydGVkIHRvIGEgTWFwLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgamF2YS51dGlsLk1hcDxTdHJpbmcsIFN0cmluZz4gc3RyVG9NYXAoU3RyaW5nIHMsIGNoYXIgc2VwMSwgY2hhciBzZXAyLCBib29sZWFuIGxvd2VyY2FzZUtleXMpCi0JewotCQkvL2V4OiBpZiBzZXAxIGlzICc6JyBhbmQgc2VwMiBpcyAnLCcgdGhlbiBzIHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSAiY29sb3I6UmVkLHNpemU6WEwiCi0JCQotCQlpZiAocyA9PSBudWxsIHx8IHMubGVuZ3RoKCkgPT0gMCkgewotCQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0JCX0KLQkJCQotCQlqYXZhLnV0aWwuTGlzdDxTdHJpbmc+IGEgPSBzdHJUb0xpc3Qocywgc2VwMik7Ci0JCWlmIChhID09IG51bGwpIHsKLQkJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwotCQl9Ci0JCQotCQlqYXZhLnV0aWwuSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaG0gPSBuZXcgamF2YS51dGlsLkhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCWludCBjb3VudCA9IGEuc2l6ZSgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0JCXsKLQkJCVN0cmluZyBzMiA9IChTdHJpbmcpYS5nZXQoaSk7IC8vZXg6IGNvbG9yOlJlZAotCQkJaW50IHBvcyA9IHMyLmluZGV4T2Yoc2VwMSk7Ci0JCQlpZiAocG9zID49IDApCi0JCQl7Ci0JCQkJU3RyaW5nIG5hbWUgPSBzMi5zdWJzdHJpbmcoMCwgcG9zKTsKLQkJCQlTdHJpbmcgdmFsID0gczIuc3Vic3RyaW5nKHBvcysxKTsKLQkJCQlpZiAobG93ZXJjYXNlS2V5cykKLQkJCQkJbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCQlobS5wdXQobmFtZSwgdmFsKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaG07Ci0JfQotCQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG1hcFRvU3RyKGphdmEudXRpbC5NYXAgaG0sIGNoYXIgc2VwMSwgY2hhciBzZXAyKQotCS8vcmV2ZXJzZSBvZiBzdHJUb01hcAotCXsKLQkJaWYgKGhtID09IG51bGwgfHwgaG0uaXNFbXB0eSgpKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlqYXZhLnV0aWwuSXRlcmF0b3I8amF2YS51dGlsLk1hcC5FbnRyeT4gaXRlciA9IGhtLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQlqYXZhLnV0aWwuTWFwLkVudHJ5IGVudHJ5ID0gKGphdmEudXRpbC5NYXAuRW50cnkpaXRlci5uZXh0KCk7Ci0JCQlidWZmZXIuYXBwZW5kKGVudHJ5LmdldEtleSgpKTsKLQkJCWJ1ZmZlci5hcHBlbmQoc2VwMSk7Ci0JCQlidWZmZXIuYXBwZW5kKGVudHJ5LmdldFZhbHVlKCkpOwotCQkJaWYgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJYnVmZmVyLmFwcGVuZChzZXAyKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotICAgIC8qKgotICAgICAqIFBlcmZvcm0gYSA8ZW0+Y2FzZSBpbnNlbnNpdGl2ZTwvZW0+IGNvbXBhcmlzb24gYmV0d2VlbgotICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIHR3byBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbSBvYmoxICAgVGhlIGZpcnN0IG9iamVjdCB0byBjb21wYXJlLgotICAgICAqIEBwYXJhbSBvYmoyICAgVGhlIHNlY29uZCBvYmplY3QgdG8gY29tcGFyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGJvdGggb2JqZWN0cyBoYXZlIHRoZQotICAgICAqICAgICAgICAgc2FtZSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAgICAgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY29tcGFyZUFzU3RyaW5ncyhPYmplY3Qgb2JqMSwgT2JqZWN0IG9iajIpCi0JewkKLQkJaWYgKG9iajEgPT0gbnVsbCB8fCBvYmoyID09IG51bGwpCi0JCQlyZXR1cm4gb2JqMSA9PSBvYmoyOwotCQkKLQkJU3RyaW5nIHMxLCBzMjsKLQkJaWYgKG9iajEgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCXMxID0gKFN0cmluZylvYmoxOwotICAgICAgICB9IGVsc2UgewotCQkJczEgPSBvYmoxLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQkJaWYgKG9iajIgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLQkJCXMyID0gKFN0cmluZylvYmoyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotCQkJczIgPSBvYmoyLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQkJCi0JCXJldHVybiBzMS5lcXVhbHNJZ25vcmVDYXNlKHMyKTsKLQl9Ci0JLyoqCi0JICogVGVzdHMgd2hldGhlciBhIHN0cmluZyBzdGFydHMgd2l0aCBhbnkgb2YgYSBsaXN0IG9mIHN0cmluZ3MuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHN0YXJ0c1dpdGhBbnkoU3RyaW5nIHMsIExpc3Q8U3RyaW5nPiBwcmVmaXhlcykgewotCQlpbnQgY291bnQgPSBwcmVmaXhlcy5zaXplKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkJaWYgKHMuc3RhcnRzV2l0aCgoU3RyaW5nKXByZWZpeGVzLmdldChpKSkpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGFyZ3VtZW50IHN0cmluZyB3aXRoIHRoZSBmaXJzdCBjaGFyIHVwcGVyLWNhc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgaW5pdFVwcGVyKFN0cmluZyBzdHIpIHsKLQkJaWYgKHN0ciA9PSBudWxsIHx8IHN0ci5sZW5ndGgoKSA9PSAwKSB7Ci0JCQlyZXR1cm4gc3RyOwotCQl9Ci0JCXJldHVybiBDaGFyYWN0ZXIudG9VcHBlckNhc2Uoc3RyLmNoYXJBdCgwKSkgKyBzdHIuc3Vic3RyaW5nKDEpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBhcmd1bWVudCBzdHJpbmcgd2l0aCB0aGUgZmlyc3QgY2hhciBsb3dlci1jYXNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGluaXRMb3dlcihTdHJpbmcgc3RyKSB7Ci0JCWlmIChzdHIgPT0gbnVsbCB8fCBzdHIubGVuZ3RoKCkgPT0gMCkgewotCQkJcmV0dXJuIHN0cjsKLQkJfQotCQlyZXR1cm4gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHN0ci5jaGFyQXQoMCkpICsgc3RyLnN1YnN0cmluZygxKTsKLQl9Ci0JLyoqCi0JICogVGVzdHMgd2hldGhlciBhbGwgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIGFyZSB1cHBlcgotCSAqIGNhc2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXBwZXJDYXNlKFN0cmluZyBzKSB7Ci0JCXJldHVybiBzLnRvVXBwZXJDYXNlKCkuZXF1YWxzKHMpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBmaXJzdCBub24td2hpdGUgY2hhciBpbmRleCBzdGFydGluZyBmcm9tIHRoZSAKLQkgKiBzcGVjaWZpZWQgaW5kZXguCi0JICovCi0JcHVibGljIHN0YXRpYyBpbnQgc2tpcFdoaXRlU3BhY2VzKFN0cmluZyBzdHIsIGludCBpbmRleCkgewotCQlpbnQgbGVuID0gc3RyLmxlbmd0aCgpOwotCQl3aGlsZSAoaW5kZXggPCBsZW4pIHsKLQkJCWlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShzdHIuY2hhckF0KGluZGV4KSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCSsraW5kZXg7Ci0JCX0KLQkJcmV0dXJuIGluZGV4OwotCX0KLQkvKioKLQkgKiBDb2xsYXBzZXMgY29uc2VjdXRpdmUgd2hpdGUgc3BhY2VzIGludG8gb25lIHNwYWNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbGxhcHNlV2hpdGVTcGFjZXMoU3RyaW5nIHN0cil7Ci0JICAgIFN0cmluZyByZXN1bHQ9bnVsbDsKLQkgICAgaWYgKHN0ciE9bnVsbCl7Ci0JICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyPW5ldyBTdHJpbmdCdWZmZXIoKTsKLQkgICAgICAgIGJvb2xlYW4gaXNJbldoaXRlU3BhY2U9ZmFsc2U7Ci0JICAgICAgICBmb3IgKGludCBpPTA7aTxzdHIubGVuZ3RoKCk7aSsrKXsKLQkgICAgICAgICAgICBjaGFyIGM9c3RyLmNoYXJBdChpKTsKLQkgICAgICAgICAgICBpZiAoQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKSl7Ci0JICAgICAgICAgICAgICAgIGlzSW5XaGl0ZVNwYWNlPXRydWU7Ci0JICAgICAgICAgICAgfQotCSAgICAgICAgICAgIGVsc2UgewotCSAgICAgICAgICAgICAgICBpZiAoaXNJbldoaXRlU3BhY2UpCi0JICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIgIik7Ci0JICAgICAgICAgICAgICAgIGlzSW5XaGl0ZVNwYWNlPWZhbHNlOyAgIAotCSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGMpOwotCSAgICAgICAgICAgIH0KLQkgICAgICAgIH0KLQkgICAgICAgIHJlc3VsdD1idWZmZXIudG9TdHJpbmcoKTsKLQkgICAgfQotCSAgICByZXR1cm4gcmVzdWx0OwotCX0KLQkKLQkvKioKLQkgKiBVdGlsaXR5IG1ldGhvZHMgdXNlZCB0byBjb252ZXJ0IERCIG9iamVjdCBuYW1lcyB0byAgCi0JICogYXBwcm9wcmlhdGUgSmF2YSB0eXBlIGFuZCBmaWVsZCBuYW1lIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHBsdXJhbGlzZShTdHJpbmcgbmFtZSkgewotCQlTdHJpbmcgcmVzdWx0ID0gbmFtZTsKLQkJaWYgKG5hbWUubGVuZ3RoKCkgPT0gMSkgewotCQkJcmVzdWx0ICs9ICdzJzsKLQkJfSBlbHNlIGlmICghc2VlbXNQbHVyYWxpc2VkKG5hbWUpKSB7Ci0JCQlTdHJpbmcgbG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0JCQlpZiAoIWxvd2VyLmVuZHNXaXRoKCJkYXRhIikpIHsgLy9vcmRlckRhdGEgLS0+IG9yZGVyRGF0YXMgaXMgZHVtYgotCQkJCWNoYXIgc2Vjb25kTGFzdCA9IGxvd2VyLmNoYXJBdChuYW1lLmxlbmd0aCgpIC0gMik7Ci0JCQkJaWYgKCFpc1Zvd2VsKHNlY29uZExhc3QpICYmIGxvd2VyLmVuZHNXaXRoKCJ5IikpIHsKLQkJCQkJLy8gY2l0eSwgYm9keSBldGMgLS0+IGNpdGllcywgYm9kaWVzCi0JCQkJCXJlc3VsdCA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoKCkgLSAxKSArICJpZXMiOwotCQkJCX0gZWxzZSBpZiAobG93ZXIuZW5kc1dpdGgoImNoIikgfHwgbG93ZXIuZW5kc1dpdGgoInMiKSkgewotCQkJCQkvLyBzd2l0Y2ggLS0+IHN3aXRjaGVzICBvciBidXMgLS0+IGJ1c2VzCi0JCQkJCXJlc3VsdCA9IG5hbWUgKyAiZXMiOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJlc3VsdCA9IG5hbWUgKyAicyI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2luZ3VsYXJpc2UoU3RyaW5nIG5hbWUpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG5hbWU7Ci0JCWlmIChzZWVtc1BsdXJhbGlzZWQobmFtZSkpIHsKLQkJCVN0cmluZyBsb3dlciA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLQkJCWlmIChsb3dlci5lbmRzV2l0aCgiaWVzIikpIHsKLQkJCQkvLyBjaXRpZXMgLS0+IGNpdHkKLQkJCQlyZXN1bHQgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCgpIC0gMykgKyAieSI7Ci0JCQl9IGVsc2UgaWYgKGxvd2VyLmVuZHNXaXRoKCJjaGVzIikgfHwgbG93ZXIuZW5kc1dpdGgoInNlcyIpKSB7Ci0JCQkJLy8gc3dpdGNoZXMgLS0+IHN3aXRjaCBvciBidXNlcyAtLT4gYnVzCi0JCQkJcmVzdWx0ID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGgoKSAtIDIpOwotCQkJfSBlbHNlIGlmIChsb3dlci5lbmRzV2l0aCgicyIpKSB7Ci0JCQkJLy8gY3VzdG9tZXJzIC0tPiBjdXN0b21lcgotCQkJCXJlc3VsdCA9IG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoKCkgLSAxKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIGlzVm93ZWwoY2hhciBjKSB7Ci0JCWJvb2xlYW4gdm93ZWwgPSBmYWxzZTsKLQkJdm93ZWwgfD0gYyA9PSAnYSc7Ci0JCXZvd2VsIHw9IGMgPT0gJ2UnOwotCQl2b3dlbCB8PSBjID09ICdpJzsKLQkJdm93ZWwgfD0gYyA9PSAnbyc7Ci0JCXZvd2VsIHw9IGMgPT0gJ3UnOwotCQl2b3dlbCB8PSBjID09ICd5JzsKLQkJcmV0dXJuIHZvd2VsOwotCX0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIHNlZW1zUGx1cmFsaXNlZChTdHJpbmcgbmFtZSkgewotCQluYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotCQlib29sZWFuIHBsdXJhbGlzZWQgPSBmYWxzZTsKLQkJcGx1cmFsaXNlZCB8PSBuYW1lLmVuZHNXaXRoKCJlcyIpOwotCQlwbHVyYWxpc2VkIHw9IG5hbWUuZW5kc1dpdGgoInMiKTsKLQkJcGx1cmFsaXNlZCAmPSAhKG5hbWUuZW5kc1dpdGgoInNzIikgfHwgbmFtZS5lbmRzV2l0aCgidXMiKSk7Ci0JCXJldHVybiBwbHVyYWxpc2VkOwotCX0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIG5hbWUgb2YgYSBjbGFzcyBuYW1lLgotCSAqIEZvciBleGFtcGxlIGlmIGdpdmVuIDxjb2RlPm9yYWNsZS51dGlsLk9iamVjdFV0aWw8L2NvZGU+IGl0IHdvdWxkIHJldHVybiAKLQkgKiA8Y29kZT5vcmFjbGUudXRpbDwvY29kZT4uIElmIHRoZSBjbGFzcyBpcyBub3QgaW4gYSBwYWNrYWdlIHRoZW4gbnVsbCBpcyByZXR1cm5lZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7Ci0JCWlmKGNsYXNzTmFtZSA9PSBudWxsKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlpbnQgbGFzdERvdEluZGV4ID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0JCWlmIChsYXN0RG90SW5kZXggPCAwKQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBjbGFzc05hbWUuc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCk7Ci0JfQotCS8qKgotCSAqIFJldHVybnMgdGhlIGNsYXNzIG5hbWUgZ2l2ZW4gYSBmdWxsIGNsYXNzIG5hbWUuCi0JICogRm9yIGV4YW1wbGUgaWYgZ2l2ZW4gPGNvZGU+b3JhY2xlLnV0aWwuT2JqZWN0VXRpbDwvY29kZT4gaXQgd291bGQgcmV0dXJuIAotCSAqIDxjb2RlPk9iamVjdFV0aWw8L2NvZGU+Ci0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKFN0cmluZyBmdWxsQ2xhc3NOYW1lKSB7Ci0JCWlmKGZ1bGxDbGFzc05hbWUgPT0gbnVsbCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJaW50IGxhc3REb3RJbmRleCA9IGZ1bGxDbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGxhc3REb3RJbmRleCA8IDApCi0JCQlyZXR1cm4gZnVsbENsYXNzTmFtZTsKLQkJcmV0dXJuIGZ1bGxDbGFzc05hbWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCsxKTsKLQl9Ci0KLQkKLQkvKioKLQkgKiBDb252ZXJ0cyBhIGRhdGFiYXNlIGNvbHVtbiBuYW1lIHRvIGEgSmF2YSB2YXJpYWJsZSBuYW1lICg8ZW0+Zmlyc3QgbGV0dGVyCi0JICogbm90IGNhcGl0YWxpemVkPC9lbT4pLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbHVtbk5hbWVUb1Zhck5hbWUoU3RyaW5nIGNvbHVtbk5hbWUpIHsKLQkJcmV0dXJuIGRiTmFtZVRvVmFyTmFtZShjb2x1bW5OYW1lKTsKLQl9Ci0JLyoqCi0JICogQ29udmVydHMgYSBkYXRhYmFzZSB0YWJsZSBuYW1lIHRvIGEgSmF2YSB2YXJpYWJsZSBuYW1lICg8ZW0+Zmlyc3QgbGV0dGVyCi0JICogbm90IGNhcGl0YWxpemVkPC9lbT4pLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRhYmxlTmFtZVRvVmFyTmFtZShTdHJpbmcgdGFibGVOYW1lKSB7Ci0JCXJldHVybiBkYk5hbWVUb1Zhck5hbWUodGFibGVOYW1lKTsKLQl9Ci0JLyoqCi0JICogQ29udmVydHMgYSBkYXRhYmFzZSBuYW1lICh0YWJsZSBvciBjb2x1bW4pIHRvIGEgamF2YSBuYW1lICg8ZW0+Zmlyc3QgbGV0dGVyCi0JICogbm90IGNhcGl0YWxpemVkPC9lbT4pLiBlbXBsb3llZV9uYW1lIG9yIGVtcGxveWVlLW5hbWUgLT4gZW1wbG95ZWVOYW1lCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRiTmFtZVRvVmFyTmFtZShTdHJpbmcgcykgewotCQlpZiAoIiIuZXF1YWxzKHMpKSB7Ci0JCQlyZXR1cm4gczsKLQkJfQotCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWJvb2xlYW4gY2FwaXRhbGl6ZSA9IHRydWU7Ci0JCWJvb2xlYW4gbGFzdENhcGl0YWwgPSBmYWxzZTsKLQkJYm9vbGVhbiBsYXN0RGVjYXBpdGFsaXplZCA9IGZhbHNlOwotCQlTdHJpbmcgcCA9IG51bGw7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlTdHJpbmcgYyA9IHMuc3Vic3RyaW5nKGksIGkgKyAxKTsKLQkJCWlmICgiXyIuZXF1YWxzKGMpIHx8ICIgIi5lcXVhbHMoYykpIHsKLQkJCQljYXBpdGFsaXplID0gdHJ1ZTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGMudG9VcHBlckNhc2UoKS5lcXVhbHMoYykpIHsKLQkJCQlpZiAobGFzdERlY2FwaXRhbGl6ZWQgJiYgIWxhc3RDYXBpdGFsKSB7Ci0JCQkJCWNhcGl0YWxpemUgPSB0cnVlOwotCQkJCX0KLQkJCQlsYXN0Q2FwaXRhbCA9IHRydWU7Ci0JCQl9IGVsc2UgewotCQkJCWxhc3RDYXBpdGFsID0gZmFsc2U7Ci0JCQl9Ci0KLQkJCWlmIChjYXBpdGFsaXplKSB7Ci0JCQkJaWYgKHAgPT0gbnVsbCB8fCAhcC5lcXVhbHMoIl8iKSkgewotCQkJCQlyZXN1bHQuYXBwZW5kKGMudG9VcHBlckNhc2UoKSk7Ci0JCQkJCWNhcGl0YWxpemUgPSBmYWxzZTsKLQkJCQkJcCA9IGM7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmVzdWx0LmFwcGVuZChjLnRvTG93ZXJDYXNlKCkpOwotCQkJCQljYXBpdGFsaXplID0gZmFsc2U7Ci0JCQkJCXAgPSBjOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJcmVzdWx0LmFwcGVuZChjLnRvTG93ZXJDYXNlKCkpOwotCQkJCWxhc3REZWNhcGl0YWxpemVkID0gdHJ1ZTsKLQkJCQlwID0gYzsKLQkJCX0KLQotCQl9Ci0JCS8qdGhpcyB3YXMgdXNpbmcgU3RyaW5nVXRpbC5pbml0TG93ZXIuIENoYW5nZWQgdG8gSW50cm9zcGVjdG9yLmRlY2FwaXRhbGl6ZSBzbyB0aGF0IAotCQkgKiBpdCByZXR1cm5zIHRoZSBjb3JyZWN0IGJlYW4gcHJvcGVydHkgbmFtZSB3aGVuIGNhbGxlZCBmcm9tIGNvbHVtbk5hbWVUb1Zhck5hbWUuCi0JCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIFVSTCB3b3VsZCBiZSB1Ukwgd2hpY2ggd291bGQgY2F1c2UgCi0JCSAqIGFuICJUaGUgcHJvcGVydHkgdVJMIGlzIHVuZGVmaW5lZCBmb3IgdGhlIHR5cGUgeHgiIGVycm9yIGJlY2F1c2UgCi0JCSAqIEludHJvc3BlY3Rvci5nZXRCZWFuSW5mbyAodXNlZCBieSBKYXZhVHlwZUludHJvc3BlY3RvcikgcmV0dXJucyAKLQkJICogdGhlIHByb3BlcnR5IG5hbWUgYXMgVVJMLiovCi0JCVN0cmluZyByZXN1bHRTdHIgPSBJbnRyb3NwZWN0b3IuZGVjYXBpdGFsaXplKHJlc3VsdC50b1N0cmluZygpKTsKLQkJaWYgKHJlc3VsdFN0ci5lcXVhbHMoImNsYXNzIikpIHsKLQkJCS8vICJjbGFzcyIgaXMgaWxsZWdhbCBiZWNhdXNlT2YgT2JqZWN0LmdldENsYXNzKCkgY2xhc2gKLQkJCXJlc3VsdFN0ciA9ICJjbGF6eiI7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdFN0cjsKLQl9Ci0JCi0JLyoqCi0JICogQ29tcGFyZSB0d28gb2JqZWN0cy4gSWYgYm90aCBTdHJpbmcsIGlnbm9yZSBjYXNlCi0JICogQHBhcmFtIG8xCi0JICogQHBhcmFtIG8yCi0JICogQHBhcmFtIGlnbm9yZUNhc2VJZlN0cgotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxPYmplY3RzKE9iamVjdCBvMSwgT2JqZWN0IG8yLCBib29sZWFuIGlnbm9yZUNhc2VJZlN0cikKLQl7Ci0JCWlmIChvMSA9PSBvMikgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkgICAgYm9vbGVhbiByZXN1bHQ7Ci0JICAgIGlmIChvMSA9PSBudWxsIHx8IG8yID09IG51bGwpIHsKLQkgICAgCXJldHVybiBmYWxzZTsgLy93ZSBhbHJlYWR5IGNoZWNrZWQgbzEgPT0gbzIgYWJvdmUKLQkgICAgfQotCSAgICBpZiAoaWdub3JlQ2FzZUlmU3RyICYmIG8xIGluc3RhbmNlb2YgU3RyaW5nICYmIG8yIGluc3RhbmNlb2YgU3RyaW5nKQotCSAgICAgICAgcmVzdWx0ID0gKChTdHJpbmcpbzEpLmVxdWFsc0lnbm9yZUNhc2UoKFN0cmluZylvMik7Ci0JICAgIGVsc2UKLQkgICAgICAgIHJlc3VsdCA9IG8xLmVxdWFscyhvMik7Ci0JCi0JICAgIHJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGVxdWFsT2JqZWN0cyhPYmplY3QgbzEsIE9iamVjdCBvMikKLQl7Ci0JICAgIHJldHVybiBlcXVhbE9iamVjdHMobzEsIG8yLCBmYWxzZS8qaWdub3JlQ2FzZUlmU3RyKi8pOwotCX0KLQkKLX0KLQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL1VybFV0aWwuamF2YSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vaW50ZXJuYWwvdXRpbC9VcmxVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZWY4ZjguLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi9zcmMvb3JnL2VjbGlwc2UvanB0L2dlbi9pbnRlcm5hbC91dGlsL1VybFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBDb2xsZWN0aW9ucyBvZiB1dGlsaXR5IG1ldGhvZHMgaGFuZGxpbmcgVVJMcy4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVXJsVXRpbAotewotCS8qKgotCSAqIFRoZSA8Y29kZT5maWxlPC9jb2RlPiBzdHJpbmcgaW5kaWNhdGluZyBhIHVybCBmaWxlIHByb3RvY29sLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZSI7Ci0JLyoqCi0JICogVGhlIDxjb2RlPmZpbGU8L2NvZGU+IHN0cmluZyBpbmRpY2F0aW5nIGEgdXJsIGh0dHAgcHJvdG9jb2wuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9QUk9UT0NPTCA9ICJodHRwIjsKLQkvKioKLQkgKiBUaGUgPGNvZGU+ZmlsZTwvY29kZT4gc3RyaW5nIGluZGljYXRpbmcgYSB1cmwgaHR0cCBwcm90b2NvbC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQU19QUk9UT0NPTCA9ICJodHRwcyI7Ci0JLyoqCi0JICogVGhlIDxjb2RlPmZpbGU8L2NvZGU+IHN0cmluZyBpbmRpY2F0aW5nIGEgdXJsIGZpbGUgcHJvdG9jb2wuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFSX1BST1RPQ09MID0gImphciI7Ci0KLQkKLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB1cmwgaXMgdG8gYSBmaWxlLCBpLmUgaXRzIHByb3RvY29sIGlzIDxjb2RlPmZpbGU8L2NvZGU+LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ZpbGVVcmwoVVJMIHVybCkgewotCQlyZXR1cm4gdXJsICE9IG51bGwgJiYgRklMRV9QUk9UT0NPTC5lcXVhbHModXJsLmdldFByb3RvY29sKCkpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB1cmwgaXMgdG8gYSBqYXIsIGkuZSBpdHMgcHJvdG9jb2wgaXMgPGNvZGU+amFyPC9jb2RlPi4KLQkgKiBGb3IgZXhhbXBsZSA8Y29kZT5qYXI6ZmlsZTovQzovdGVzdGFwcHMvZXhhbXBsZS9XRUItSU5GL2xpYi9zdHJ1dHMuamFyIS9NRVRBLUlORi90bGRzL3N0cnV0cy1iZWFuLnRsZDwvY29kZT4uCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzSmFyVXJsKFVSTCB1cmwpIHsKLQkJcmV0dXJuIHVybCAhPSBudWxsICYmIEpBUl9QUk9UT0NPTC5lcXVhbHModXJsLmdldFByb3RvY29sKCkpOwotCX0KLQkvKioKLQkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB1cmwgcHJvdG9jb2wgaXMgaHR0cC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNIdHRwVXJsKFVSTCB1cmwpIHsKLQkJU3RyaW5nIHByb3RvY29sID0gIHVybC5nZXRQcm90b2NvbCgpOwotCQlyZXR1cm4gdXJsICE9IG51bGwgJiYgKEhUVFBfUFJPVE9DT0wuZXF1YWxzKHByb3RvY29sKSB8fCBIVFRQU19QUk9UT0NPTC5lcXVhbHMocHJvdG9jb2wpKTsKLQl9Ci0JLyoqCi0JICogUmV0dXJucyB0aGUgPGNvZGU+RmlsZTwvY29kZT4gY29ycmVzcG9uZGluZyB0byBhIHVybCwgb3IgbnVsbCBpZiB0aGUgdXJsIAotCSAqIHByb3RvY29sIGlzIG5vdCBmaWxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgamF2YS5pby5GaWxlIGdldFVybEZpbGUoVVJMIHVybCkgewotCQlpZiAoaXNGaWxlVXJsKHVybCkgJiYgIWlzSmFyVXJsKCB1cmwgKSApewotCQkJRmlsZSByZXQgPSBuZXcgamF2YS5pby5GaWxlKHVybC5nZXRGaWxlKCkpOwotCQkJcmV0dXJuIHJldCA7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0gCX0KLQotCQotCS8qKgotCSAqIFJldHVybnMgdGhlIHVybCB0byBhIGphciBmaWxlIGdpdmVuIGEgdXJsIHRvIGEgZmlsZSBpbnNpZGUgCi0JICogdGhlIGphci4KLQkgKiBGb3IgZXhhbXBsZSBpZiBnaXZlbiAKLQkgKiA8Y29kZT5qYXI6ZmlsZTovQzovdGVzdGFwcHMvZXhhbXBsZS9XRUItSU5GL2xpYi9zdHJ1dHMuamFyIS9NRVRBLUlORi90bGRzL3N0cnV0cy1iZWFuLnRsZDwvY29kZT4KLQkgKiB0aGlzIG1ldGhvZCByZXR1cm5zIDxjb2RlPmZpbGU6L0M6L3Rlc3RhcHBzL2V4YW1wbGUvV0VCLUlORi9saWIvc3RydXRzLmphcjwvY29kZT4uCi0JICogCi0JICogPHA+UmV0dXJucyBudWxsIGlmIHRoZSBnaXZlbiB1cmwgaXMgbm90IHJlY29nbml6ZWQgYXMgYSB1cmwgdG8gYSBmaWxlIAotCSAqIGluc2lkZSBhIGphci4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRKYXJGaWxlVXJsKFVSTCB1cmwpIHsKLQkJaWYgKCFpc0phclVybCh1cmwpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlTdHJpbmcgZmlsZSA9IHVybC5nZXRGaWxlKCk7IC8vZmlsZTovQzovdGVzdGFwcHMvZXhhbXBsZS9XRUItSU5GL2xpYi9zdHJ1dHMuamFyIS9NRVRBLUlORi90bGRzL3N0cnV0cy1iZWFuLnRsZAotCQlpbnQgaW5kZXggPSBmaWxlLmluZGV4T2YoJyEnKTsKLQkJaWYgKGluZGV4IDwgMCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJU3RyaW5nIGphckZpbGVVcmxTdHIgPSBmaWxlLnN1YnN0cmluZygwLCBpbmRleCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gbmV3IFVSTChqYXJGaWxlVXJsU3RyKTsKLQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlbW90ZShTdHJpbmcgdXJsKXsKLQkJcmV0dXJuIHVybC5zdGFydHNXaXRoKCJodHRwOiIpfHx1cmwuc3RhcnRzV2l0aCgiaHR0cHM6Iil8fHVybC5zdGFydHNXaXRoKCJ3d3cuIik7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZW1wbGF0ZUZvbGRlcihTdHJpbmcgcGx1Z0lkICwgU3RyaW5nIHN0clBhdGggKXsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSggcGx1Z0lkICk7Ci0JCVBhdGggcGF0aCA9IG5ldyBQYXRoKCBzdHJQYXRoICk7Ci0JCVVSTCB1cmwgPSBGaWxlTG9jYXRvci5maW5kKGJ1bmRsZSwgcGF0aCwgbnVsbCk7Ci0JCXRyeSB7Ci0JCQlVUkwgdGVtcGxVcmw7Ci0JCQl0ZW1wbFVybCA9IEZpbGVMb2NhdG9yLnJlc29sdmUodXJsKTsKLQkJCUZpbGUgdGVtcGxEaXIgPSBVcmxVdGlsLmdldFVybEZpbGUodGVtcGxVcmwpOwotCQkJcmV0dXJuIHRlbXBsRGlyIDsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9jb2x1bW4udm0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9jb2x1bW4udm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMWYxM2MuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvY29sdW1uLnZtCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyNpbmNsdWRlZCB0ZW1wbGF0ZS4gR2VuZXJhdGVzIHRoZSBAQ29sdW1uIGFubm90YXRpb24uCi0jI0Fzc3VtZXMgdGhhdCB0aGUgY29udGV4dCBoYXMgYSAiY29sdW1uIiBhbmQgYSAidGFibGUiIG9iamVjdAotIyNnZW5lcmF0ZSBhbm5vdGF0aW9uIG9ubHkgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjb2x1bW4gTk9UIGRlZmF1bHQKLSMjYW5kIHRoZSBnZW5lcmF0ZURMTEFubm90YXRpb24gcHJvcGVydHkgaXMgbm90IHNldCBvbiB0aGUgdGFibGUKLSMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI21hY3JvKCBhcHBlbmQgJG1lbWJlcnMgJHBhcmFtZXRlcnMgKQotI2lmKCAkbWVtYmVycyA9PSAiIikKLSNzZXQoICRtZW1iZXJzID0gJHBhcmFtZXRlcnMgKQotI2Vsc2UKLSNzZXQoICRtZW1iZXJzID0gIiRtZW1iZXJzLCAkcGFyYW1ldGVycyIgKSAKLSNlbmQJCi0jZW5kCi0jIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZiAoICRjb2x1bW4uZGF0YVR5cGVMT0IpCi0gICAgQExvYigpCi0jZW5kCi0jaWYgKCAkY29sdW1uLm5lZWRNYXBUZW1wb3JhbFR5cGUpCi0gICAgQFRlbXBvcmFsKCBUZW1wb3JhbFR5cGUuJGNvbHVtbi50ZW1wb3JhbFR5cGUpCi0jZW5kCi0jc2V0ICgkbWVtYmVycyA9ICIiKQotI2lmICggISRjb2x1bW4uZGVmYXVsdCB8fCAkY3VzdG9taXplci5nZW5lcmF0ZURETEFubm90YXRpb25zICkKLSNpZiAoICEke2NvbHVtbi5kZWZhdWx0bmFtZX0gKQotI2FwcGVuZCgkbWVtYmVycyAibmFtZT0kY3VzdG9taXplci5xdW90ZSgkY29sdW1uLm5hbWUpIiApCi0jZW5kCi0jaWYgKCEkY29sdW1uLmluc2VydGFibGUpCi0jYXBwZW5kKCR7bWVtYmVyc30gImluc2VydGFibGU9ZmFsc2UiKQotI2VuZAotI2lmICghJGNvbHVtbi51cGRhdGVhYmxlKQotI2FwcGVuZCgke21lbWJlcnN9ICJ1cGRhdGFibGU9ZmFsc2UiKQotI2VuZAotI2VuZAotI2lmKCAkY3VzdG9taXplci5nZW5lcmF0ZURETEFubm90YXRpb25zICkKLSNpZiAoJGNvbHVtbi51bmlxdWUpCi0jYXBwZW5kKCRtZW1iZXJzICAidW5pcXVlPXRydWUiKQotI2VuZAotI2lmICghJGNvbHVtbi5udWxsYWJsZSkKLSNhcHBlbmQoJG1lbWJlcnMgICJudWxsYWJsZT1mYWxzZSIpCi0jZW5kCi0jaWYgKCRjb2x1bW4uc2l6ZSA+IDApCi0jaWYgKCRjb2x1bW4ubnVtZXJpYykKLSNhcHBlbmQoJG1lbWJlcnMgInByZWNpc2lvbj0kY29sdW1uLnNpemUiKQotI2lmICgkY29sdW1uLmRlY2ltYWxEaWdpdHMgIT0gMCAmJiAkY29sdW1uLmRlY2ltYWxEaWdpdHMgIT0gLTEpCi0jYXBwZW5kKCRtZW1iZXJzICJzY2FsZT0kY29sdW1uLmRlY2ltYWxEaWdpdHMiKQotI2VuZAotI2Vsc2UKLSNpZiAoICEkY29sdW1uLmRhdGFUeXBlTE9CKQotI2FwcGVuZCgkbWVtYmVycyAibGVuZ3RoPSRjb2x1bW4uc2l6ZSIpCi0jZW5kCi0jZW5kCi0jZW5kCi0jZW5kCi0jaWYoICRtZW1iZXJzICE9IiIgKQotCUBDb2x1bW4oJG1lbWJlcnMpCi0jZW5kCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9qb2luLnZtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvam9pbi52bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxODkyMi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9qb2luLnZtCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotIyNpbmNsdWRlZCB0ZW1wbGF0ZS4gR2VuZXJhdGVzIHRoZSBASm9pblRhYmxlLCBASm9pbkNvbHVtbiBvciBASm9pbkNvbHVtbnMgYW5ub3RhdGlvbi4KLSMjQXNzdW1lcyB0aGF0IHRoZSBjb250ZXh0IGhhcyBhICJyb2xlIiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBnZW5lcmF0ZWQgQXNzb2NpYXRpb25Sb2xlCi0jIwotIyNtYWNybyBqb2luQ29sdW1uIHVzZXMgJGNvbHVtbiwgJHJlZmVyZW5jZWRDb2x1bW4KLSNtYWNybyAoam9pbkNvbHVtbiAkY29sdW1uICRyZWZlcmVuY2VkQ29sdW1uKQotI3NldCAoJG1lbWJlcnMgPSAibmFtZT0kY3VzdG9taXplci5xdW90ZSgkY29sdW1uLmpvaW5Db2x1bW5OYW1lKSIpCi0jaWYoICEkcmVmZXJlbmNlZENvbHVtbi5wcmltYXJ5S2V5IHx8ICRyZWZlcmVuY2VkQ29sdW1uLnBhcnRPZkNvbXBvc2l0ZVByaW1hcnlLZXkgKQotI3NldCAoJG1lbWJlcnMgPSAiJG1lbWJlcnMsIHJlZmVyZW5jZWRDb2x1bW5OYW1lPSRjdXN0b21pemVyLnF1b3RlKCRyZWZlcmVuY2VkQ29sdW1uLm5hbWUpIikKLSNlbmQKLSNpZiggJGN1c3RvbWl6ZXIuZ2VuZXJhdGVERExBbm5vdGF0aW9ucyApCi0jaWYgKCRjb2x1bW4udW5pcXVlICYmICEkY29sdW1uLnByaW1hcnlLZXkpCi0jc2V0ICgkbWVtYmVycyA9ICIkbWVtYmVycywgdW5pcXVlPXRydWUiKQotI2VuZAotI2lmICghJGNvbHVtbi5udWxsYWJsZSkKLSNzZXQgKCRtZW1iZXJzID0gIiRtZW1iZXJzLCBudWxsYWJsZT1mYWxzZSIpCi0jZW5kCi0jZW5kCi0jaWYgKCRjdXN0b21pemVyLmdlbmVyYXRlRERMQW5ub3RhdGlvbnMgJiYgISRyb2xlLmFzc29jaWF0aW9uLmpvaW5UYWJsZSAmJiAhJHJvbGUucmVmZXJyZXJUYWJsZS5pc0NvbHVtblVwZGF0ZUluc2VydCgkcm9sZSwgJGNvbHVtbikpCi0jc2V0ICgkbWVtYmVycyA9ICIkbWVtYmVycywgaW5zZXJ0YWJsZT1mYWxzZSwgdXBkYXRhYmxlPWZhbHNlIikKLSNlbmQKLUBKb2luQ29sdW1uKCRtZW1iZXJzKSNlbmQKLSMjCi0jIwotIyMKLSNpZiAoJHJvbGUuYXNzb2NpYXRpb24uam9pblRhYmxlKQotI3NldCAoJGpvaW5UYWJsZSA9ICRyb2xlLmFzc29jaWF0aW9uLmpvaW5UYWJsZSkKLQlASm9pblRhYmxlKAotCQluYW1lPSIke2pvaW5UYWJsZS5qb2luVGFibGVBbm5vdGF0aW9uTmFtZX0iCi0JCSwgam9pbkNvbHVtbnM9ewotI2ZvcmVhY2ggKCRjb2x1bW4gaW4gJHJvbGUucmVmZXJyZXJDb2x1bW5zKQotI3NldCAoJHJlZmVyZW5jZWRDb2x1bW4gPSAkcm9sZS5nZXRSZWZlcmVuY2VkQ29sdW1uKCR7Y29sdW1uLm5hbWV9KSkKLSMjJHJlZmVyZW5jZWRDb2x1bW4gaXMgdGhlIGNvbHVtbiBpbiB0aGUgam9pbiB0YWJsZQotCQkJI2pvaW5Db2x1bW4oJHJlZmVyZW5jZWRDb2x1bW4gJGNvbHVtbikKLSNpZiAoJHZlbG9jaXR5Q291bnQgPCAkcm9sZS5yZWZlcnJlckNvbHVtbnMuc2l6ZSgpICkKLSwKLSNlbmQJCQkKLSNlbmQKLQotCQkJfQotCQksIGludmVyc2VKb2luQ29sdW1ucz17Ci0jZm9yZWFjaCAoJGNvbHVtbiBpbiAkcm9sZS5yZWZlcmVuY2VkQ29sdW1ucykKLSNzZXQgKCRyZWZlcmVuY2VkQ29sdW1uID0gJHJvbGUuZ2V0UmVmZXJyZXJDb2x1bW4oJHtjb2x1bW4ubmFtZX0pKQotIyMkcmVmZXJlbmNlZENvbHVtbiBpcyB0aGUgY29sdW1uIGluIHRoZSBqb2luIHRhYmxlCi0JCQkjam9pbkNvbHVtbigkcmVmZXJlbmNlZENvbHVtbiAkY29sdW1uKQotI2lmICgkdmVsb2NpdHlDb3VudCA8ICRyb2xlLnJlZmVyZW5jZWRDb2x1bW5zLnNpemUoKSApCi0sCi0jZW5kCQkJCi0jZW5kCi0KLQkJCX0KLQkJKQotI2Vsc2UKLSNpZiAoJHJvbGUucmVmZXJyZXJDb2x1bW5zLnNpemUoKSA9PSAxKQotI3NldCAoJGNvbHVtbiA9ICRyb2xlLnJlZmVycmVyQ29sdW1ucy5nZXQoMCkpCi0jc2V0ICgkcmVmZXJlbmNlZENvbHVtbiA9ICRyb2xlLmdldFJlZmVyZW5jZWRDb2x1bW4oJHtjb2x1bW4ubmFtZX0pKQotI3NldCAoJHJlZmVyZW5jZWRUYWJsZU5hbWUgPSAkcm9sZS5nZXRSZWZlcmVuY2VkVGFibGUoKS5nZXROYW1lKCkgKQotI3NldCggJHJlZmVyZW5jZWRUYWJsZVBrTmFtZSA9ICRyb2xlLmdldFJlZmVyZW5jZWRUYWJsZSgpLmdldFByaW1hcnlLZXlDb2x1bW4oKS5uYW1lICkKLSNzZXQoICRjb21wdXRlZEpvaW5Db2x1bW5OYW1lID0gIiR7cm9sZS5wcm9wZXJ0eU5hbWV9XyR7cmVmZXJlbmNlZFRhYmxlUGtOYW1lfSIgKQotI2lmKCRjb2x1bW4ubmFtZS50b1VwcGVyQ2FzZSgpICE9ICRjb21wdXRlZEpvaW5Db2x1bW5OYW1lLnRvVXBwZXJDYXNlKCkgKQotCSNqb2luQ29sdW1uKCRjb2x1bW4gJHJlZmVyZW5jZWRDb2x1bW4pCi0KLSNlbHNlaWYoICRjdXN0b21pemVyLmdlbmVyYXRlRERMQW5ub3RhdGlvbnMgKQotCSNqb2luQ29sdW1uKCRjb2x1bW4gJHJlZmVyZW5jZWRDb2x1bW4pCi0KLSNlbmQKLSNlbHNlCi0JQEpvaW5Db2x1bW5zKHsKLSNmb3JlYWNoICgkY29sdW1uIGluICRyb2xlLnJlZmVycmVyQ29sdW1ucykKLSNzZXQgKCRyZWZlcmVuY2VkQ29sdW1uID0gJHJvbGUuZ2V0UmVmZXJlbmNlZENvbHVtbigke2NvbHVtbi5uYW1lfSkpCi0JCSNqb2luQ29sdW1uKCRjb2x1bW4gJHJlZmVyZW5jZWRDb2x1bW4pLAotI2VuZAkJCi0JCX0pCi0jZW5kCi0jZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvbWFpbi5qYXZhLnZtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvbWFpbi5qYXZhLnZtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjUwYTc2Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL21haW4uamF2YS52bQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0jaWYgKCR0YWJsZS5wYWNrYWdlICE9ICIiKQotcGFja2FnZSAke3RhYmxlLnBhY2thZ2V9OwotI2VuZAotCi1pbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLSR7dGFibGUuaW1wb3J0U3RhdGVtZW50c30KLQotLyoqCi0gKiBUaGUgcGVyc2lzdGVudCBjbGFzcyBmb3IgdGhlICR7dGFibGUubmFtZX0gZGF0YWJhc2UgdGFibGUuCi0gKiAKLSAqLwotQEVudGl0eQotI2lmKCAhJHt0YWJsZS5kZWZhdWx0bmFtZX0gfHwgJGN1c3RvbWl6ZXIuZ2VuZXJhdGVERExBbm5vdGF0aW9ucykKLUBUYWJsZShuYW1lPSIke3RhYmxlLm5hbWV9IikKLSNlbmQKLXB1YmxpYyBjbGFzcyAke3RhYmxlLmNsYXNzTmFtZX0gJHt0YWJsZS5nZW5lcmF0ZUV4dGVuZHNJbXBsZW1lbnRzKCl9IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSMjIyMjCi0jIyMjIyBmaWVsZHMKLSMjIyMjCi0jaWYgKCR0YWJsZS5jb21wb3NpdGVLZXkpCi0jaWYgKCR0YWJsZS5hY2Nlc3MgPT0gImZpZWxkIikKLQotCUBFbWJlZGRlZElkCi0jZW5kCi0JcHJpdmF0ZSAke3RhYmxlLmNvbXBvc2l0ZUtleUNsYXNzTmFtZX0gJHt0YWJsZS5jb21wb3NpdGVLZXlQcm9wZXJ0eU5hbWV9OwotI2VuZAotI2ZvcmVhY2ggKCRjb2x1bW4gaW4gJHRhYmxlLmdldFNpbXBsZUNvbHVtbnModHJ1ZSwgdHJ1ZSwgZmFsc2UpKQotI2lmICgkdGFibGUuYWNjZXNzID09ICJmaWVsZCIpCi0KLSNwYXJzZSgibWFwcGluZ0tpbmQudm0iKQotI3BhcnNlKCJjb2x1bW4udm0iKQotI2VuZAotCSR7Y29sdW1uLmZpZWxkU2NvcGV9ICR7Y29sdW1uLnNpbXBsZVByb3BlcnR5VHlwZX0gJHtjb2x1bW4ucHJvcGVydHlOYW1lfTsKLSNlbmQKLSNmb3JlYWNoICgkcm9sZSBpbiAkdGFibGUuYXNzb2NpYXRpb25Sb2xlcykKLSMjIyMjCi0jIyMjIyBmaWVsZCBhbm5vdGF0aW9ucwotIyMjIyMKLSNpZiAoJHRhYmxlLmFjY2VzcyA9PSAiZmllbGQiKQotCi0JLy8ke3JvbGUuZGVzY3JpcHRpb259Ci0jaWYgKCRyb2xlLmNhcmRpbmFsaXR5ID09ICJtYW55LXRvLW9uZSIpCi0jcGFyc2UoIm1hbnlUb09uZS52bSIpCi0jZWxzZWlmICgkcm9sZS5jYXJkaW5hbGl0eSA9PSAibWFueS10by1tYW55IikKLSNwYXJzZSgibWFueVRvTWFueS52bSIpCi0jZWxzZWlmICgkcm9sZS5jYXJkaW5hbGl0eSA9PSAib25lLXRvLW1hbnkiKQotI3BhcnNlKCJvbmVUb01hbnkudm0iKQotI2Vsc2VpZiAoJHJvbGUuY2FyZGluYWxpdHkgPT0gIm9uZS10by1vbmUiKQotI3BhcnNlKCJvbmVUb09uZS52bSIpCi0jZW5kCi0jZW5kCi0jIyMjIwotIyMjIyMgZmllbGQgZGVjbGFyYXRpb24KLSMjIyMjCi0jaWYgKCRyb2xlLmNhcmRpbmFsaXR5ID09ICJtYW55LXRvLW9uZSIgfHwgJHJvbGUuY2FyZGluYWxpdHkgPT0gIm9uZS10by1vbmUiKQotI3NldCAoJHByb3BlcnR5VHlwZSA9ICR7cm9sZS5yZWZlcmVuY2VkVGFibGUuY2xhc3NOYW1lfSkKLSNlbHNlaWYgKCRyb2xlLmNhcmRpbmFsaXR5ID09ICJtYW55LXRvLW1hbnkiIHx8ICRyb2xlLmNhcmRpbmFsaXR5ID09ICJvbmUtdG8tbWFueSIpCi0jc2V0ICgkcHJvcGVydHlUeXBlID0gIiR7cm9sZS5yZWZlcmVuY2VkVGFibGUuc2ltcGxlQ29sbGVjdGlvblR5cGV9PCR7cm9sZS5yZWZlcmVuY2VkVGFibGUuY2xhc3NOYW1lfT4iKQotI2VuZAotCXByaXZhdGUgJHByb3BlcnR5VHlwZSAkcm9sZS5wcm9wZXJ0eU5hbWU7Ci0jZW5kCi0KLSAgICBwdWJsaWMgJHt0YWJsZS5jbGFzc05hbWV9KCkgewotICAgIH0KLQotIyMjIyMKLSMjIyMjIHNpbXBsZSBwcm9wZXJ0aWVzIGdldHRlcnMgYW5kIHNldHRlcnMKLSMjIyMjCi0jaWYgKCR0YWJsZS5jb21wb3NpdGVLZXkpCi0jaWYgKCR0YWJsZS5hY2Nlc3MgPT0gInByb3BlcnR5IikKLQotCUBFbWJlZGRlZElkCi0jZW5kCi0JcHVibGljICR0YWJsZS5jb21wb3NpdGVLZXlDbGFzc05hbWUgJGN1c3RvbWl6ZXIucHJvcGVydHlHZXR0ZXIoJHRhYmxlLmNvbXBvc2l0ZUtleVByb3BlcnR5TmFtZSkoKSB7Ci0JCXJldHVybiB0aGlzLiR7dGFibGUuY29tcG9zaXRlS2V5UHJvcGVydHlOYW1lfTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCAkY3VzdG9taXplci5wcm9wZXJ0eVNldHRlcigkdGFibGUuY29tcG9zaXRlS2V5UHJvcGVydHlOYW1lKSgkdGFibGUuY29tcG9zaXRlS2V5Q2xhc3NOYW1lICR0YWJsZS5jb21wb3NpdGVLZXlQcm9wZXJ0eU5hbWUpIHsKLQkJdGhpcy4ke3RhYmxlLmNvbXBvc2l0ZUtleVByb3BlcnR5TmFtZX0gPSAke3RhYmxlLmNvbXBvc2l0ZUtleVByb3BlcnR5TmFtZX07Ci0JfQotCQotI2VuZAotI2ZvcmVhY2ggKCRjb2x1bW4gaW4gJHRhYmxlLmdldFNpbXBsZUNvbHVtbnModHJ1ZSwgdHJ1ZSwgZmFsc2UpKQotI2lmICgkdGFibGUuYWNjZXNzID09ICJwcm9wZXJ0eSIpCi0KLSNwYXJzZSgibWFwcGluZ0tpbmQudm0iKQotI3BhcnNlKCJjb2x1bW4udm0iKQotI2VuZAotCSRjb2x1bW4ucHJvcGVydHlHZXRTY29wZSAkY29sdW1uLnNpbXBsZVByb3BlcnR5VHlwZSAkY3VzdG9taXplci5wcm9wZXJ0eUdldHRlcigkY29sdW1uLnByb3BlcnR5TmFtZSkoKSB7Ci0JCXJldHVybiB0aGlzLiR7Y29sdW1uLnByb3BlcnR5TmFtZX07Ci0JfQotCi0JJGNvbHVtbi5wcm9wZXJ0eVNldFNjb3BlIHZvaWQgJGN1c3RvbWl6ZXIucHJvcGVydHlTZXR0ZXIoJGNvbHVtbi5wcm9wZXJ0eU5hbWUpKCRjb2x1bW4uc2ltcGxlUHJvcGVydHlUeXBlICRjb2x1bW4ucHJvcGVydHlOYW1lKSB7Ci0JCXRoaXMuJHtjb2x1bW4ucHJvcGVydHlOYW1lfSA9ICR7Y29sdW1uLnByb3BlcnR5TmFtZX07Ci0JfQotCi0jZW5kCi0jIyMjIwotIyMjIyMgYXNzb2NpYXRpb25zIGdldHRlcnMgYW5kIHNldHRlcnMKLSMjIyMjCi0jZm9yZWFjaCAoJHJvbGUgaW4gJHRhYmxlLmFzc29jaWF0aW9uUm9sZXMpCi0jaWYgKCR0YWJsZS5hY2Nlc3MgPT0gInByb3BlcnR5IikKLQotCS8vJHtyb2xlLmRlc2NyaXB0aW9ufQotI2lmICgkcm9sZS5jYXJkaW5hbGl0eSA9PSAibWFueS10by1vbmUiKQotI3BhcnNlKCJtYW55VG9PbmUudm0iKQotI2Vsc2VpZiAoJHJvbGUuY2FyZGluYWxpdHkgPT0gIm1hbnktdG8tbWFueSIpCi0jcGFyc2UoIm1hbnlUb01hbnkudm0iKQotI2Vsc2VpZiAoJHJvbGUuY2FyZGluYWxpdHkgPT0gIm9uZS10by1tYW55IikKLSNwYXJzZSgib25lVG9NYW55LnZtIikKLSNlbHNlaWYgKCRyb2xlLmNhcmRpbmFsaXR5ID09ICJvbmUtdG8tb25lIikKLSNwYXJzZSgib25lVG9PbmUudm0iKQotI2VuZAotI2VuZAotIyMKLSNpZiAoJHJvbGUuY2FyZGluYWxpdHkgPT0gIm1hbnktdG8tb25lIiB8fCAkcm9sZS5jYXJkaW5hbGl0eSA9PSAib25lLXRvLW9uZSIpCi0jc2V0ICgkcHJvcGVydHlUeXBlID0gJHJvbGUucmVmZXJlbmNlZFRhYmxlLmNsYXNzTmFtZSkKLSNlbHNlaWYgKCRyb2xlLmNhcmRpbmFsaXR5ID09ICJtYW55LXRvLW1hbnkiIHx8ICRyb2xlLmNhcmRpbmFsaXR5ID09ICJvbmUtdG8tbWFueSIpCi0jc2V0ICgkcHJvcGVydHlUeXBlID0gIiR7cm9sZS5yZWZlcmVuY2VkVGFibGUuc2ltcGxlQ29sbGVjdGlvblR5cGV9PCR7cm9sZS5yZWZlcmVuY2VkVGFibGUuY2xhc3NOYW1lfT4iKQotI2VuZAotCXB1YmxpYyAkcHJvcGVydHlUeXBlICRjdXN0b21pemVyLnByb3BlcnR5R2V0dGVyKCRyb2xlLnByb3BlcnR5TmFtZSkoKSB7Ci0JCXJldHVybiB0aGlzLiR7cm9sZS5wcm9wZXJ0eU5hbWV9OwotCX0KLQotCXB1YmxpYyB2b2lkICR7Y3VzdG9taXplci5wcm9wZXJ0eVNldHRlcigkcm9sZS5wcm9wZXJ0eU5hbWUpfSgkcHJvcGVydHlUeXBlICRyb2xlLnByb3BlcnR5TmFtZSkgewotCQl0aGlzLiR7cm9sZS5wcm9wZXJ0eU5hbWV9ID0gJHJvbGUucHJvcGVydHlOYW1lOwotCX0KLQkKLSMjCi0jZW5kCi0jIwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL21hbnlUb01hbnkudm0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9tYW55VG9NYW55LnZtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDgyYWEzLi4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL21hbnlUb01hbnkudm0KKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jI2luY2x1ZGVkIHRlbXBsYXRlLiBHZW5lcmF0ZXMgdGhlIEBNYW55VG9NYW55IGFubm90YXRpb24uCi0jI0Fzc3VtZXMgdGhhdCB0aGUgY29udGV4dCBoYXMgYSAicm9sZSIgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2VuZXJhdGVkIEFzc29jaWF0aW9uUm9sZQotIyMKLSNpZiAoJHJvbGUuYXNzb2NpYXRpb24uYmlkaXJlY3Rpb25hbCAmJiAhJHJvbGUuaXNSZWZlcnJlclJvbGUoKSkjI3RoZSBvd25pbmcgc2lkZSAoZWl0aGVyIHNpZGUgZm9yIG1hbnktdG8tbWFueSkKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigiIiwgIm1hcHBlZEJ5IiwgJHJvbGUub3Bwb3NpdGVSb2xlLnByb3BlcnR5TmFtZSwgdHJ1ZSkpCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJjYXNjYWRlIiwgJGN1c3RvbWl6ZXIuZ2VuQ2FzY2FkZXMoJHJvbGUpLCBmYWxzZSkpCi0jaWYoJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkhPSIiICYmICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpIT0iRmV0Y2hUeXBlLkxBWlkiKQotI3NldCAoJG1lbWJlcnMgPSAkY3VzdG9taXplci5hcHBlbmRBbm5vdGF0aW9uKCRtZW1iZXJzLCAiZmV0Y2giLCAkY3VzdG9taXplci5nZW5GZXRjaCgkcm9sZS5yZWZlcnJlclRhYmxlKSwgZmFsc2UpKQotI2VuZAotI2lmKCRtZW1iZXJzIT0iIikKLQlATWFueVRvTWFueSgkbWVtYmVycykKLSNlbHNlCQotICAgIEBNYW55VG9NYW55Ci0jZW5kICAgIAotI2Vsc2UKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigiIiwgImNhc2NhZGUiLCAkY3VzdG9taXplci5nZW5DYXNjYWRlcygkcm9sZSksIGZhbHNlKSkKLSNpZigkY3VzdG9taXplci5nZW5GZXRjaCgkcm9sZS5yZWZlcnJlclRhYmxlKSE9IiIgJiYgJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkhPSJGZXRjaFR5cGUuTEFaWSIpCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJmZXRjaCIsICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpLCBmYWxzZSkpCi0jZW5kCi0jaWYoJG1lbWJlcnMhPSIiKQotCUBNYW55VG9NYW55KCRtZW1iZXJzKQotI2Vsc2UJCi0gICAgQE1hbnlUb01hbnkKLSNlbmQgICAgCi0jcGFyc2UoImpvaW4udm0iKQotI2VuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL21hbnlUb09uZS52bSBiL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL21hbnlUb09uZS52bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyNzliYi4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9tYW55VG9PbmUudm0KKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jI2luY2x1ZGVkIHRlbXBsYXRlLiBHZW5lcmF0ZXMgdGhlIEBNYW55VG9PbmUgYW5ub3RhdGlvbi4KLSMjQXNzdW1lcyB0aGF0IHRoZSBjb250ZXh0IGhhcyBhICJyb2xlIiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBnZW5lcmF0ZWQgQXNzb2NpYXRpb25Sb2xlCi0jIwotI3NldCAoJG1lbWJlcnMgPSAkY3VzdG9taXplci5hcHBlbmRBbm5vdGF0aW9uKCIiLCAiY2FzY2FkZSIsICRjdXN0b21pemVyLmdlbkNhc2NhZGVzKCRyb2xlKSwgZmFsc2UpKQotI2lmKCAkY3VzdG9taXplci5nZW5GZXRjaCgkcm9sZS5yZWZlcnJlclRhYmxlKSE9ICIiICYmICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpIT0gIkZldGNoVHlwZS5FQUdFUiIpCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJmZXRjaCIsICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpLCBmYWxzZSkpCi0jZW5kCi0jaWYoJG1lbWJlcnMhPSIiKQotCUBNYW55VG9PbmUoJG1lbWJlcnMpCi0jZWxzZQotICAgIEBNYW55VG9PbmUKLSNlbmQKLSNwYXJzZSgiam9pbi52bSIpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvbWFwcGluZ0tpbmQudm0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9tYXBwaW5nS2luZC52bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhZDA1Ny4uMDAwMDAwMAotLS0gYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9tYXBwaW5nS2luZC52bQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMjaW5jbHVkZWQgdGVtcGxhdGUuIEdlbmVyYXRlcyB0aGUgQEJhc2ljLCBASWQsIEBWZXJzaW9uIGFubm90YXRpb25zLgotIyNBc3N1bWVzIHRoYXQgdGhlIGNvbnRleHQgaGFzIGEgImNvbHVtbiIgb2JqZWN0Ci0jIwotI3NldCAoJG1hcHBpbmdLaW5kID0gJGNvbHVtbi5tYXBwaW5nS2luZCkKLSNpZiAoJG1hcHBpbmdLaW5kID09ICJpZCIpCi0JQElkCi0jc2V0ICgkaWRHZW5lcmF0b3IgPSAkdGFibGUuaWRHZW5lcmF0b3IpCi0jaWYgKCRpZEdlbmVyYXRvciA9PSAiYXV0byIpCi0jc2V0ICgkZ2VuZXJhdGlvblR5cGUgPSAiR2VuZXJhdGlvblR5cGUuQVVUTyIpCi0jZWxzZWlmICgkaWRHZW5lcmF0b3IgPT0gImlkZW50aXR5IikKLSNzZXQgKCRnZW5lcmF0aW9uVHlwZSA9ICJHZW5lcmF0aW9uVHlwZS5JREVOVElUWSIpCi0jZWxzZWlmICgkaWRHZW5lcmF0b3IgPT0gInNlcXVlbmNlIikKLSNzZXQgKCRnZW5lcmF0aW9uVHlwZSA9ICJHZW5lcmF0aW9uVHlwZS5TRVFVRU5DRSIpCi0jZWxzZWlmICgkaWRHZW5lcmF0b3IgPT0gInRhYmxlIikKLSNzZXQgKCRnZW5lcmF0aW9uVHlwZSA9ICJHZW5lcmF0aW9uVHlwZS5UQUJMRSIpCi0jZWxzZQotI3NldCAoJGdlbmVyYXRpb25UeXBlID0gIiIpCi0jZW5kCi0jaWYgKCRpZEdlbmVyYXRvciA9PSAic2VxdWVuY2UiICkKLSNzZXQgKCRnZW5lcmF0b3JOYW1lID0gIiR7dGFibGUubmFtZS50b1VwcGVyQ2FzZSgpfV8ke2NvbHVtbi5wcm9wZXJ0eU5hbWUudG9VcHBlckNhc2UoKX1fR0VORVJBVE9SIikKLSNpZiggJHRhYmxlLmZvcm1hdHRlZFNlcXVlbmNlICE9ICIiICkKLQlAU2VxdWVuY2VHZW5lcmF0b3IobmFtZT0iJGdlbmVyYXRvck5hbWUiLCBzZXF1ZW5jZU5hbWU9IiR0YWJsZS5mb3JtYXR0ZWRTZXF1ZW5jZSIpCi0jZWxzZQotCUBTZXF1ZW5jZUdlbmVyYXRvcihuYW1lPSIkZ2VuZXJhdG9yTmFtZSIgKQotI2VuZAkKLQlAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3k9JGdlbmVyYXRpb25UeXBlLCBnZW5lcmF0b3I9IiRnZW5lcmF0b3JOYW1lIikKLSNlbHNlaWYgKCRnZW5lcmF0aW9uVHlwZSAhPSAiIikKLQlAR2VuZXJhdGVkVmFsdWUoc3RyYXRlZ3k9JGdlbmVyYXRpb25UeXBlKQotI2VuZCAgICAgIAotI2Vsc2VpZiAoJG1hcHBpbmdLaW5kID09ICJ2ZXJzaW9uIikKLQlAVmVyc2lvbgotI2Vsc2UKLSMjREVGQVVMVCBpcyBAQmFzaWMsIG5vIG5lZWQgdG8gZ2VuZXJhdGUKLSNlbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9vbmVUb01hbnkudm0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9vbmVUb01hbnkudm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZjE1Y2IuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvb25lVG9NYW55LnZtCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyNpbmNsdWRlZCB0ZW1wbGF0ZS4gR2VuZXJhdGVzIHRoZSBAT25lVG9NYW55IGFubm90YXRpb24uCi0jI0Fzc3VtZXMgdGhhdCB0aGUgY29udGV4dCBoYXMgYSAicm9sZSIgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2VuZXJhdGVkIEFzc29jaWF0aW9uUm9sZQotIyMKLSNpZiAoJHJvbGUuYXNzb2NpYXRpb24uYmlkaXJlY3Rpb25hbCkKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigiIiwgIm1hcHBlZEJ5IiwgJHJvbGUub3Bwb3NpdGVSb2xlLnByb3BlcnR5TmFtZSwgdHJ1ZSkpCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJjYXNjYWRlIiwgJGN1c3RvbWl6ZXIuZ2VuQ2FzY2FkZXMoJHJvbGUpLCBmYWxzZSkpCi0jaWYoJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkhPSIiICYmICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpICE9IkZldGNoVHlwZS5MQVpZIikKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigkbWVtYmVycywgImZldGNoIiwgJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSksIGZhbHNlKSkKLSNlbmQKLQlAT25lVG9NYW55KCRtZW1iZXJzKQotI2Vsc2UKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigiIiwgImNhc2NhZGUiLCAkY3VzdG9taXplci5nZW5DYXNjYWRlcygkcm9sZSksIGZhbHNlKSkKLSNpZigkY3VzdG9taXplci5nZW5GZXRjaCgkcm9sZS5yZWZlcnJlclRhYmxlKSE9IiIgJiYgJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkgIT0iRmV0Y2hUeXBlLkxBWlkiKQotI3NldCAoJG1lbWJlcnMgPSAkY3VzdG9taXplci5hcHBlbmRBbm5vdGF0aW9uKCRtZW1iZXJzLCAiZmV0Y2giLCAkY3VzdG9taXplci5nZW5GZXRjaCgkcm9sZS5yZWZlcnJlclRhYmxlKSwgZmFsc2UpKQotI2VuZAotCUBPbmVUb01hbnkoJG1lbWJlcnMpCi0jcGFyc2UoImpvaW4udm0iKQotI2VuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL29uZVRvT25lLnZtIGIvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvb25lVG9PbmUudm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZDc1MTkuLjAwMDAwMDAKLS0tIGEvanBhL3BsdWdpbnMvb3JnLmVjbGlwc2UuanB0Lmdlbi90ZW1wbGF0ZXMvZW50aXRpZXMvb25lVG9PbmUudm0KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jI2luY2x1ZGVkIHRlbXBsYXRlLiBHZW5lcmF0ZXMgdGhlIEBPbmVUb09uZSBhbm5vdGF0aW9uLgotIyNBc3N1bWVzIHRoYXQgdGhlIGNvbnRleHQgaGFzIGEgInJvbGUiIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdlbmVyYXRlZCBBc3NvY2lhdGlvblJvbGUKLSMjCi0jaWYgKCRyb2xlLmFzc29jaWF0aW9uLmJpZGlyZWN0aW9uYWwgJiYgISRyb2xlLmlzUmVmZXJyZXJSb2xlKCkpIyN0aGUgb3duaW5nIHNpZGUgKGVpdGhlciBzaWRlIGZvciBvbmUtdG8tb25lKQotI3NldCAoJG1lbWJlcnMgPSAkY3VzdG9taXplci5hcHBlbmRBbm5vdGF0aW9uKCIiLCAibWFwcGVkQnkiLCAkcm9sZS5vcHBvc2l0ZVJvbGUucHJvcGVydHlOYW1lLCB0cnVlKSkKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigkbWVtYmVycywgImNhc2NhZGUiLCAkY3VzdG9taXplci5nZW5DYXNjYWRlcygkcm9sZSksIGZhbHNlKSkKLSNpZiggJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkhPSIiICYmICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpIT0iRmV0Y2hUeXBlLkVBR0VSIiApCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJmZXRjaCIsICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpLCBmYWxzZSkpCi0jZW5kCi0JQE9uZVRvT25lKCRtZW1iZXJzKQotI2Vsc2UKLSNzZXQgKCRtZW1iZXJzID0gJGN1c3RvbWl6ZXIuYXBwZW5kQW5ub3RhdGlvbigiIiwgImNhc2NhZGUiLCAkY3VzdG9taXplci5nZW5DYXNjYWRlcygkcm9sZSksIGZhbHNlKSkKLSNpZiggJGN1c3RvbWl6ZXIuZ2VuRmV0Y2goJHJvbGUucmVmZXJyZXJUYWJsZSkhPSIiICYmICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpIT0iRmV0Y2hUeXBlLkVBR0VSIiApCi0jc2V0ICgkbWVtYmVycyA9ICRjdXN0b21pemVyLmFwcGVuZEFubm90YXRpb24oJG1lbWJlcnMsICJmZXRjaCIsICRjdXN0b21pemVyLmdlbkZldGNoKCRyb2xlLnJlZmVycmVyVGFibGUpLCBmYWxzZSkpCi0jZW5kCi0jaWYoJG1lbWJlcnMhPSIiKQotCUBPbmVUb09uZSgkbWVtYmVycykKLSNlbHNlCi0JQE9uZVRvT25lCi0jZW5kCi0jcGFyc2UoImpvaW4udm0iKQotI2VuZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL3BrLmphdmEudm0gYi9qcGEvcGx1Z2lucy9vcmcuZWNsaXBzZS5qcHQuZ2VuL3RlbXBsYXRlcy9lbnRpdGllcy9way5qYXZhLnZtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODMxMDk4Li4wMDAwMDAwCi0tLSBhL2pwYS9wbHVnaW5zL29yZy5lY2xpcHNlLmpwdC5nZW4vdGVtcGxhdGVzL2VudGl0aWVzL3BrLmphdmEudm0KKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jaWYgKCR0YWJsZS5wYWNrYWdlICE9ICIiKQotcGFja2FnZSAke3RhYmxlLnBhY2thZ2V9OwotI2VuZAotCi1pbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YXgucGVyc2lzdGVuY2UuKjsKLQotLyoqCi0gKiBUaGUgcHJpbWFyeSBrZXkgY2xhc3MgZm9yIHRoZSAke3RhYmxlLm5hbWV9IGRhdGFiYXNlIHRhYmxlLgotICogCi0gKi8KLUBFbWJlZGRhYmxlCi1wdWJsaWMgY2xhc3MgJHt0YWJsZS5jb21wb3NpdGVLZXlDbGFzc05hbWV9IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKLQkvL2RlZmF1bHQgc2VyaWFsIHZlcnNpb24gaWQsIHJlcXVpcmVkIGZvciBzZXJpYWxpemFibGUgY2xhc3Nlcy4KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSMjIyMjCi0jIyMjIyBmaWVsZHMKLSMjIyMjCi0jZm9yZWFjaCAoJGNvbHVtbiBpbiAkdGFibGUucHJpbWFyeUtleUNvbHVtbnMpCi0jaWYgKCR0YWJsZS5hY2Nlc3MgPT0gImZpZWxkIikKLQotI3BhcnNlKCJjb2x1bW4udm0iKQotI2VuZAotCSR7Y29sdW1uLmZpZWxkU2NvcGV9ICR7Y29sdW1uLnByb3BlcnR5VHlwZX0gJHtjb2x1bW4ucHJvcGVydHlOYW1lfTsKLSNlbmQKLQotICAgIHB1YmxpYyAke3RhYmxlLmNvbXBvc2l0ZUtleUNsYXNzTmFtZX0oKSB7Ci0gICAgfQotIyMjIyMKLSMjIyMjIHNpbXBsZSBwcm9wZXJ0aWVzIGdldHRlcnMgYW5kIHNldHRlcnMKLSMjIyMjCi0jZm9yZWFjaCAoJGNvbHVtbiBpbiAkdGFibGUucHJpbWFyeUtleUNvbHVtbnMpCi0jaWYgKCR0YWJsZS5hY2Nlc3MgPT0gInByb3BlcnR5IikKLQotI3BhcnNlKCJjb2x1bW4udm0iKQotI2VuZAotCSRjb2x1bW4ucHJvcGVydHlHZXRTY29wZSAkY29sdW1uLnByb3BlcnR5VHlwZSAkY3VzdG9taXplci5wcm9wZXJ0eUdldHRlcigkY29sdW1uLnByb3BlcnR5TmFtZSkoKSB7Ci0JCXJldHVybiB0aGlzLiR7Y29sdW1uLnByb3BlcnR5TmFtZX07Ci0JfQotCSRjb2x1bW4ucHJvcGVydHlTZXRTY29wZSB2b2lkICRjdXN0b21pemVyLnByb3BlcnR5U2V0dGVyKCRjb2x1bW4ucHJvcGVydHlOYW1lKSgkY29sdW1uLnByb3BlcnR5VHlwZSAkY29sdW1uLnByb3BlcnR5TmFtZSkgewotCQl0aGlzLiR7Y29sdW1uLnByb3BlcnR5TmFtZX0gPSAke2NvbHVtbi5wcm9wZXJ0eU5hbWV9OwotCX0KLSNlbmQKLSMjCi0jIyBlcXVhbHMvaGFzaENvZGUKLQotCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLQkJaWYgKHRoaXMgPT0gb3RoZXIpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmICghKG90aGVyIGluc3RhbmNlb2YgJHt0YWJsZS5jb21wb3NpdGVLZXlDbGFzc05hbWV9KSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCSR7dGFibGUuY29tcG9zaXRlS2V5Q2xhc3NOYW1lfSBjYXN0T3RoZXIgPSAoJHt0YWJsZS5jb21wb3NpdGVLZXlDbGFzc05hbWV9KW90aGVyOwotCQlyZXR1cm4gCi0JCQkke3RhYmxlLnByaW1hcnlLZXlFcXVhbHNDbGF1c2V9Ci0KLSAgICB9Ci0gICAgCi0JcHVibGljIGludCBoYXNoQ29kZSgpIHsKLQkJZmluYWwgaW50IHByaW1lID0gMzE7Ci0JCWludCBoYXNoID0gMTc7Ci0JCSR7dGFibGUucHJpbWFyeUtleUhhc2hDb2RlQ2xhdXNlfQotCQlyZXR1cm4gaGFzaDsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy8uY2xhc3NwYXRoIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjhkOTFjLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS9qcHQvdXRpbGl0eS8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvLmN2c2lnbm9yZSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwNzdhNC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvLnByb2plY3QgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWIwMTI3Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIzZDBjNy4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBKYW4gMTUgMTE6MTE6MTEgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkM2IwOGUuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsLkpwdERiVGVzdHNQbHVnaW4KLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjIsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5O2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMS4yLjApIiwKLSBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnNxbS5jb3JlO2J1bmRsZS12ZXJzaW9uPSIxLjAuMSIsCi0gb3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWw7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwKLSBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eTtidW5kbGUtdmVyc2lvbj0iWzEuMi4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuanB0LmRiO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7eC1pbnRlcm5hbDo9dHJ1ZQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9hYm91dC5odG1sIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTUzNGJhLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAwMiwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMGQwMTAuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyAgQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gCi0jICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSMgIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKLSMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAotIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgIAotIyAgQ29udHJpYnV0b3JzOiAKLSMgIAlPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvZGVyYnkucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL2RlcmJ5LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MmQxNTYuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvZGVyYnkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotIyBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIENvbmZpZ3VyZSB0aGUgd29ya3NwYWNlLSBhbmQgZGF0YWJhc2Ugc2VydmVyLXNwZWNpZmljIHNldHRpbmdzIGhlcmUuCi0KLSMgdXNlciBhbmQgcGFzc3dvcmQgYXJlIG9wdGlvbmFsIGZvciBEZXJieQotdXNlcklEID0gCi1wYXNzd29yZCA9IAotCi0jIHRoZSBKREJDIGRyaXZlciBKQVIocykgbXVzdCBiZSBzcGVjaWZpZWQ7Ci0jIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBKQVJzLCBzZXBhcmF0ZSB0aGUgbmFtZXMgd2l0aCBjb21tYXMKLSMgamFycyA9IEM6L2RlcmJ5L2xpYi9kZXJieS5qYXIKLWphcnMgPSAKLQotIyB0aGUgSkRCQyBVUkwgaXMgcmVxdWlyZWQgZm9yIERlcmJ5Ci0jIHVybCA9IGpkYmM6ZGVyYnk6QzovZGVyYnkvZGF0YS90ZXN0ZGI7Y3JlYXRlPXRydWUKLXVybCA9IApkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvbXlzcWwucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL215c3FsLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDA3ZGUuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvbXlzcWwucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotIyBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIENvbmZpZ3VyZSB0aGUgd29ya3NwYWNlLSBhbmQgZGF0YWJhc2Ugc2VydmVyLXNwZWNpZmljIHNldHRpbmdzIGhlcmUuCi0KLSMgdXNlciBhbmQgcGFzc3dvcmQgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtCi11c2VySUQgPSAKLXBhc3N3b3JkID0gCi0KLSMgdGhlIEpEQkMgZHJpdmVyIEpBUihzKSBtdXN0IGJlIHNwZWNpZmllZDsKLSMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIEpBUnMsIHNlcGFyYXRlIHRoZSBuYW1lcyB3aXRoIGNvbW1hcwotIyBqYXJzID0gQzovbXlzcWwvbXlzcWwtY29ubmVjdG9yLWphdmEtNS4wLjYtYmluLmphcgotamFycyA9IAotCi0jIHRoZSBKREJDIFVSTCBpcyBvcHRpb25hbCBmb3IgTXlTUUwKLSMgdXJsID0gamRiYzpteXNxbDovL2xvY2FsaG9zdDozMzA2CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9vcmFjbGUxMGcucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL29yYWNsZTEwZy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjkxMWI0Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL29yYWNsZTEwZy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0jIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0jIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgQ29uZmlndXJlIHRoZSB3b3Jrc3BhY2UtIGFuZCBkYXRhYmFzZSBzZXJ2ZXItc3BlY2lmaWMgc2V0dGluZ3MgaGVyZS4KLQotIyB1c2VyIGFuZCBwYXNzd29yZCBhcmUgb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0KLXVzZXJJRCA9IHNjb3R0Ci1wYXNzd29yZCA9IHRpZ2VyCi0KLSMgdGhlIEpEQkMgZHJpdmVyIEpBUihzKSBtdXN0IGJlIHNwZWNpZmllZDsKLSMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIEpBUnMsIHNlcGFyYXRlIHRoZSBuYW1lcyB3aXRoIGNvbW1hcwotIyBqYXJzID0gQzovb3JhY2xlL2pkYmMvbGliL29qZGJjNS5qYXIKLWphcnMgPSAKLQotIyB0aGUgSkRCQyBVUkwgaXMgcmVxdWlyZWQKLSMgdXJsID0gamRiYzpvcmFjbGU6dGhpbjpAbG9jYWxob3N0OjE1MjE6dGVzdGRiCi11cmwgPSAKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL29yYWNsZTEwZ1hFLnByb3BlcnRpZXMgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9vcmFjbGUxMGdYRS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjdjMDFhLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL29yYWNsZTEwZ1hFLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSMgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBDb25maWd1cmUgdGhlIHdvcmtzcGFjZS0gYW5kIGRhdGFiYXNlIHNlcnZlci1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLgotCi0jIHVzZXIgYW5kIHBhc3N3b3JkIGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybQotdXNlcklEID0gc2NvdHQKLXBhc3N3b3JkID0gdGlnZXIKLQotIyB0aGUgSkRCQyBkcml2ZXIgSkFSKHMpIG11c3QgYmUgc3BlY2lmaWVkOwotIyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgSkFScywgc2VwYXJhdGUgdGhlIG5hbWVzIHdpdGggY29tbWFzCi0jIGphcnMgPSBDOi9vcmFjbGUvamRiYy9saWIvb2pkYmM1LmphcgotamFycyA9IAotCi0jIHRoZSBKREJDIFVSTCBpcyByZXF1aXJlZAotIyB1cmwgPSBqZGJjOm9yYWNsZTp0aGluOkBsb2NhbGhvc3Q6MTUyMTpYRQotdXJsID0gCmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9vcmFjbGU5aS5wcm9wZXJ0aWVzIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvb3JhY2xlOWkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI5MTFiNC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9vcmFjbGU5aS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0jIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0jIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgQ29uZmlndXJlIHRoZSB3b3Jrc3BhY2UtIGFuZCBkYXRhYmFzZSBzZXJ2ZXItc3BlY2lmaWMgc2V0dGluZ3MgaGVyZS4KLQotIyB1c2VyIGFuZCBwYXNzd29yZCBhcmUgb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0KLXVzZXJJRCA9IHNjb3R0Ci1wYXNzd29yZCA9IHRpZ2VyCi0KLSMgdGhlIEpEQkMgZHJpdmVyIEpBUihzKSBtdXN0IGJlIHNwZWNpZmllZDsKLSMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIEpBUnMsIHNlcGFyYXRlIHRoZSBuYW1lcyB3aXRoIGNvbW1hcwotIyBqYXJzID0gQzovb3JhY2xlL2pkYmMvbGliL29qZGJjNS5qYXIKLWphcnMgPSAKLQotIyB0aGUgSkRCQyBVUkwgaXMgcmVxdWlyZWQKLSMgdXJsID0gamRiYzpvcmFjbGU6dGhpbjpAbG9jYWxob3N0OjE1MjE6dGVzdGRiCi11cmwgPSAKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL3Bvc3RncmVzcWwucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL3Bvc3RncmVzcWwucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJmYWZlNC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9wb3N0Z3Jlc3FsLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSMgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBDb25maWd1cmUgdGhlIHdvcmtzcGFjZS0gYW5kIGRhdGFiYXNlIHNlcnZlci1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLgotCi0jIHVzZXIgYW5kIHBhc3N3b3JkIGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybQotdXNlcklEID0gCi1wYXNzd29yZCA9IAotCi0jIHRoZSBKREJDIGRyaXZlciBKQVIocykgbXVzdCBiZSBzcGVjaWZpZWQ7Ci0jIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBKQVJzLCBzZXBhcmF0ZSB0aGUgbmFtZXMgd2l0aCBjb21tYXMKLSMgamFycyA9IEM6L3Bvc3RncmVzcWwvamRiYy9wb3N0Z3Jlc3FsLTguMi01MDUuamRiYzMuamFyCi1qYXJzID0gCi0KLSMgdGhlIEpEQkMgVVJMIGlzIG9wdGlvbmFsIGZvciBQb3N0Z3JlU1FMCi0jIHVybCA9IGpkYmM6cG9zdGdyZXNxbApkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvc3Fsc2VydmVyLnByb3BlcnRpZXMgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9zcWxzZXJ2ZXIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyYjY0NS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL2NvbmZpZy9zcWxzZXJ2ZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotIyBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIENvbmZpZ3VyZSB0aGUgd29ya3NwYWNlLSBhbmQgZGF0YWJhc2Ugc2VydmVyLXNwZWNpZmljIHNldHRpbmdzIGhlcmUuCi0KLSMgdXNlciBhbmQgcGFzc3dvcmQgYXJlIG9wdGlvbmFsLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtCi11c2VySUQgPSAKLXBhc3N3b3JkID0gCi0KLSMgdGhlIEpEQkMgZHJpdmVyIEpBUihzKSBtdXN0IGJlIHNwZWNpZmllZDsKLSMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIEpBUnMsIHNlcGFyYXRlIHRoZSBuYW1lcyB3aXRoIGNvbW1hcwotIyBqYXJzID0gQzovc3Fsc2VydmVyL2xpYi9zcWxqZGJjLmphcgotamFycyA9IAotCi0jIHRoZSBKREJDIFVSTCBpcyByZXF1aXJlZAotIyB1cmwgPSBqZGJjOnNxbHNlcnZlcjovL2xvY2FsaG9zdDoxNDMzCi11cmwgPSAKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnL3N5YmFzZS5wcm9wZXJ0aWVzIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvc3liYXNlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5M2Q1ZDQuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9jb25maWcvc3liYXNlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSMgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSMgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBDb25maWd1cmUgdGhlIHdvcmtzcGFjZS0gYW5kIGRhdGFiYXNlIHNlcnZlci1zcGVjaWZpYyBzZXR0aW5ncyBoZXJlLgotCi0jIHVzZXIgYW5kIHBhc3N3b3JkIGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybQotdXNlcklEID0gCi1wYXNzd29yZCA9IAotCi0jIHRoZSBKREJDIGRyaXZlciBKQVIocykgbXVzdCBiZSBzcGVjaWZpZWQ7Ci0jIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBKQVJzLCBzZXBhcmF0ZSB0aGUgbmFtZXMgd2l0aCBjb21tYXMKLSMgamFycyA9IEM6L3N5YmFzZS9saWIvamNvbm4zLmphcgotamFycyA9IAotCi0jIHRoZSBKREJDIFVSTCBpcyByZXF1aXJlZAotIyB1cmwgPSBqZGJjOnN5YmFzZTpUZHM6bG9jYWxob3N0OjUwMDAKLXVybCA9IApkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNGZlMjcuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgIENvcHlyaWdodCAoYykgMjAwNyBPcmFjbGUuIAotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0jICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKLSMgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAKLSMgIENvbnRyaWJ1dG9yczogCi0jICAJT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIFRvIGNvZGUgZGV2ZWxvcGVyOgotIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQotIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCi0jICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCi0jICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXBsdWdpbk5hbWUgPSBKUEEgREIgVGVzdHMKLXByb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCi0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9KREJDVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9KREJDVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UwNWQ3Ni4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvSkRCQ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwotaW1wb3J0IGphdmEuc3FsLkRyaXZlck1hbmFnZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGhlc2UgYXJlbid0IHRlc3RzLiBUaGV5IGFyZSBqdXN0IGFuIGVhc3kgd2F5IHRvIGR1bXAgSkRCQyBtZXRhZGF0YSB0byB0aGUKLSAqIGNvbnNvbGUuCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIEpEQkNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBKREJDVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlcmJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZHVtcE1ldGFEYXRhKERFUkJZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXlTUUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5kdW1wTWV0YURhdGEoTVlTUUwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPcmFjbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5kdW1wTWV0YURhdGEoT1JBQ0xFKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UG9zdGdyZVNRTCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmR1bXBNZXRhRGF0YShQT1NUR1JFU1FMKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3liYXNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZHVtcE1ldGFEYXRhKFNZQkFTRSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZHVtcE1ldGFEYXRhKENvbm5lY3Rpb25Db25maWcgY29uZmlnKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKiBQTEFURk9STTogIiArIGNvbmZpZy5wbGF0Zm9ybU5hbWUgKyAiICoqKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlDbGFzcy5mb3JOYW1lKGNvbmZpZy5kcml2ZXJDbGFzc05hbWUpOwotCQlDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24odGhpcy5idWlsZFVSTChjb25maWcpLCBjb25maWcudXNlciwgY29uZmlnLnBhc3N3b3JkKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDQVRBTE9HUzoiKTsKLQkJSkRCQ1Rvb2xzLmR1bXAoY29ubmVjdGlvbi5nZXRNZXRhRGF0YSgpLmdldENhdGFsb2dzKCkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTQ0hFTUFUQToiKTsKLQkJSkRCQ1Rvb2xzLmR1bXAoY29ubmVjdGlvbi5nZXRNZXRhRGF0YSgpLmdldFNjaGVtYXMoKSk7Ci0JCWNvbm5lY3Rpb24uY2xvc2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBidWlsZFVSTChDb25uZWN0aW9uQ29uZmlnIGNvbmZpZykgewotCQlyZXR1cm4gImpkYmM6IiArIGNvbmZpZy5kYXRhYmFzZVVSTDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbm5lY3Rpb25Db25maWcgREVSQlkgPQotCQluZXcgQ29ubmVjdGlvbkNvbmZpZygKLQkJCSJEZXJieSIsCi0JCQkib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIiwKLQkJCSJkZXJieTpDOi9kZXJieS9kYXRhL3Rlc3QiLAotCQkJbnVsbCwKLQkJCW51bGwKLQkJKTsKLQotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29ubmVjdGlvbkNvbmZpZyBNWVNRTCA9Ci0JCW5ldyBDb25uZWN0aW9uQ29uZmlnKAotCQkJIk15U1FMIiwKLQkJCSJjb20ubXlzcWwuamRiYy5Ecml2ZXIiLAotCQkJIm15c3FsOi8vbG9jYWxob3N0OjMzMDYiLAotCQkJInJvb3QiLAotCQkJIm9yYWNsZSIKLQkJKTsKLQotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29ubmVjdGlvbkNvbmZpZyBPUkFDTEUgPQotCQluZXcgQ29ubmVjdGlvbkNvbmZpZygKLQkJCSJPcmFjbGUiLAotCQkJIm9yYWNsZS5qZGJjLk9yYWNsZURyaXZlciIsCi0JCQkib3JhY2xlOnRoaW46QGxvY2FsaG9zdDoxNTIxOm9yY2wiLAotCQkJInNjb3R0IiwKLQkJCSJ0aWdlciIKLQkJKTsKLQotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29ubmVjdGlvbkNvbmZpZyBQT1NUR1JFU1FMID0KLQkJbmV3IENvbm5lY3Rpb25Db25maWcoCi0JCQkiUG9zdGdyZVNRTCIsCi0JCQkib3JnLnBvc3RncmVzcWwuRHJpdmVyIiwKLQkJCSJwb3N0Z3Jlc3FsOnBvc3RncmVzIiwKLQkJCSJwb3N0Z3JlcyIsCi0JCQkib3JhY2xlIgotCQkpOwotCi0JLy8gdGhlIFN5YmFzZSBzZXJ2ZXIgbXVzdCBiZSBjb25maWd1cmVkIGV4cGxpY2l0bHkgdG8gImxvY2FsaG9zdCIKLQkvLyBpbiB0aGUgY29uZmlnIGZpbGUgW1NZQkFTRV0vaW5pL3NxbC5pbmkKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbm5lY3Rpb25Db25maWcgU1lCQVNFID0KLQkJbmV3IENvbm5lY3Rpb25Db25maWcoCi0JCQkiU3liYXNlIiwKLQkJCSJjb20uc3liYXNlLmpkYmMzLmpkYmMuU3liRHJpdmVyIiwKLQkJCSJzeWJhc2U6VGRzOmxvY2FsaG9zdDo1MDAwIiwKLQkJCSJzYSIsCi0JCQkib3JhY2xlIgotCQkpOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDb25uZWN0aW9uQ29uZmlnIHsKLQkJcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBwbGF0Zm9ybU5hbWU7Ci0JCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZHJpdmVyQ2xhc3NOYW1lOwotCQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGRhdGFiYXNlVVJMOwotCQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIHVzZXI7Ci0JCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQ7Ci0JCXByb3RlY3RlZCBDb25uZWN0aW9uQ29uZmlnKAotCQkJCVN0cmluZyBwbGF0Zm9ybU5hbWUsCi0JCQkJU3RyaW5nIGRyaXZlckNsYXNzTmFtZSwKLQkJCQlTdHJpbmcgZGF0YWJhc2VVUkwsCi0JCQkJU3RyaW5nIHVzZXIsCi0JCQkJU3RyaW5nIHBhc3N3b3JkCi0JCSkgewotCQkJc3VwZXIoKTsKLQkJCXRoaXMucGxhdGZvcm1OYW1lID0gcGxhdGZvcm1OYW1lOwotCQkJdGhpcy5kcml2ZXJDbGFzc05hbWUgPSBkcml2ZXJDbGFzc05hbWU7Ci0JCQl0aGlzLmRhdGFiYXNlVVJMID0gZGF0YWJhc2VVUkw7Ci0JCQl0aGlzLnVzZXIgPSB1c2VyOwotCQkJdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvSkRCQ1Rvb2xzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvSkRCQ1Rvb2xzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3Yzk4ZmUuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL0pEQkNUb29scy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwotaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKLWltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuUmVzdWx0U2V0SXRlcmF0b3I7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIEpEQkNUb29scyB7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlkdW1wKGV4ZWN1dGUoY29ubmVjdGlvbiwgc3FsKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoUmVzdWx0U2V0IHJlc3VsdFNldCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCVByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCkpOwotCQkvLyBzeW5jaHJvbml6ZSB0aGUgY29uc29sZSBzbyBldmVyeXRoaW5nIGlzIGNvbnRpZ3VvdXMKLQkJc3luY2hyb25pemVkIChTeXN0ZW0ub3V0KSB7Ci0JCQlkdW1wT24ocmVzdWx0U2V0LCBwdyk7Ci0JCX0KLQkJcHcuZmx1c2goKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcE9uKFJlc3VsdFNldCByZXN1bHRTZXQsIFByaW50V3JpdGVyIHB3KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQkJQXJyYXlMaXN0PEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+PiBtYXBzID0gY29udmVydFRvTWFwcyhyZXN1bHRTZXQpOwotCQlmb3IgKEl0ZXJhdG9yPEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+PiBtYXBTdHJlYW0gPSBtYXBzLml0ZXJhdG9yKCk7IG1hcFN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJZm9yIChJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+PiBlbnRyeVN0cmVhbSA9IG1hcFN0cmVhbS5uZXh0KCkuZW50cnlTZXQoKS5pdGVyYXRvcigpOyBlbnRyeVN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJCU1hcC5FbnRyeTxTdHJpbmcsIE9iamVjdD4gZW50cnkgPSBlbnRyeVN0cmVhbS5uZXh0KCk7Ci0JCQkJcHcucHJpbnQoZW50cnkuZ2V0S2V5KCkpOwotCQkJCXB3LnByaW50KCIgPSAiKTsKLQkJCQlwdy5wcmludChlbnRyeS5nZXRWYWx1ZSgpKTsKLQkJCQlwdy5wcmludGxuKCk7Ci0JCQl9Ci0JCQlpZiAobWFwU3RyZWFtLmhhc05leHQoKSkgewotCQkJCXB3LnByaW50bG4oKTsKLQkJCX0KLQkJfQotCQlwdy5wcmludGxuKCJ0b3RhbCByb3dzOiAiICsgbWFwcy5zaXplKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgQXJyYXlMaXN0PEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+PiBjb252ZXJ0VG9NYXBzKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBjb252ZXJ0VG9NYXBzKGV4ZWN1dGUoY29ubmVjdGlvbiwgc3FsKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZXN1bHRTZXQgZXhlY3V0ZShDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlTdGF0ZW1lbnQgc3RhdGVtZW50ID0gY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkJc3RhdGVtZW50LmV4ZWN1dGUoc3FsKTsKLQkJUmVzdWx0U2V0IHJlc3VsdFNldCA9IHN0YXRlbWVudC5nZXRSZXN1bHRTZXQoKTsKLQkJc3RhdGVtZW50LmNsb3NlKCk7Ci0JCXJldHVybiByZXN1bHRTZXQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBBcnJheUxpc3Q8SGFzaE1hcDxTdHJpbmcsIE9iamVjdD4+IGNvbnZlcnRUb01hcHMoUmVzdWx0U2V0IHJlc3VsdFNldCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCUFycmF5TGlzdDxIYXNoTWFwPFN0cmluZywgT2JqZWN0Pj4gcm93cyA9IG5ldyBBcnJheUxpc3Q8SGFzaE1hcDxTdHJpbmcsIE9iamVjdD4+KCk7Ci0JCWZvciAoSXRlcmF0b3I8SGFzaE1hcDxTdHJpbmcsIE9iamVjdD4+IHN0cmVhbSA9IGJ1aWxkTWFwSXRlcmF0b3IocmVzdWx0U2V0KTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQlyb3dzLmFkZChzdHJlYW0ubmV4dCgpKTsKLQkJfQotCQlyZXR1cm4gcm93czsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEl0ZXJhdG9yPEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+PiBidWlsZE1hcEl0ZXJhdG9yKFJlc3VsdFNldCByZXN1bHRTZXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFJlc3VsdFNldEl0ZXJhdG9yPEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+PihyZXN1bHRTZXQsIG5ldyBNYXBSZXN1bHRTZXRJdGVyYXRvckFkYXB0ZXIoYnVpbGRDb2x1bW5OYW1lcyhyZXN1bHRTZXQpKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmdbXSBidWlsZENvbHVtbk5hbWVzKFJlc3VsdFNldCByZXN1bHRTZXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlTdHJpbmdbXSBuYW1lcyA9IG5ldyBTdHJpbmdbcmVzdWx0U2V0LmdldE1ldGFEYXRhKCkuZ2V0Q29sdW1uQ291bnQoKV07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCW5hbWVzW2ldID0gcmVzdWx0U2V0LmdldE1ldGFEYXRhKCkuZ2V0Q29sdW1uTmFtZShpICsgMSk7ICAvLyBOQjogUmVzdWx0U2V0IGluZGV4L3N1YnNjcmlwdCBpcyAxLWJhc2VkCi0JCX0KLQkJcmV0dXJuIG5hbWVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgTWFwUmVzdWx0U2V0SXRlcmF0b3JBZGFwdGVyIGltcGxlbWVudHMgUmVzdWx0U2V0SXRlcmF0b3IuQWRhcHRlcjxIYXNoTWFwPFN0cmluZywgT2JqZWN0Pj4gewotCQlwcml2YXRlIGZpbmFsIFN0cmluZ1tdIGNvbHVtbk5hbWVzOwotCQlwdWJsaWMgTWFwUmVzdWx0U2V0SXRlcmF0b3JBZGFwdGVyKFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB7Ci0JCQlzdXBlcigpOwotCQkJdGhpcy5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwotCQl9Ci0JCXB1YmxpYyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PiBidWlsZE5leHQoUmVzdWx0U2V0IHJzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQkJCUhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0Pih0aGlzLmNvbHVtbk5hbWVzLmxlbmd0aCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuY29sdW1uTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQltYXAucHV0KHRoaXMuY29sdW1uTmFtZXNbaV0sIHJzLmdldE9iamVjdChpICsgMSkpOyAgLy8gTkI6IFJlc3VsdFNldCBpbmRleC9zdWJzY3JpcHQgaXMgMS1iYXNlZAotCQkJfQotCQkJcmV0dXJuIG1hcDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL0pwdERiVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9KcHREYlRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzRkMDguLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL0pwdERiVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWwucGxhdGZvcm1zLkFsbFBsYXRmb3JtVGVzdHM7Ci0KLS8qKgotICogIEpQVCBEQiBUZXN0cwotICovCi1wdWJsaWMgY2xhc3MgSnB0RGJUZXN0cyB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoSnB0RGJUZXN0cy5jbGFzcy5nZXRQYWNrYWdlKCkuZ2V0TmFtZSgpKTsKLSAgICAKLSAgICAgICAgc3VpdGUuYWRkVGVzdCggQWxsUGxhdGZvcm1UZXN0cy5zdWl0ZSgpKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHN1aXRlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIEpwdERiVGVzdHMoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL0pwdERiVGVzdHNQbHVnaW4uamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9KcHREYlRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNTE3YjUuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL0pwdERiVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiAgSnB0RGJUZXN0c1BsdWdpbgotICovCi1wdWJsaWMgY2xhc3MgSnB0RGJUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgSnB0RGJUZXN0c1BsdWdpbiBJTlNUQU5DRTsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9JRCA9ICJvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMiOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpwdERiVGVzdHNQbHVnaW4gaW5zdGFuY2UoKSB7Ci0JCXJldHVybiBJTlNUQU5DRTsKLQl9Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEpwdERiVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCUlOU1RBTkNFID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlJTlNUQU5DRSA9IG51bGw7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9BbGxQbGF0Zm9ybVRlc3RzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL0FsbFBsYXRmb3JtVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJlY2U3ZS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL0FsbFBsYXRmb3JtVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsLnBsYXRmb3JtczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxQbGF0Zm9ybVRlc3RzIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZShBbGxQbGF0Zm9ybVRlc3RzLmNsYXNzLmdldFBhY2thZ2UoKS5nZXROYW1lKCkpOwotCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEZXJieVRlc3RzLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKE15U1FMVGVzdHMuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoT3JhY2xlMTBnVGVzdHMuY2xhc3MpOwotLy8JCXN1aXRlLmFkZFRlc3RTdWl0ZShPcmFjbGUxMGdYRVRlc3RzLmNsYXNzKTsKLS8vCQlzdWl0ZS5hZGRUZXN0U3VpdGUoT3JhY2xlOWlUZXN0cy5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShQb3N0Z3JlU1FMVGVzdHMuY2xhc3MpOwotLy8JCXN1aXRlLmFkZFRlc3RTdWl0ZShTUUxTZXJ2ZXJUZXN0cy5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShTeWJhc2VUZXN0cy5jbGFzcyk7Ci0KLSAgICAgICAgcmV0dXJuIHN1aXRlOwotICAgIH0KLQotICAgIHByaXZhdGUgQWxsUGxhdGZvcm1UZXN0cygpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL0RUUFBsYXRmb3JtVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvRFRQUGxhdGZvcm1UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTU5YmFiLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvRFRQUGxhdGZvcm1UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhOwotaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKLWltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5zcWwuU3RhdGVtZW50OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LkNvbm5lY3Rpb25Qcm9maWxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuSUNvbm5lY3Rpb25Qcm9maWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuSU1hbmFnZWRDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuUHJvZmlsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kcml2ZXJzLklEcml2ZXJNZ210Q29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZHJpdmVycy5JUHJvcGVydHlTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kcml2ZXJzLlByb3BlcnR5U2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmRyaXZlcnMuWE1MRmlsZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kcml2ZXJzLmpkYmMuSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuaW50ZXJuYWwuQ29ubmVjdGl2aXR5UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUuY29ubmVjdGlvbi5Db25uZWN0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnNxbS5jb3JlLnJ0ZS5JQ2F0YWxvZ09iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db25uZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbm5lY3Rpb25Qcm9maWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db25uZWN0aW9uUHJvZmlsZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbm5lY3Rpb25Qcm9maWxlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkRhdGFiYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5EYXRhYmFzZUZpbmRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuSnB0RGJQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2NoZW1hQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5TZXF1ZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXkuQ29sdW1uUGFpcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWwuSnB0RGJUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5DbGFzc1Rvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkluZGVudGluZ1ByaW50V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlN0cmluZ1Rvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5SZXN1bHRTZXRJdGVyYXRvcjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciB0ZXN0aW5nIERUUCB3cmFwcGVycyBvbiB2YXJpb3VzIGRhdGFiYXNlcy4KLSAqLwotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRFRQUGxhdGZvcm1UZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIFRoZSBwbGF0Zm9ybSBwcm9wZXJ0aWVzIGFyZSBsb2FkZWQgZnJvbSBhIEphdmEgcHJvcGVydGllcyBmaWxlIGluIHRoZQotCSAqICdvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvY29uZmlnJyBkaXJlY3RvcnkuIEVhY2ggZGF0YWJhc2UgcGxhdGZvcm0gaGFzCi0JICogaXRzIG93biBwcm9wZXJ0aWVzIGZpbGUgKGUuZy4gJ2RlcmJ5LnByb3BlcnRpZXMnKS4KLQkgKi8KLQlwcml2YXRlIFByb3BlcnRpZXMgcGxhdGZvcm1Qcm9wZXJ0aWVzOwotCi0JLyoqCi0JICogVGhpcyBpcyB0aGUgRGFsaSBjb25uZWN0aW9uIHByb2ZpbGUgd3JhcHBlci4KLQkgKi8KLQlwcm90ZWN0ZWQgQ29ubmVjdGlvblByb2ZpbGUgY29ubmVjdGlvblByb2ZpbGU7Ci0KLQotCS8vICoqKioqKioqKiogY29uc3RhbnRzICoqKioqKioqKioKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTEFURk9STV9DT05GSUdfRElSRUNUT1JZID0gImNvbmZpZyI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREJfVVNFUl9JRF9QUk9QRVJUWSA9ICJ1c2VySUQiOwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREJfVVNFUl9JRF9ERUZBVUxUID0gInVzZXIiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERCX1BBU1NXT1JEX1BST1BFUlRZID0gInBhc3N3b3JkIjsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERCX1BBU1NXT1JEX0RFRkFVTFQgPSAiIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQl9EUklWRVJfSkFSU19QUk9QRVJUWSA9ICJqYXJzIjsKLQkJLy8gcmVxdWlyZWQgLSBubyBkZWZhdWx0Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREJfVVJMX1BST1BFUlRZID0gInVybCI7Ci0JCS8vIHJlcXVpcmVkIC0gbm8gZGVmYXVsdAotCi0KLQotCS8vICoqKioqKioqKiogY29uc3RydWN0b3IgKioqKioqKioqKgotCi0JcHJvdGVjdGVkIERUUFBsYXRmb3JtVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIHNldC11cC90ZWFyLWRvd24gKioqKioqKioqKgotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQotCQl0aGlzLnBsYXRmb3JtUHJvcGVydGllcyA9IHRoaXMubG9hZFBsYXRmb3JtUHJvcGVydGllcygpOwotCQl0aGlzLmJ1aWxkRFRQRHJpdmVyRGVmaW5pdGlvbkZpbGUoKTsKLQkJdGhpcy5idWlsZERUUENvbm5lY3Rpb25Qcm9maWxlKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSgpLmJ1aWxkQ29ubmVjdGlvblByb2ZpbGUodGhpcy5nZXRQcm9maWxlTmFtZSgpLCBEYXRhYmFzZUZpbmRlci5EZWZhdWx0Lmluc3RhbmNlKCkpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUgPSBudWxsOwotCQl0aGlzLnBsYXRmb3JtUHJvcGVydGllcyA9IG51bGw7Ci0KLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQkvLyAqKioqKiBwbGF0Zm9ybSBwcm9wZXJ0aWVzIGZpbGUKLQlwcml2YXRlIFByb3BlcnRpZXMgbG9hZFBsYXRmb3JtUHJvcGVydGllcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCXAubG9hZCh0aGlzLmJ1aWxkUGxhdGZvcm1Qcm9wZXJ0aWVzRmlsZVVSTCgpLm9wZW5TdHJlYW0oKSk7Ci0JCXJldHVybiBwOwotCX0KLQotCXByaXZhdGUgVVJMIGJ1aWxkUGxhdGZvcm1Qcm9wZXJ0aWVzRmlsZVVSTCgpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmdldEJ1bmRsZSh0aGlzLmdldFRlc3RQbHVnaW5CdW5kbGVJRCgpKS5nZXRFbnRyeSh0aGlzLmdldFBsYXRmb3JtUHJvcGVydGllc0ZpbGVQYXRoKCkpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldFRlc3RQbHVnaW5CdW5kbGVJRCgpIHsKLQkJcmV0dXJuIEpwdERiVGVzdHNQbHVnaW4uQlVORExFX0lEOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldFBsYXRmb3JtUHJvcGVydGllc0ZpbGVQYXRoKCkgewotCQlyZXR1cm4gdGhpcy5nZXRQbGF0Zm9ybVByb3BlcnRpZXNEaXJlY3RvcnlOYW1lKCkgKyAnLycgKyB0aGlzLmdldFBsYXRmb3JtUHJvcGVydGllc0ZpbGVOYW1lKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzRGlyZWN0b3J5TmFtZSgpIHsKLQkJcmV0dXJuIFBMQVRGT1JNX0NPTkZJR19ESVJFQ1RPUlk7Ci0JfQotCi0JLyoqCi0JICogRWFjaCBkYXRhYmFzZSBwbGF0Zm9ybSBoYXMgYSBzZXBhcmF0ZSBwcm9wZXJ0aWVzIGZpbGUgaW4gdGhlICdjb25maWcnCi0JICogZGlyZWN0b3J5IHRoYXQgbXVzdCBiZSBjdXN0b21pemVkIGJ5IHdob21ldmVyIGlzIGV4ZWN1dGluZyB0aGUgdGVzdHMuCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpOwotCi0JLy8gKioqKiogZHJpdmVyIGRlZmluaXRpb24gZmlsZQotCXByaXZhdGUgdm9pZCBidWlsZERUUERyaXZlckRlZmluaXRpb25GaWxlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYTUxGaWxlTWFuYWdlci5zZXRTdG9yYWdlTG9jYXRpb24odGhpcy5nZXREVFBEcml2ZXJEZWZpbml0aW9uTG9jYXRpb24oKSk7Ci0JCVhNTEZpbGVNYW5hZ2VyLnNldEZpbGVOYW1lKHRoaXMuZ2V0RFRQRHJpdmVyRmlsZU5hbWUoKSk7Ci0KLQkJSVByb3BlcnR5U2V0W10gc2V0cyA9IFhNTEZpbGVNYW5hZ2VyLmxvYWRQcm9wZXJ0eVNldHMoKTsKLQkJZm9yIChJUHJvcGVydHlTZXQgc2V0IDogc2V0cykgewotCQkJaWYgKHNldC5nZXRJRCgpLmVxdWFscyh0aGlzLmdldERyaXZlckRlZmluaXRpb25JRCgpKSkgewotCQkJCXJldHVybjsgIC8vIHByb3BlcnR5IHNldHMgbGl2ZSBhY3Jvc3MgdGVzdHMKLQkJCX0KLQkJfQotCi0JCVhNTEZpbGVNYW5hZ2VyLnNhdmVOYW1lZFByb3BlcnR5U2V0KHRoaXMuYnVpbGREVFBEcml2ZXJEZWZpbml0aW9uUHJvcGVydHlTZXRzKCkpOwotCi0JCS8vIHZlcmlmeSB0aGUgZmlsZSB3YXMgY3JlYXRlZDoKLQkJRmlsZSBkcml2ZXJEZWZpbml0aW9uZUZpbGUgPSB0aGlzLmdldERUUERyaXZlckRlZmluaXRpb25Mb2NhdGlvbigpLmFwcGVuZCh0aGlzLmdldERUUERyaXZlckZpbGVOYW1lKCkpLnRvRmlsZSgpOwotCQlhc3NlcnRUcnVlKGRyaXZlckRlZmluaXRpb25lRmlsZS5leGlzdHMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBJUGF0aCBnZXREVFBEcml2ZXJEZWZpbml0aW9uTG9jYXRpb24oKSB7Ci0JCXJldHVybiBDb25uZWN0aXZpdHlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREVFBEcml2ZXJGaWxlTmFtZSgpIHsKLQkJcmV0dXJuIElEcml2ZXJNZ210Q29uc3RhbnRzLkRSSVZFUl9GSUxFOwotCX0KLQotCXByaXZhdGUgSVByb3BlcnR5U2V0W10gYnVpbGREVFBEcml2ZXJEZWZpbml0aW9uUHJvcGVydHlTZXRzKCkgewotCQlJUHJvcGVydHlTZXRbXSBwcm9wZXJ0eVNldHMgPSBuZXcgSVByb3BlcnR5U2V0WzFdOwotCQlQcm9wZXJ0eVNldEltcGwgcHJvcGVydHlTZXQgPSBuZXcgUHJvcGVydHlTZXRJbXBsKHRoaXMuZ2V0RHJpdmVyTmFtZSgpLCB0aGlzLmdldERyaXZlckRlZmluaXRpb25JRCgpKTsKLQkJcHJvcGVydHlTZXQuc2V0UHJvcGVydGllcyh0aGlzLmdldERyaXZlckRlZmluaXRpb25JRCgpLCB0aGlzLmJ1aWxkRFRQRHJpdmVyRGVmaW5pdGlvblByb3BlcnRpZXMoKSk7Ci0JCXByb3BlcnR5U2V0c1swXSA9IHByb3BlcnR5U2V0OwotCQlyZXR1cm4gcHJvcGVydHlTZXRzOwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0RHJpdmVyTmFtZSgpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uSUQoKTsKLQotCXByaXZhdGUgUHJvcGVydGllcyBidWlsZERUUERyaXZlckRlZmluaXRpb25Qcm9wZXJ0aWVzKCkgewotCQlQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCQlwLnNldFByb3BlcnR5KENvbm5lY3Rpb25Qcm9maWxlLkRSSVZFUl9ERUZJTklUSU9OX1RZUEVfUFJPUF9JRCwgdGhpcy5nZXREcml2ZXJEZWZpbml0aW9uVHlwZSgpKTsKLQkJcC5zZXRQcm9wZXJ0eShDb25uZWN0aW9uUHJvZmlsZS5EUklWRVJfSkFSX0xJU1RfUFJPUF9JRCwgdGhpcy5nZXRKREJDRHJpdmVySmFyTGlzdCgpKTsKLQkJcC5zZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuREFUQUJBU0VfVkVORE9SX1BST1BfSUQsIHRoaXMuZ2V0RGF0YWJhc2VWZW5kb3IoKSk7Ci0JCXAuc2V0UHJvcGVydHkoSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzLkRBVEFCQVNFX1ZFUlNJT05fUFJPUF9JRCwgdGhpcy5nZXREYXRhYmFzZVZlcnNpb24oKSk7Ci0JCXAuc2V0UHJvcGVydHkoSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzLkRSSVZFUl9DTEFTU19QUk9QX0lELCB0aGlzLmdldERyaXZlckNsYXNzKCkpOwotCQlwLnNldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5VUkxfUFJPUF9JRCwgdGhpcy5nZXRKREJDVVJMKCkpOwotCQlwLnNldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5VU0VSTkFNRV9QUk9QX0lELCB0aGlzLmdldFVzZXJJRCgpKTsKLQkJcC5zZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuUEFTU1dPUkRfUFJPUF9JRCwgdGhpcy5nZXRQYXNzd29yZCgpKTsKLQkJcmV0dXJuIHA7Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uVHlwZSgpOwotCi0JLyoqCi0JICogVGhlIEpBUiBsaXN0IGlzIHdvcmtzcGFjZS1zcGVjaWZpYyBhbmQgaXMgc2V0IGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SkRCQ0RyaXZlckphckxpc3QoKSB7Ci0JCXJldHVybiB0aGlzLmdldFJlcXVpcmVkUGxhdGZvcm1Qcm9wZXJ0eShEQl9EUklWRVJfSkFSU19QUk9QRVJUWSk7Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREYXRhYmFzZVZlbmRvcigpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0RHJpdmVyQ2xhc3MoKTsKLQotCS8qKgotCSAqIFRoZSBkYXRhYmFzZSBVUkwgaXMgd29ya3NwYWNlLXNwZWNpZmljIGFuZCBpcyBzZXQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZQotCSAqIGZvciBzb21lIGRhdGFiYXNlcy4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRKREJDVVJMKCkgewotCQlyZXR1cm4gdGhpcy5wbGF0Zm9ybVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoREJfVVJMX1BST1BFUlRZLCB0aGlzLmdldERlZmF1bHRKREJDVVJMKCkpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGVmYXVsdEpEQkNVUkwoKSB7Ci0JCXJldHVybiAiIjsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgdXNlciBJRCBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHNldCBpbiB0aGUgcHJvcGVydGllcyBmaWxlLgotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZ2V0VXNlcklEKCkgewotCQlyZXR1cm4gdGhpcy5wbGF0Zm9ybVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoREJfVVNFUl9JRF9QUk9QRVJUWSwgREJfVVNFUl9JRF9ERUZBVUxUKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgcGFzc3dvcmQgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBzZXQgaW4gdGhlIHByb3BlcnRpZXMgZmlsZS4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKLQkJcmV0dXJuIHRoaXMucGxhdGZvcm1Qcm9wZXJ0aWVzLmdldFByb3BlcnR5KERCX1BBU1NXT1JEX1BST1BFUlRZLCBEQl9QQVNTV09SRF9ERUZBVUxUKTsKLQl9Ci0KLQkvLyAqKioqKiBEVFAgY29ubmVjdGlvbiBwcm9maWxlCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkRFRQQ29ubmVjdGlvblByb2ZpbGUoKSB0aHJvd3MgQ29ubmVjdGlvblByb2ZpbGVFeGNlcHRpb24gewotCQlpZiAodGhpcy5nZXREVFBQcm9maWxlTWFuYWdlcigpLmdldFByb2ZpbGVCeU5hbWUodGhpcy5nZXRQcm9maWxlTmFtZSgpKSAhPSBudWxsKSB7Ci0JCQlyZXR1cm47ICAvLyBwcm9maWxlcyBsaXZlIGFjcm9zcyB0ZXN0cwotCQl9Ci0JCXRoaXMuY3JlYXRlUHJvZmlsZSh0aGlzLmdldFByb2ZpbGVOYW1lKCkpOwotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RFRQUHJvZmlsZU1hbmFnZXIoKS5nZXRQcm9maWxlQnlOYW1lKHRoaXMuZ2V0UHJvZmlsZU5hbWUoKSkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVByb2ZpbGUoU3RyaW5nIHByb2ZpbGVOYW1lKSB0aHJvd3MgQ29ubmVjdGlvblByb2ZpbGVFeGNlcHRpb24gewotCQl0aGlzLmdldERUUFByb2ZpbGVNYW5hZ2VyKCkuY3JlYXRlUHJvZmlsZSgKLQkJCQlwcm9maWxlTmFtZSwKLQkJCQl0aGlzLmdldFByb2ZpbGVEZXNjcmlwdGlvbigpLAotCQkJCXRoaXMuZ2V0UHJvdmlkZXJJRCgpLAotCQkJCXRoaXMuYnVpbGREVFBDb25uZWN0aW9uUHJvZmlsZVByb3BlcnRpZXMoKQotCQkpOwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvZmlsZU5hbWUoKTsKLQotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvZmlsZURlc2NyaXB0aW9uKCk7Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb3ZpZGVySUQoKSB7Ci0JCXJldHVybiBDb25uZWN0aW9uUHJvZmlsZS5DT05ORUNUSU9OX1BST0ZJTEVfVFlQRTsKLQl9Ci0JIAotCXByb3RlY3RlZCBQcm9wZXJ0aWVzIGJ1aWxkRFRQQ29ubmVjdGlvblByb2ZpbGVQcm9wZXJ0aWVzKCkgewotCQlQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCQlwLnNldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5VU0VSTkFNRV9QUk9QX0lELCB0aGlzLmdldFVzZXJJRCgpKTsKLQkJcC5zZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuUEFTU1dPUkRfUFJPUF9JRCwgdGhpcy5nZXRQYXNzd29yZCgpKTsKLQkJcC5zZXRQcm9wZXJ0eShDb25uZWN0aW9uUHJvZmlsZS5EUklWRVJfREVGSU5JVElPTl9QUk9QX0lELCB0aGlzLmdldERyaXZlckRlZmluaXRpb25JRCgpKTsKLQotCQlwLnNldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5EUklWRVJfQ0xBU1NfUFJPUF9JRCwgdGhpcy5nZXREcml2ZXJDbGFzcygpKTsKLQkJcC5zZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuVVJMX1BST1BfSUQsIHRoaXMuZ2V0SkRCQ1VSTCgpKTsKLQkJcC5zZXRQcm9wZXJ0eShJSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHMuREFUQUJBU0VfVkVORE9SX1BST1BfSUQsIHRoaXMuZ2V0RGF0YWJhc2VWZW5kb3IoKSk7Ci0JCXAuc2V0UHJvcGVydHkoSUpEQkNEcml2ZXJEZWZpbml0aW9uQ29uc3RhbnRzLkRBVEFCQVNFX1ZFUlNJT05fUFJPUF9JRCwgdGhpcy5nZXREYXRhYmFzZVZlcnNpb24oKSk7Ci0KLQkJcC5zZXRQcm9wZXJ0eShDb25uZWN0aW9uUHJvZmlsZS5EQVRBQkFTRV9TQVZFX1BXRF9QUk9QX0lELCB0aGlzLnBhc3N3b3JkSXNTYXZlZCgpKTsKLQkJcmV0dXJuIHA7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmRJc1NhdmVkKCkgewotCQlyZXR1cm4gInRydWUiOwotCX0KLQotCi0JLy8gKioqKioqKioqKiB0ZXN0cyAqKioqKioqKioqCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcigpIHRocm93cyBDb25uZWN0aW9uUHJvZmlsZUV4Y2VwdGlvbiB7Ci0JCVRlc3RDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyKCk7Ci0JCXRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGVGYWN0b3J5KCkuYWRkQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJU3RyaW5nIGNwTmFtZTEgPSB0aGlzLmdldFByb2ZpbGVOYW1lKCkgKyAiMSI7Ci0JCXRoaXMuY3JlYXRlUHJvZmlsZShjcE5hbWUxKTsKLQkJSUNvbm5lY3Rpb25Qcm9maWxlIGR0cENQID0gdGhpcy5nZXREVFBQcm9maWxlTWFuYWdlcigpLmdldFByb2ZpbGVCeU5hbWUoY3BOYW1lMSk7Ci0JCWFzc2VydE5vdE51bGwoZHRwQ1ApOwotCi0JCWFzc2VydEVxdWFscyhjcE5hbWUxLCBsaXN0ZW5lci5hZGRlZE5hbWUpOwotCQlsaXN0ZW5lci5jbGVhcigpOwotCi0JCVN0cmluZyBjcE5hbWUyID0gdGhpcy5nZXRQcm9maWxlTmFtZSgpICsgIjIiOwotCQl0aGlzLmdldERUUFByb2ZpbGVNYW5hZ2VyKCkubW9kaWZ5UHJvZmlsZShkdHBDUCwgY3BOYW1lMiwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhjcE5hbWUxLCBsaXN0ZW5lci5yZW5hbWVkT2xkTmFtZSk7Ci0JCWFzc2VydEVxdWFscyhjcE5hbWUyLCBsaXN0ZW5lci5yZW5hbWVkTmV3TmFtZSk7Ci0JCWxpc3RlbmVyLmNsZWFyKCk7Ci0KLQkJQ29ubmVjdGlvblByb2ZpbGUgY3AgPSB0aGlzLmdldENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSgpLmJ1aWxkQ29ubmVjdGlvblByb2ZpbGUoY3BOYW1lMik7Ci0JCWFzc2VydE5vdE51bGwoY3ApOwotCi0JCXRoaXMuZ2V0RFRQUHJvZmlsZU1hbmFnZXIoKS5kZWxldGVQcm9maWxlKGR0cENQKTsKLQkJYXNzZXJ0RXF1YWxzKGNwTmFtZTIsIGxpc3RlbmVyLnJlbW92ZWROYW1lKTsKLQkJbGlzdGVuZXIuY2xlYXIoKTsKLQotCQljcCA9IHRoaXMuZ2V0Q29ubmVjdGlvblByb2ZpbGVGYWN0b3J5KCkuYnVpbGRDb25uZWN0aW9uUHJvZmlsZShjcE5hbWUyKTsKLQkJYXNzZXJ0TnVsbChjcCk7Ci0KLQkJdGhpcy5nZXRDb25uZWN0aW9uUHJvZmlsZUZhY3RvcnkoKS5yZW1vdmVDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyKGxpc3RlbmVyKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmFtZSgpIHsKLQkJYXNzZXJ0RXF1YWxzKHRoaXMuZ2V0UHJvZmlsZU5hbWUoKSwgdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb25uZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5pc0luYWN0aXZlKCkpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuaXNEaXNjb25uZWN0ZWQoKSk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5pc0Nvbm5lY3RlZCgpKTsKLQotCQl0aGlzLnZlcmlmeURhdGFiYXNlVmVyc2lvbk51bWJlcigpOwotCQl0aGlzLnZlcmlmeURhdGFiYXNlVmVuZG9yKCk7Ci0JCXRoaXMudmVyaWZ5RGF0YWJhc2VDb250ZW50KCk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5pc0luYWN0aXZlKCkpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuaXNEaXNjb25uZWN0ZWQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeURhdGFiYXNlVmVyc2lvbk51bWJlcigpIHsKLQkJRGF0YWJhc2UgZGF0YWJhc2UgPSB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCk7Ci0JCWFzc2VydE5vdE51bGwoZGF0YWJhc2UpOwotCi0JCVN0cmluZyBhY3R1YWwgPSBkYXRhYmFzZS5nZXRWZXJzaW9uKCk7Ci0JCVN0cmluZyBleHBlY3RlZCA9IHRoaXMuZ2V0RGF0YWJhc2VWZXJzaW9uKCk7Ci0JCVN0cmluZyBlcnJvck1lc3NhZ2UgPSAiZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZCArICIgLSBhY3R1YWw6ICIgKyBhY3R1YWw7Ci0JCS8vIHBhcnRpYWwgbWF0Y2ggaXMgZ29vZCBlbm91Z2gKLQkJYXNzZXJ0VHJ1ZShlcnJvck1lc3NhZ2UsIGFjdHVhbC5pbmRleE9mKGV4cGVjdGVkKSAhPSAtMSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeURhdGFiYXNlVmVuZG9yKCkgewotCQlEYXRhYmFzZSBkYXRhYmFzZSA9IHRoaXMuY29ubmVjdGlvblByb2ZpbGUuZ2V0RGF0YWJhc2UoKTsKLQkJU3RyaW5nIGFjdHVhbCA9IGRhdGFiYXNlLmdldFZlbmRvck5hbWUoKTsKLQkJU3RyaW5nIGV4cGVjdGVkID0gdGhpcy5nZXREYXRhYmFzZVZlbmRvcigpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeURhdGFiYXNlQ29udGVudCgpIHsKLQkJRGF0YWJhc2UgZGF0YWJhc2UgPSB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCk7Ci0JCWFzc2VydFRydWUoZGF0YWJhc2Uuc2NoZW1hdGFTaXplKCkgPj0gMCk7Ci0KLQkJU2NoZW1hIHNjaGVtYSA9IGRhdGFiYXNlLmdldERlZmF1bHRTY2hlbWEoKTsKLQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0JCQlpZiAoc2NoZW1hLnRhYmxlc1NpemUoKSA+IDApIHsKLQkJCQlUYWJsZSB0YWJsZSA9IHNjaGVtYS50YWJsZXMoKS5uZXh0KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSh0YWJsZS5jb2x1bW5zU2l6ZSgpID49IDApOwotCQkJCWFzc2VydFRydWUodGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkgPj0gMCk7Ci0JCQkJYXNzZXJ0VHJ1ZSh0YWJsZS5mb3JlaWduS2V5c1NpemUoKSA+PSAwKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGV4ZWN1dGVPZmZsaW5lVGVzdHMoKTsKLQotCXB1YmxpYyBmaW5hbCB2b2lkIHRlc3RPZmZsaW5lKCkgewotCQlpZiAoICEgdGhpcy5leGVjdXRlT2ZmbGluZVRlc3RzKCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoICEgdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5zdXBwb3J0c1dvcmtPZmZsaW5lTW9kZSgpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQl0aGlzLnByZXBhcmVGb3JPZmZsaW5lV29yaygpOwotCi0JCUlTdGF0dXMgc3RhdHVzID0gdGhpcy5jb25uZWN0aW9uUHJvZmlsZS53b3JrT2ZmbGluZSgpOwotCQlhc3NlcnRUcnVlKHN0YXR1cy5pc09LKCkpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5pc1dvcmtpbmdPZmZsaW5lKCkpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuaXNJbmFjdGl2ZSgpKTsKLQkJYXNzZXJ0VHJ1ZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmlzRGlzY29ubmVjdGVkKCkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHByZXBhcmVGb3JPZmZsaW5lV29yaygpIHsKLQkJaWYgKCAhIHRoaXMuY29ubmVjdGlvblByb2ZpbGUuY2FuV29ya09mZmxpbmUoKSkgewotCQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCQlJU3RhdHVzIHN0YXR1cyA9IHRoaXMuY29ubmVjdGlvblByb2ZpbGUuc2F2ZVdvcmtPZmZsaW5lRGF0YSgpOwotCQkJYXNzZXJ0VHJ1ZShzdGF0dXMuaXNPSygpKTsKLQkJCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCQkJYXNzZXJ0VHJ1ZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNhbldvcmtPZmZsaW5lKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbm5lY3Rpb25MaXN0ZW5lckNvbm5lY3QoKSB7Ci0JCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZUhhc05vTGlzdGVuZXJzKCkpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGVIYXNBbnlMaXN0ZW5lcnMoKSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCWFzc2VydFNhbWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZSwgbGlzdGVuZXIub3BlbmVkUHJvZmlsZSk7Ci0JCWxpc3RlbmVyLmNsZWFyKCk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JCWFzc2VydFNhbWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZSwgbGlzdGVuZXIub2tUb0Nsb3NlUHJvZmlsZSk7Ci0JCWFzc2VydFNhbWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZSwgbGlzdGVuZXIuYWJvdXRUb0Nsb3NlUHJvZmlsZSk7Ci0JCWFzc2VydFNhbWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZSwgbGlzdGVuZXIuY2xvc2VkUHJvZmlsZSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGVIYXNOb0xpc3RlbmVycygpKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0Q29ubmVjdGlvbkxpc3RlbmVyT2ZmbGluZSgpIHsKLQkJaWYgKCAhIHRoaXMuZXhlY3V0ZU9mZmxpbmVUZXN0cygpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLnByZXBhcmVGb3JPZmZsaW5lV29yaygpOwotCQlsaXN0ZW5lci5jbGVhcigpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUud29ya09mZmxpbmUoKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLCBsaXN0ZW5lci5vcGVuZWRQcm9maWxlKTsKLQkJbGlzdGVuZXIuY2xlYXIoKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLCBsaXN0ZW5lci5va1RvQ2xvc2VQcm9maWxlKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLCBsaXN0ZW5lci5hYm91dFRvQ2xvc2VQcm9maWxlKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLCBsaXN0ZW5lci5jbG9zZWRQcm9maWxlKTsKLQkJbGlzdGVuZXIuY2xlYXIoKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbm5lY3Rpb25MaXN0ZW5lckRhdGFiYXNlKCkgewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCksIGxpc3RlbmVyLmNoYW5nZWREYXRhYmFzZSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdGlvbkxpc3RlbmVyQ2F0YWxvZygpIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCWlmICggISB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCkuc3VwcG9ydHNDYXRhbG9ncygpKSB7Ci0JCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQkJCXJldHVybjsKLQkJfQotCQkJCi0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJLy8gdGFrZSB0aGUgZmlyc3QgY2F0YWxvZwotCQlvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZyBkdHBDYXRhbG9nID0gdGhpcy5nZXRGaXJzdERUUENhdGFsb2coKTsKLQkJQ2F0YWxvZyBjYXRhbG9nID0gdGhpcy5nZXRDYXRhbG9nTmFtZWQoZHRwQ2F0YWxvZy5nZXROYW1lKCkpOwotCQkoKElDYXRhbG9nT2JqZWN0KSBkdHBDYXRhbG9nKS5yZWZyZXNoKCk7Ci0JCWFzc2VydFNhbWUoY2F0YWxvZywgbGlzdGVuZXIuY2hhbmdlZENhdGFsb2cpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbm5lY3Rpb25MaXN0ZW5lclNjaGVtYSgpIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJTGlzdDxvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuQ2F0YWxvZz4gZHRwQ2F0YWxvZ3MgPSB0aGlzLmdldERUUENhdGFsb2dzKCk7Ci0JCW9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGR0cENhdGFsb2cgPSBudWxsOwotCQlvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hIGR0cFNjaGVtYSA9IG51bGw7Ci0JCVNjaGVtYSBzY2hlbWEgPSBudWxsOwotCQlpZiAodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXREYXRhYmFzZSgpLnN1cHBvcnRzQ2F0YWxvZ3MoKSkgewotCQkJZHRwQ2F0YWxvZyA9IGR0cENhdGFsb2dzLmdldCgwKTsKLQkJCWR0cFNjaGVtYSA9IChvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hKSBkdHBDYXRhbG9nLmdldFNjaGVtYXMoKS5nZXQoMCk7Ci0JCQlzY2hlbWEgPSB0aGlzLmdldENhdGFsb2dOYW1lZChkdHBDYXRhbG9nLmdldE5hbWUoKSkuZ2V0U2NoZW1hTmFtZWQoZHRwU2NoZW1hLmdldE5hbWUoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZHRwQ2F0YWxvZ3MuaXNFbXB0eSgpKSB7Ci0JCQkJZHRwU2NoZW1hID0gKG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKS5nZXRTY2hlbWFzKCkuZ2V0KDApOwotCQkJCXNjaGVtYSA9IHRoaXMuY29ubmVjdGlvblByb2ZpbGUuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZChkdHBTY2hlbWEuZ2V0TmFtZSgpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHRwQ2F0YWxvZyA9IGR0cENhdGFsb2dzLmdldCgwKTsgIC8vIHNob3VsZCBiZSB0aGUgInZpcnR1YWwiIGNhdGFsb2cKLQkJCQlhc3NlcnRFcXVhbHMoIiIsIGR0cENhdGFsb2cuZ2V0TmFtZSgpKTsKLQkJCQlkdHBTY2hlbWEgPSAob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLlNjaGVtYSkgZHRwQ2F0YWxvZy5nZXRTY2hlbWFzKCkuZ2V0KDApOwotCQkJCS8vIHRoZSBzY2hlbWF0YSBhcmUgaGVsZCBkaXJlY3RseSBieSB0aGUgZGF0YWJhc2UgaW4gdGhpcyBzaXR1YXRpb24KLQkJCQlzY2hlbWEgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoZHRwU2NoZW1hLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShzY2hlbWEudGFibGVzU2l6ZSgpID49IDApOyAgLy8gZm9yY2UgdGFibGVzIHRvIGJlIGxvYWRlZAotCQkoKElDYXRhbG9nT2JqZWN0KSBkdHBTY2hlbWEpLnJlZnJlc2goKTsKLQkJYXNzZXJ0U2FtZShzY2hlbWEsIGxpc3RlbmVyLmNoYW5nZWRTY2hlbWEpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN1cHBvcnRzQ2F0YWxvZ3MoKSB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCWJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncyA9IHRoaXMuc3VwcG9ydHNDYXRhbG9ncygpOwotCQlhc3NlcnRFcXVhbHMoc3VwcG9ydHNDYXRhbG9ncywgdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXREYXRhYmFzZSgpLnN1cHBvcnRzQ2F0YWxvZ3MoKSk7Ci0JCWlmIChzdXBwb3J0c0NhdGFsb2dzKSB7Ci0JCQlhc3NlcnRUcnVlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuZ2V0RGF0YWJhc2UoKS5jYXRhbG9nc1NpemUoKSA+IDApOwotCQkJYXNzZXJ0RXF1YWxzKDAsIHRoaXMuY29ubmVjdGlvblByb2ZpbGUuZ2V0RGF0YWJhc2UoKS5zY2hlbWF0YVNpemUoKSk7Ci0JCX0gZWxzZSB7Ci0JCQlhc3NlcnRFcXVhbHMoMCwgdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXREYXRhYmFzZSgpLmNhdGFsb2dzU2l6ZSgpKTsKLQkJCWFzc2VydFRydWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXREYXRhYmFzZSgpLnNjaGVtYXRhU2l6ZSgpID4gMCk7Ci0JCX0KLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIHN1cHBvcnRzQ2F0YWxvZ3MoKTsKLQotLy8JcHVibGljIHZvaWQgdGVzdERFQlVHKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0vLwkJdGhpcy5kdW1wSkRCQ0NhdGFsb2dzKCk7Ci0vLwkJdGhpcy5kdW1wSkRCQ1NjaGVtYXRhKCk7Ci0vLwkJdGhpcy5kdW1wRGF0YWJhc2VDb250YWluZXJzKCk7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0vLwl9Ci0KLQotCS8vICoqKioqKioqKiogY29udmVuaWVuY2UgbWV0aG9kcyAqKioqKioqKioqCi0KLQlwcm90ZWN0ZWQgQ29ubmVjdGlvblByb2ZpbGVGYWN0b3J5IGdldENvbm5lY3Rpb25Qcm9maWxlRmFjdG9yeSgpIHsKLQkJcmV0dXJuIEpwdERiUGx1Z2luLmluc3RhbmNlKCkuZ2V0Q29ubmVjdGlvblByb2ZpbGVGYWN0b3J5KCk7Ci0JfQotCi0JcHJvdGVjdGVkIENvbm5lY3Rpb25Qcm9maWxlIGdldENvbm5lY3Rpb25Qcm9maWxlKCkgewotCQlyZXR1cm4gdGhpcy5jb25uZWN0aW9uUHJvZmlsZTsKLQl9Ci0KLQlwcm90ZWN0ZWQgRGF0YWJhc2UgZ2V0RGF0YWJhc2UoKSB7Ci0JCXJldHVybiB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIENhdGFsb2cgZ2V0RGVmYXVsdENhdGFsb2coKSB7Ci0JCXJldHVybiB0aGlzLmdldERhdGFiYXNlKCkuZ2V0RGVmYXVsdENhdGFsb2coKTsKLQl9Ci0KLQkvKioKLQkgKiBvbmx5IHZhbGlkIG9uIGRhdGFiYXNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGNhdGFsb2dzCi0JICovCi0JcHJvdGVjdGVkIFNjaGVtYSBnZXREZWZhdWx0U2NoZW1hKCkgewotCQlyZXR1cm4gdGhpcy5nZXREYXRhYmFzZSgpLmdldERlZmF1bHRTY2hlbWEoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgQ2F0YWxvZyBnZXRDYXRhbG9nTmFtZWQoU3RyaW5nIGNhdGFsb2dOYW1lKSB7Ci0JCXJldHVybiB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKGNhdGFsb2dOYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFJlcXVpcmVkUGxhdGZvcm1Qcm9wZXJ0eShTdHJpbmcgcHJvcGVydHlLZXkpIHsKLQkJU3RyaW5nIHByb3BlcnR5VmFsdWUgPSB0aGlzLnBsYXRmb3JtUHJvcGVydGllcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7Ci0JCWlmIChTdHJpbmdUb29scy5zdHJpbmdJc0VtcHR5KHByb3BlcnR5VmFsdWUpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YWJhc2UgcGxhdGZvcm0gcHJvcGVydGllcyBmaWxlICciICsgdGhpcy5nZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlUGF0aCgpCi0JCQkJCSsgIicgaXMgbWlzc2luZyBhIHZhbHVlIGZvciB0aGUgcHJvcGVydHkgJyIgKyBwcm9wZXJ0eUtleSArICInLiIpOwotCQl9Ci0JCXJldHVybiBwcm9wZXJ0eVZhbHVlOwotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIGNvbm5lY3Rpb25Qcm9maWxlSGFzQW55TGlzdGVuZXJzKCkgewotCQlyZXR1cm4gY29ubmVjdGlvblByb2ZpbGVIYXNBbnlMaXN0ZW5lcnModGhpcy5jb25uZWN0aW9uUHJvZmlsZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGNvbm5lY3Rpb25Qcm9maWxlSGFzQW55TGlzdGVuZXJzKENvbm5lY3Rpb25Qcm9maWxlIGNwKSB7Ci0JCXJldHVybiAoKEJvb2xlYW4pIENsYXNzVG9vbHMuZXhlY3V0ZU1ldGhvZChjcCwgImhhc0FueUxpc3RlbmVycyIpKS5ib29sZWFuVmFsdWUoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBjb25uZWN0aW9uUHJvZmlsZUhhc05vTGlzdGVuZXJzKCkgewotCQlyZXR1cm4gY29ubmVjdGlvblByb2ZpbGVIYXNOb0xpc3RlbmVycyh0aGlzLmNvbm5lY3Rpb25Qcm9maWxlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gY29ubmVjdGlvblByb2ZpbGVIYXNOb0xpc3RlbmVycyhDb25uZWN0aW9uUHJvZmlsZSBjcCkgewotCQlyZXR1cm4gKChCb29sZWFuKSBDbGFzc1Rvb2xzLmV4ZWN1dGVNZXRob2QoY3AsICJoYXNOb0xpc3RlbmVycyIpKS5ib29sZWFuVmFsdWUoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogRFRQIG1vZGVsICoqKioqKioqKioKLQotCXByb3RlY3RlZCBQcm9maWxlTWFuYWdlciBnZXREVFBQcm9maWxlTWFuYWdlcigpIHsKLQkJcmV0dXJuIFByb2ZpbGVNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElDb25uZWN0aW9uUHJvZmlsZSBnZXREVFBDb25uZWN0aW9uUHJvZmlsZSgpIHsKLQkJcmV0dXJuIGdldERUUENvbm5lY3Rpb25Qcm9maWxlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSUNvbm5lY3Rpb25Qcm9maWxlIGdldERUUENvbm5lY3Rpb25Qcm9maWxlKENvbm5lY3Rpb25Qcm9maWxlIGNwKSB7Ci0JCXJldHVybiAoSUNvbm5lY3Rpb25Qcm9maWxlKSBDbGFzc1Rvb2xzLmZpZWxkVmFsdWUoY3AsICJkdHBDb25uZWN0aW9uUHJvZmlsZSIpOwotCX0KLQotCXByb3RlY3RlZCBJTWFuYWdlZENvbm5lY3Rpb24gZ2V0RFRQTWFuYWdlZENvbm5lY3Rpb24oKSB7Ci0JCXJldHVybiAoSU1hbmFnZWRDb25uZWN0aW9uKSBDbGFzc1Rvb2xzLmZpZWxkVmFsdWUodGhpcy5jb25uZWN0aW9uUHJvZmlsZSwgImR0cE1hbmFnZWRDb25uZWN0aW9uIik7Ci0JfQotCi0JcHJvdGVjdGVkIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5EYXRhYmFzZSBnZXREVFBEYXRhYmFzZSgpIHsKLQkJcmV0dXJuIGdldERUUERhdGFiYXNlKHRoaXMuY29ubmVjdGlvblByb2ZpbGUuZ2V0RGF0YWJhc2UoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2UgZ2V0RFRQRGF0YWJhc2UoRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJcmV0dXJuIChvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuRGF0YWJhc2UpIENsYXNzVG9vbHMuZmllbGRWYWx1ZShkYXRhYmFzZSwgImR0cERhdGFiYXNlIik7Ci0JfQotCi0JQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJvdGVjdGVkIExpc3Q8b3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkNhdGFsb2c+IGdldERUUENhdGFsb2dzKCkgewotCQlyZXR1cm4gdGhpcy5nZXREVFBEYXRhYmFzZSgpLmdldENhdGFsb2dzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGdldEZpcnN0RFRQQ2F0YWxvZygpIHsKLQkJcmV0dXJuIHRoaXMuZ2V0RFRQQ2F0YWxvZ3MoKS5nZXQoMCk7Ci0JfQotCi0JcHJvdGVjdGVkIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGdldERUUENhdGFsb2dOYW1lZChTdHJpbmcgbmFtZSkgewotCQlyZXR1cm4gZ2V0RFRQQ2F0YWxvZyh0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKG5hbWUpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5DYXRhbG9nIGdldERUUENhdGFsb2coQ2F0YWxvZyBjYXRhbG9nKSB7Ci0JCXJldHVybiAob3JnLmVjbGlwc2UuZGF0YXRvb2xzLm1vZGVsYmFzZS5zcWwuc2NoZW1hLkNhdGFsb2cpIENsYXNzVG9vbHMuZmllbGRWYWx1ZShjYXRhbG9nLCAiZHRwQ2F0YWxvZyIpOwotCX0KLQotCXByb3RlY3RlZCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hIGdldERUUFNjaGVtYU5hbWVkKFN0cmluZyBuYW1lKSB7Ci0JCXJldHVybiBnZXREVFBTY2hlbWEodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKG5hbWUpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIG9yZy5lY2xpcHNlLmRhdGF0b29scy5tb2RlbGJhc2Uuc3FsLnNjaGVtYS5TY2hlbWEgZ2V0RFRQU2NoZW1hKFNjaGVtYSBzY2hlbWEpIHsKLQkJcmV0dXJuIChvcmcuZWNsaXBzZS5kYXRhdG9vbHMubW9kZWxiYXNlLnNxbC5zY2hlbWEuU2NoZW1hKSBDbGFzc1Rvb2xzLmZpZWxkVmFsdWUoc2NoZW1hLCAiZHRwU2NoZW1hIik7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGV4ZWN1dGUgU1FMICoqKioqKioqKioKLQotCS8qKgotCSAqIGlnbm9yZSBhbnkgZXJyb3JzICh1c2VmdWwgZm9yIGRyb3BwaW5nIGRhdGFiYXNlIG9iamVjdHMgdGhhdCBtaWdodAotCSAqIG5vdCBiZSB0aGVyZSkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlVXBkYXRlSWdub3JlRXJyb3JzKFN0cmluZyBzcWwpIHsKLQkJdHJ5IHsKLQkJCXRoaXMuZXhlY3V0ZVVwZGF0ZShzcWwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLS8vCQkJU3lzdGVtLmVyci5wcmludGxuKCJTUUw6ICIgKyBzcWwpOwotLy8JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGVVcGRhdGUoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCVN0YXRlbWVudCBqZGJjU3RhdGVtZW50ID0gdGhpcy5jcmVhdGVKREJDU3RhdGVtZW50KCk7Ci0JCXRyeSB7Ci0JCQlqZGJjU3RhdGVtZW50LmV4ZWN1dGVVcGRhdGUoc3FsKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWpkYmNTdGF0ZW1lbnQuY2xvc2UoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGR1bXAoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZHVtcChzcWwsIDIwKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wKFN0cmluZyBzcWwsIGludCBjb2x1bW5XaWR0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCUluZGVudGluZ1ByaW50V3JpdGVyIHB3ID0gbmV3IEluZGVudGluZ1ByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCkpOwotCQkvLyBzeW5jaHJvbml6ZSB0aGUgY29uc29sZSBzbyBldmVyeXRoaW5nIGlzIGNvbnRpZ3VvdXMKLQkJc3luY2hyb25pemVkIChTeXN0ZW0ub3V0KSB7Ci0JCQl0aGlzLmR1bXBPbihzcWwsIHB3LCBjb2x1bW5XaWR0aCk7Ci0JCX0KLQkJcHcuZmx1c2goKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wT24oU3RyaW5nIHNxbCwgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcsIGludCBjb2x1bW5XaWR0aCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCXB3LnByaW50bG4oc3FsKTsKLQkJZm9yIChBcnJheUxpc3Q8T2JqZWN0PiByb3cgOiB0aGlzLmV4ZWN1dGUoc3FsKSkgewotCQkJZm9yIChPYmplY3QgY29sdW1uVmFsdWUgOiByb3cpIHsKLQkJCQlTdHJpbmdUb29scy5wYWRPclRydW5jYXRlT24oU3RyaW5nLnZhbHVlT2YoY29sdW1uVmFsdWUpLCBjb2x1bW5XaWR0aCwgcHcpOwotCQkJCXB3LnByaW50KCcgJyk7Ci0JCQl9Ci0JCQlwdy5wcmludGxuKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgQXJyYXlMaXN0PEFycmF5TGlzdDxPYmplY3Q+PiBleGVjdXRlKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlTdGF0ZW1lbnQgamRiY1N0YXRlbWVudCA9IHRoaXMuY3JlYXRlSkRCQ1N0YXRlbWVudCgpOwotCQlqZGJjU3RhdGVtZW50LmV4ZWN1dGUoc3FsKTsKLQkJQXJyYXlMaXN0PEFycmF5TGlzdDxPYmplY3Q+PiByb3dzID0gdGhpcy5idWlsZFJvd3MoamRiY1N0YXRlbWVudC5nZXRSZXN1bHRTZXQoKSk7Ci0JCWpkYmNTdGF0ZW1lbnQuY2xvc2UoKTsKLQkJcmV0dXJuIHJvd3M7Ci0JfQotCi0JcHJvdGVjdGVkIEFycmF5TGlzdDxBcnJheUxpc3Q8T2JqZWN0Pj4gYnVpbGRSb3dzKFJlc3VsdFNldCByZXN1bHRTZXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlBcnJheUxpc3Q8QXJyYXlMaXN0PE9iamVjdD4+IHJvd3MgPSBuZXcgQXJyYXlMaXN0PEFycmF5TGlzdDxPYmplY3Q+PigpOwotCQlmb3IgKEl0ZXJhdG9yPEFycmF5TGlzdDxPYmplY3Q+PiBzdHJlYW0gPSB0aGlzLmJ1aWxkQXJyYXlJdGVyYXRvcihyZXN1bHRTZXQpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXJvd3MuYWRkKHN0cmVhbS5uZXh0KCkpOwotCQl9Ci0JCXJldHVybiByb3dzOwotCX0KLQotCXByb3RlY3RlZCBJdGVyYXRvcjxBcnJheUxpc3Q8T2JqZWN0Pj4gYnVpbGRBcnJheUl0ZXJhdG9yKFJlc3VsdFNldCByZXN1bHRTZXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFJlc3VsdFNldEl0ZXJhdG9yPEFycmF5TGlzdDxPYmplY3Q+PihyZXN1bHRTZXQsIG5ldyBMaXN0UmVzdWx0U2V0SXRlcmF0b3JBZGFwdGVyKHJlc3VsdFNldC5nZXRNZXRhRGF0YSgpLmdldENvbHVtbkNvdW50KCkpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIExpc3RSZXN1bHRTZXRJdGVyYXRvckFkYXB0ZXIgaW1wbGVtZW50cyBSZXN1bHRTZXRJdGVyYXRvci5BZGFwdGVyPEFycmF5TGlzdDxPYmplY3Q+PiB7Ci0JCXByaXZhdGUgZmluYWwgaW50IGNvbHVtbkNvdW50OwotCQlwdWJsaWMgTGlzdFJlc3VsdFNldEl0ZXJhdG9yQWRhcHRlcihpbnQgY29sdW1uQ291bnQpIHsKLQkJCXN1cGVyKCk7Ci0JCQl0aGlzLmNvbHVtbkNvdW50ID0gY29sdW1uQ291bnQ7Ci0JCX0KLQkJcHVibGljIEFycmF5TGlzdDxPYmplY3Q+IGJ1aWxkTmV4dChSZXN1bHRTZXQgcnMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQkJQXJyYXlMaXN0PE9iamVjdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0Pih0aGlzLmNvbHVtbkNvdW50KTsKLQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IHRoaXMuY29sdW1uQ291bnQ7IGkrKykgeyAgLy8gTkI6IFJlc3VsdFNldCBpbmRleC9zdWJzY3JpcHQgaXMgMS1iYXNlZAotCQkJCWxpc3QuYWRkKHJzLmdldE9iamVjdChpKSk7Ci0JCQl9Ci0JCQlyZXR1cm4gbGlzdDsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBTdGF0ZW1lbnQgY3JlYXRlSkRCQ1N0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlyZXR1cm4gdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLmNyZWF0ZVN0YXRlbWVudCgpOwotCX0KLQotCXByb3RlY3RlZCBDb25uZWN0aW9uIGdldEpEQkNDb25uZWN0aW9uKCkgewotCQlyZXR1cm4gKChDb25uZWN0aW9uSW5mbykgdGhpcy5nZXREVFBNYW5hZ2VkQ29ubmVjdGlvbigpLmdldENvbm5lY3Rpb24oKS5nZXRSYXdDb25uZWN0aW9uKCkpLmdldFNoYXJlZENvbm5lY3Rpb24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgRGF0YWJhc2VNZXRhRGF0YSBnZXREYXRhYmFzZU1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCXJldHVybiB0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogZHVtcCBEVFAgbWV0YWRhdGEgKioqKioqKioqKgotCi0JLyoqCi0JICogZHVtcCBhbGwgdGhlIGRhdGFiYXNlIG1ldGFkYXRhIHRvIHRoZSBjb25zb2xlCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgZHVtcERhdGFiYXNlKCkgewotCQl0aGlzLmR1bXBEYXRhYmFzZSh0cnVlKTsKLQl9Ci0KLQkvKioKLQkgKiBkdW1wIHRoZSBkYXRhYmFzZSBjYXRhbG9ncyBhbmQgc2NoZW1hdGEgdG8gdGhlIGNvbnNvbGUKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wRGF0YWJhc2VDb250YWluZXJzKCkgewotCQl0aGlzLmR1bXBEYXRhYmFzZShmYWxzZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZHVtcERhdGFiYXNlKGJvb2xlYW4gZGVlcCkgewotCQlJbmRlbnRpbmdQcmludFdyaXRlciBwdyA9IG5ldyBJbmRlbnRpbmdQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKFN5c3RlbS5vdXQpKTsKLQkJLy8gc3luY2hyb25pemUgdGhlIGNvbnNvbGUgc28gZXZlcnl0aGluZyBpcyBjb250aWd1b3VzCi0JCXN5bmNocm9uaXplZCAoU3lzdGVtLm91dCkgewotCQkJdGhpcy5kdW1wRGF0YWJhc2VPbihwdywgZGVlcCk7Ci0JCX0KLQkJcHcuZmx1c2goKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wRGF0YWJhc2VPbihJbmRlbnRpbmdQcmludFdyaXRlciBwdywgYm9vbGVhbiBkZWVwKSB7Ci0JCURhdGFiYXNlIGRhdGFiYXNlID0gdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXREYXRhYmFzZSgpOwotCQlwdy5wcmludCgiZGF0YWJhc2U6ICIpOwotCQlwdy5wcmludGxuKGRhdGFiYXNlLmdldE5hbWUoKSk7Ci0JCWlmIChkYXRhYmFzZS5zdXBwb3J0c0NhdGFsb2dzKCkpIHsKLQkJCWZvciAoSXRlcmF0b3I8Q2F0YWxvZz4gc3RyZWFtID0gZGF0YWJhc2UuY2F0YWxvZ3MoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQkJdGhpcy5kdW1wQ2F0YWxvZ09uKHN0cmVhbS5uZXh0KCksIHB3LCBkZWVwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXRoaXMuZHVtcFNjaGVtYUNvbnRhaW5lck9uKGRhdGFiYXNlLCBwdywgZGVlcCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wQ2F0YWxvZ09uKENhdGFsb2cgY2F0YWxvZywgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcsIGJvb2xlYW4gZGVlcCkgewotCQlwdy5wcmludCgiY2F0YWxvZzogIik7Ci0JCXB3LnByaW50bG4oY2F0YWxvZy5nZXROYW1lKCkpOwotCQlwdy5pbmRlbnQoKTsKLQkJCXRoaXMuZHVtcFNjaGVtYUNvbnRhaW5lck9uKGNhdGFsb2csIHB3LCBkZWVwKTsKLQkJcHcudW5kZW50KCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZHVtcFNjaGVtYUNvbnRhaW5lck9uKFNjaGVtYUNvbnRhaW5lciBzY2hlbWFDb250YWluZXIsIEluZGVudGluZ1ByaW50V3JpdGVyIHB3LCBib29sZWFuIGRlZXApIHsKLQkJZm9yIChJdGVyYXRvcjxTY2hlbWE+IHN0cmVhbSA9IHNjaGVtYUNvbnRhaW5lci5zY2hlbWF0YSgpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCXRoaXMuZHVtcFNjaGVtYU9uKHN0cmVhbS5uZXh0KCksIHB3LCBkZWVwKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGR1bXBTY2hlbWEoU2NoZW1hIHNjaGVtYSkgewotCQl0aGlzLmR1bXBTY2hlbWEoc2NoZW1hLCB0cnVlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wU2NoZW1hKFNjaGVtYSBzY2hlbWEsIGJvb2xlYW4gZGVlcCkgewotCQlJbmRlbnRpbmdQcmludFdyaXRlciBwdyA9IG5ldyBJbmRlbnRpbmdQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKFN5c3RlbS5vdXQpKTsKLQkJLy8gc3luY2hyb25pemUgdGhlIGNvbnNvbGUgc28gZXZlcnl0aGluZyBpcyBjb250aWd1b3VzCi0JCXN5bmNocm9uaXplZCAoU3lzdGVtLm91dCkgewotCQkJdGhpcy5kdW1wU2NoZW1hT24oc2NoZW1hLCBwdywgZGVlcCk7Ci0JCX0KLQkJcHcuZmx1c2goKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wU2NoZW1hT24oU2NoZW1hIHNjaGVtYSwgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcsIGJvb2xlYW4gZGVlcCkgewotCQlwdy5wcmludCgic2NoZW1hOiAiKTsKLQkJcHcucHJpbnRsbihzY2hlbWEuZ2V0TmFtZSgpKTsKLQkJaWYgKGRlZXApIHsKLQkJCXB3LmluZGVudCgpOwotCQkJCWZvciAoSXRlcmF0b3I8VGFibGU+IHN0cmVhbSA9IHNjaGVtYS50YWJsZXMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQkJCXRoaXMuZHVtcFRhYmxlT24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQkJCX0KLQkJCQlmb3IgKEl0ZXJhdG9yPFNlcXVlbmNlPiBzdHJlYW0gPSBzY2hlbWEuc2VxdWVuY2VzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJCQl0aGlzLmR1bXBTZXF1ZW5jZU9uKHN0cmVhbS5uZXh0KCksIHB3KTsKLQkJCQl9Ci0JCQlwdy51bmRlbnQoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGR1bXBUYWJsZU9uKFRhYmxlIHRhYmxlLCBJbmRlbnRpbmdQcmludFdyaXRlciBwdykgewotCQlwdy5wcmludCgidGFibGU6ICIpOwotCQlwdy5wcmludGxuKHRhYmxlLmdldE5hbWUoKSk7Ci0JCXB3LmluZGVudCgpOwotCQkJZm9yIChJdGVyYXRvcjxDb2x1bW4+IHN0cmVhbSA9IHRhYmxlLmNvbHVtbnMoKTsgc3RyZWFtLmhhc05leHQoKTsgKSB7Ci0JCQkJdGhpcy5kdW1wQ29sdW1uT24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQkJfQotCQkJZm9yIChJdGVyYXRvcjxGb3JlaWduS2V5PiBzdHJlYW0gPSB0YWJsZS5mb3JlaWduS2V5cygpOyBzdHJlYW0uaGFzTmV4dCgpOyApIHsKLQkJCQl0aGlzLmR1bXBGb3JlaWduS2V5T24oc3RyZWFtLm5leHQoKSwgcHcpOwotCQkJfQotCQlwdy51bmRlbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wQ29sdW1uT24oQ29sdW1uIGNvbHVtbiwgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnQoImNvbHVtbjogIik7Ci0JCXB3LnByaW50KGNvbHVtbi5nZXROYW1lKCkpOwotCQlwdy5wcmludCgiIDogIik7Ci0JCXB3LnByaW50KGNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWlmIChjb2x1bW4uaXNQYXJ0T2ZQcmltYXJ5S2V5KCkpIHsKLQkJCXB3LnByaW50KCIgW3ByaW1hcnkga2V5XSIpOwotCQl9Ci0JCXB3LnByaW50bG4oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wRm9yZWlnbktleU9uKEZvcmVpZ25LZXkgZm9yZWlnbktleSwgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnQoImZvcmVpZ24ga2V5OiAiKTsKLQkJcHcucHJpbnQoZm9yZWlnbktleS5nZXROYW1lKCkpOwotCQlwdy5wcmludCgiPT4iKTsKLQkJcHcucHJpbnQoZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkVGFibGUoKS5nZXROYW1lKCkpOwotCQlwdy5wcmludCgiICgiKTsKLQkJZm9yIChJdGVyYXRvcjxDb2x1bW5QYWlyPiBzdHJlYW0gPSBmb3JlaWduS2V5LmNvbHVtblBhaXJzKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJQ29sdW1uUGFpciBjcCA9IHN0cmVhbS5uZXh0KCk7Ci0JCQlwdy5wcmludChjcC5nZXRCYXNlQ29sdW1uKCkuZ2V0TmFtZSgpKTsKLQkJCXB3LnByaW50KCI9PiIpOwotCQkJcHcucHJpbnQoY3AuZ2V0UmVmZXJlbmNlZENvbHVtbigpLmdldE5hbWUoKSk7Ci0JCQlpZiAoc3RyZWFtLmhhc05leHQoKSkgewotCQkJCXB3LnByaW50KCIsICIpOwotCQkJfQotCQl9Ci0JCXB3LnByaW50KCcpJyk7Ci0JCXB3LnByaW50bG4oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wU2VxdWVuY2VPbihTZXF1ZW5jZSBzZXF1ZW5jZSwgSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcpIHsKLQkJcHcucHJpbnQoInNlcXVlbmNlOiAiKTsKLQkJcHcucHJpbnRsbihzZXF1ZW5jZS5nZXROYW1lKCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBkdW1wIEpEQkMgbWV0YWRhdGEgKioqKioqKioqKgotCi0JcHJvdGVjdGVkIHZvaWQgZHVtcEpEQkNDYXRhbG9ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlJbmRlbnRpbmdQcmludFdyaXRlciBwdyA9IG5ldyBJbmRlbnRpbmdQcmludFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKFN5c3RlbS5vdXQpKTsKLQkJLy8gc3luY2hyb25pemUgdGhlIGNvbnNvbGUgc28gZXZlcnl0aGluZyBpcyBjb250aWd1b3VzCi0JCXN5bmNocm9uaXplZCAoU3lzdGVtLm91dCkgewotCQkJdGhpcy5kdW1wSkRCQ0NhdGFsb2dzT24ocHcpOwotCQl9Ci0JCXB3LmZsdXNoKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZHVtcEpEQkNDYXRhbG9nc09uKEluZGVudGluZ1ByaW50V3JpdGVyIHB3KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQkJcHcucHJpbnRsbigiSkRCQyBjYXRhbG9nczogIik7Ci0JCXB3LmluZGVudCgpOwotCQkJQXJyYXlMaXN0PEFycmF5TGlzdDxPYmplY3Q+PiByb3dzID0gdGhpcy5idWlsZFJvd3ModGhpcy5nZXREYXRhYmFzZU1ldGFEYXRhKCkuZ2V0Q2F0YWxvZ3MoKSk7Ci0JCQlmb3IgKEl0ZXJhdG9yPEFycmF5TGlzdDxPYmplY3Q+PiBzdHJlYW0gPSByb3dzLml0ZXJhdG9yKCk7IHN0cmVhbS5oYXNOZXh0KCk7ICkgewotCQkJCXB3LnByaW50bG4oc3RyZWFtLm5leHQoKS5nZXQoMCkpOwotCQkJfQotCQlwdy51bmRlbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wSkRCQ1NjaGVtYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCUluZGVudGluZ1ByaW50V3JpdGVyIHB3ID0gbmV3IEluZGVudGluZ1ByaW50V3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCkpOwotCQkvLyBzeW5jaHJvbml6ZSB0aGUgY29uc29sZSBzbyBldmVyeXRoaW5nIGlzIGNvbnRpZ3VvdXMKLQkJc3luY2hyb25pemVkIChTeXN0ZW0ub3V0KSB7Ci0JCQl0aGlzLmR1bXBKREJDU2NoZW1hdGFPbihwdyk7Ci0JCX0KLQkJcHcuZmx1c2goKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkdW1wSkRCQ1NjaGVtYXRhT24oSW5kZW50aW5nUHJpbnRXcml0ZXIgcHcpIHRocm93cyBTUUxFeGNlcHRpb24gewotCQlwdy5wcmludGxuKCJKREJDIHNjaGVtYXRhOiAiKTsKLQkJcHcuaW5kZW50KCk7Ci0JCQlBcnJheUxpc3Q8QXJyYXlMaXN0PE9iamVjdD4+IHJvd3MgPSB0aGlzLmJ1aWxkUm93cyh0aGlzLmdldERhdGFiYXNlTWV0YURhdGEoKS5nZXRTY2hlbWFzKCkpOwotCQkJZm9yIChBcnJheUxpc3Q8T2JqZWN0PiByb3cgOiByb3dzKSB7Ci0JCQkJaWYgKHJvdy5zaXplKCkgPT0gMikgeyAgLy8gY2F0YWxvZ3Mgd2VyZSBhZGRlZCBpbiBqZGsgMS40Ci0JCQkJCU9iamVjdCBjYXRhbG9nID0gcm93LmdldCgxKTsKLQkJCQkJcHcucHJpbnQoY2F0YWxvZyk7Ci0JCQkJCXB3LnByaW50KCcuJyk7Ci0JCQkJfQotCQkJCU9iamVjdCBzY2hlbWEgPSByb3cuZ2V0KDApOwotCQkJCXB3LnByaW50bG4oc2NoZW1hKTsKLQkJCX0KLQkJcHcudW5kZW50KCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIGNvbm5lY3Rpb24gcHJvZmlsZSBsaXN0ZW5lciAqKioqKioqKioqCi0KLQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRlc3RDb25uZWN0aW9uUHJvZmlsZUxpc3RlbmVyIGltcGxlbWVudHMgQ29ubmVjdGlvblByb2ZpbGVMaXN0ZW5lciB7Ci0JCXB1YmxpYyBTdHJpbmcgYWRkZWROYW1lOwotCQlwdWJsaWMgU3RyaW5nIHJlbW92ZWROYW1lOwotCQlwdWJsaWMgU3RyaW5nIHJlbmFtZWRPbGROYW1lOwotCQlwdWJsaWMgU3RyaW5nIHJlbmFtZWROZXdOYW1lOwotCi0JCXB1YmxpYyB2b2lkIGNvbm5lY3Rpb25Qcm9maWxlQWRkZWQoU3RyaW5nIG5hbWUpIHsKLQkJCXRoaXMuYWRkZWROYW1lID0gbmFtZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBjb25uZWN0aW9uUHJvZmlsZVJlbW92ZWQoU3RyaW5nIG5hbWUpIHsKLQkJCXRoaXMucmVtb3ZlZE5hbWUgPSBuYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGNvbm5lY3Rpb25Qcm9maWxlUmVuYW1lZChTdHJpbmcgb2xkTmFtZSwgU3RyaW5nIG5ld05hbWUpIHsKLQkJCXRoaXMucmVuYW1lZE9sZE5hbWUgPSBvbGROYW1lOwotCQkJdGhpcy5yZW5hbWVkTmV3TmFtZSA9IG5ld05hbWU7Ci0JCX0KLQkJcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0JCQl0aGlzLmFkZGVkTmFtZSA9IG51bGw7Ci0JCQl0aGlzLnJlbW92ZWROYW1lID0gbnVsbDsKLQkJCXRoaXMucmVuYW1lZE9sZE5hbWUgPSBudWxsOwotCQkJdGhpcy5yZW5hbWVkTmV3TmFtZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogY29ubmVjdGlvbiBsaXN0ZW5lciAqKioqKioqKioqCi0KLQlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRlc3RDb25uZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uTGlzdGVuZXIgewotCQlwdWJsaWMgQ29ubmVjdGlvblByb2ZpbGUgb3BlbmVkUHJvZmlsZTsKLQkJcHVibGljIENvbm5lY3Rpb25Qcm9maWxlIG1vZGlmaWVkUHJvZmlsZTsKLQkJcHVibGljIENvbm5lY3Rpb25Qcm9maWxlIG9rVG9DbG9zZVByb2ZpbGU7Ci0JCXB1YmxpYyBDb25uZWN0aW9uUHJvZmlsZSBhYm91dFRvQ2xvc2VQcm9maWxlOwotCQlwdWJsaWMgQ29ubmVjdGlvblByb2ZpbGUgY2xvc2VkUHJvZmlsZTsKLQkJcHVibGljIERhdGFiYXNlIGNoYW5nZWREYXRhYmFzZTsKLQkJcHVibGljIENhdGFsb2cgY2hhbmdlZENhdGFsb2c7Ci0JCXB1YmxpYyBTY2hlbWEgY2hhbmdlZFNjaGVtYTsKLQkJcHVibGljIFNlcXVlbmNlIGNoYW5nZWRTZXF1ZW5jZTsKLQkJcHVibGljIFRhYmxlIGNoYW5nZWRUYWJsZTsKLQkJcHVibGljIENvbHVtbiBjaGFuZ2VkQ29sdW1uOwotCQlwdWJsaWMgRm9yZWlnbktleSBjaGFuZ2VkRm9yZWlnbktleTsKLQotCQlwdWJsaWMgdm9pZCBvcGVuZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkJdGhpcy5vcGVuZWRQcm9maWxlID0gcHJvZmlsZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBtb2RpZmllZChDb25uZWN0aW9uUHJvZmlsZSBwcm9maWxlKSB7Ci0JCQl0aGlzLm1vZGlmaWVkUHJvZmlsZSA9IHByb2ZpbGU7Ci0JCX0KLQkJcHVibGljIGJvb2xlYW4gb2tUb0Nsb3NlKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUpIHsKLQkJCXRoaXMub2tUb0Nsb3NlUHJvZmlsZSA9IHByb2ZpbGU7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBhYm91dFRvQ2xvc2UoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkJdGhpcy5hYm91dFRvQ2xvc2VQcm9maWxlID0gcHJvZmlsZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBjbG9zZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSkgewotCQkJdGhpcy5jbG9zZWRQcm9maWxlID0gcHJvZmlsZTsKLQkJfQotCQlwdWJsaWMgdm9pZCBkYXRhYmFzZUNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgRGF0YWJhc2UgZGF0YWJhc2UpIHsKLQkJCXRoaXMuY2hhbmdlZERhdGFiYXNlID0gZGF0YWJhc2U7Ci0JCX0KLQkJcHVibGljIHZvaWQgY2F0YWxvZ0NoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgQ2F0YWxvZyBjYXRhbG9nKSB7Ci0JCQl0aGlzLmNoYW5nZWRDYXRhbG9nID0gY2F0YWxvZzsKLQkJfQotCQlwdWJsaWMgdm9pZCBzY2hlbWFDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIFNjaGVtYSBzY2hlbWEpIHsKLQkJCXRoaXMuY2hhbmdlZFNjaGVtYSA9IHNjaGVtYTsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXF1ZW5jZUNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgU2VxdWVuY2Ugc2VxdWVuY2UpIHsKLQkJCXRoaXMuY2hhbmdlZFNlcXVlbmNlID0gc2VxdWVuY2U7Ci0JCX0KLQkJcHVibGljIHZvaWQgdGFibGVDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIFRhYmxlIHRhYmxlKSB7Ci0JCQl0aGlzLmNoYW5nZWRUYWJsZSA9IHRhYmxlOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGNvbHVtbkNoYW5nZWQoQ29ubmVjdGlvblByb2ZpbGUgcHJvZmlsZSwgQ29sdW1uIGNvbHVtbikgewotCQkJdGhpcy5jaGFuZ2VkQ29sdW1uID0gY29sdW1uOwotCQl9Ci0JCXB1YmxpYyB2b2lkIGZvcmVpZ25LZXlDaGFuZ2VkKENvbm5lY3Rpb25Qcm9maWxlIHByb2ZpbGUsIEZvcmVpZ25LZXkgZm9yZWlnbktleSkgewotCQkJdGhpcy5jaGFuZ2VkRm9yZWlnbktleSA9IGZvcmVpZ25LZXk7Ci0JCX0KLQkJcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0JCQl0aGlzLm9wZW5lZFByb2ZpbGUgPSBudWxsOwotCQkJdGhpcy5tb2RpZmllZFByb2ZpbGUgPSBudWxsOwotCQkJdGhpcy5va1RvQ2xvc2VQcm9maWxlID0gbnVsbDsKLQkJCXRoaXMuYWJvdXRUb0Nsb3NlUHJvZmlsZSA9IG51bGw7Ci0JCQl0aGlzLmNsb3NlZFByb2ZpbGUgPSBudWxsOwotCQkJdGhpcy5jaGFuZ2VkRGF0YWJhc2UgPSBudWxsOwotCQkJdGhpcy5jaGFuZ2VkQ2F0YWxvZyA9IG51bGw7Ci0JCQl0aGlzLmNoYW5nZWRTY2hlbWEgPSBudWxsOwotCQkJdGhpcy5jaGFuZ2VkU2VxdWVuY2UgPSBudWxsOwotCQkJdGhpcy5jaGFuZ2VkVGFibGUgPSBudWxsOwotCQkJdGhpcy5jaGFuZ2VkQ29sdW1uID0gbnVsbDsKLQkJCXRoaXMuY2hhbmdlZEZvcmVpZ25LZXkgPSBudWxsOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL0RlcmJ5VGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvRGVyYnlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmFhY2Q4Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvRGVyYnlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzLmludGVybmFsLnBsYXRmb3JtczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuc3FtLmNvcmUucnRlLklDYXRhbG9nT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Db2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkZvcmVpZ25LZXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuVGFibGU7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIERlcmJ5VGVzdHMgZXh0ZW5kcyBEVFBQbGF0Zm9ybVRlc3RzIHsKLQotCXB1YmxpYyBEZXJieVRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFBsYXRmb3JtUHJvcGVydGllc0ZpbGVOYW1lKCkgewotCQlyZXR1cm4gImRlcmJ5LnByb3BlcnRpZXMiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyTmFtZSgpIHsKLQkJcmV0dXJuICJEZXJieSBFbWJlZGRlZCBKREJDIERyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uSUQoKSB7Ci0JCXJldHVybiAiRHJpdmVyRGVmbi5EZXJieSBFbWJlZGRlZCBKREJDIERyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uVHlwZSgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmRiLmRlcmJ5MTAxLmdlbmVyaWNEcml2ZXJUZW1wbGF0ZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlbmRvcigpIHsKLQkJcmV0dXJuICJEZXJieSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKSB7Ci0JCXJldHVybiAiMTAuMSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJDbGFzcygpIHsKLQkJcmV0dXJuICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWREcml2ZXIiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZmlsZU5hbWUoKSB7Ci0JCXJldHVybiAiRGVyYnlfMTAuMV9FbWJlZGRlZCI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9maWxlRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiRGVyYnkgMTAuMSBFbWJlZGRlZCBKREJDIFByb2ZpbGUgW1Rlc3RdIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb3ZpZGVySUQoKSB7Ci0JCXJldHVybiAib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5kYi5kZXJieS5lbWJlZGRlZC5jb25uZWN0aW9uUHJvZmlsZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVPZmZsaW5lVGVzdHMoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTY2hlbWEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wU2NoZW1hKCJURVNUMSIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRFU1QyIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFRFU1QxIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVNjaGVtYSBzY2hlbWExID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKCJURVNUMSIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBURVNUMiIpOwotCQlTY2hlbWEgc2NoZW1hMiA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiVEVTVDIiKTsKLQkJYXNzZXJ0TnVsbChzY2hlbWEyKTsgIC8vIHNob3VsZCBiZSBudWxsIHVudGlsIHJlZnJlc2gKLQotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQkJYXNzZXJ0U2FtZSh0aGlzLmdldERhdGFiYXNlKCksIGxpc3RlbmVyLmNoYW5nZWREYXRhYmFzZSk7Ci0KLQkJc2NoZW1hMiA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiVEVTVDIiKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEyKTsKLQkJYXNzZXJ0Tm90U2FtZShzY2hlbWExLCB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoIlRFU1QxIikpOyAgLy8gd2Ugc2hvdWxkIGhhdmUgYSBuZXcgc2NoZW1hIGFmdGVyIHRoZSByZWZyZXNoCi0KLQkJdGhpcy5kcm9wU2NoZW1hKCJURVNUMiIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRFU1QxIik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNjaGVtYUxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmRyb3BTY2hlbWEoIkxPT0tVUF9URVNUIik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiXCJsb29rdXBfVEVTVFwiIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBMT09LVVBfVEVTVCIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiTE9PS1VQX1RFU1QiKSk7Ci0JCWFzc2VydE5vdE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIkxPT0tVUF9URVNUIikpOwotCi0JCWFzc2VydE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKCJsb29rdXBfdGVzdCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigibG9va3VwX3Rlc3QiKSk7Ci0KLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoImxvb2t1cF9URVNUIikpOwotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJsb29rdXBfVEVTVCIpKTsKLQotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJcIkxPT0tVUF9URVNUXCIiKSk7Ci0JCWFzc2VydE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlwibG9va3VwX1RFU1RcIiIpKTsKLQotCQl0aGlzLmRyb3BTY2hlbWEoIkxPT0tVUF9URVNUIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFwibG9va3VwX1RFU1RcIiIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiTE9PS1VQX1RFU1QiKSk7Ci0JCWFzc2VydE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIkxPT0tVUF9URVNUIikpOwotCi0JCWFzc2VydE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKCJsb29rdXBfdGVzdCIpKTsKLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigibG9va3VwX3Rlc3QiKSk7Ci0KLQkJYXNzZXJ0Tm90TnVsbCh0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoImxvb2t1cF9URVNUIikpOwotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJsb29rdXBfVEVTVCIpKTsKLQotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJcIkxPT0tVUF9URVNUXCIiKSk7Ci0JCWFzc2VydE5vdE51bGwodGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlwibG9va3VwX1RFU1RcIiIpKTsKLQotCQl0aGlzLmRyb3BTY2hlbWEoIlwibG9va3VwX1RFU1RcIiIpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNjaGVtYUlkZW50aWZpZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wU2NoZW1hKCJMT09LVVBfVEVTVCIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlwibG9va3VwX1RFU1RcIiIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBsb29rdXBfdGVzdCIpOyAgLy8gdGhpcyBnZXRzIGZvbGRlZCB0byB1cHBlcmNhc2UKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFwibG9va3VwX1RFU1RcIiIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlTY2hlbWEgc2NoZW1hID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIkxPT0tVUF9URVNUIik7Ci0JCWFzc2VydEVxdWFscygiTE9PS1VQX1RFU1QiLCBzY2hlbWEuZ2V0SWRlbnRpZmllcigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJMT09LVVBfVEVTVCIsIHNjaGVtYS5nZXRJZGVudGlmaWVyKCJMb29rdXBUZXN0IikpOwotCQlhc3NlcnROdWxsKHNjaGVtYS5nZXRJZGVudGlmaWVyKCJMb29rdXBfVGVzdCIpKTsKLQotCQlzY2hlbWEgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigibG9va3VwX3Rlc3QiKTsKLQkJYXNzZXJ0RXF1YWxzKCJMT09LVVBfVEVTVCIsIHNjaGVtYS5nZXRJZGVudGlmaWVyKCkpOwotCi0JCXNjaGVtYSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJcImxvb2t1cF9URVNUXCIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJcImxvb2t1cF9URVNUXCIiLCBzY2hlbWEuZ2V0SWRlbnRpZmllcigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJcImxvb2t1cF9URVNUXCIiLCBzY2hlbWEuZ2V0SWRlbnRpZmllcigibG9va3VwX1RFU1QiKSk7Ci0KLQkJdGhpcy5kcm9wU2NoZW1hKCJcImxvb2t1cF9URVNUXCIiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJMT09LVVBfVEVTVCIpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkZPT19CQVoiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiQkFaIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkZPTyIpOwotCQl0aGlzLmRyb3BUYWJsZSgiVEFCTEVfVEVTVCIsICJCQVIiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJUQUJMRV9URVNUIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFRBQkxFX1RFU1QiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJTRVQgU0NIRU1BID0gVEFCTEVfVEVTVCIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkQmFyRERMKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEZvb0RETCgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRCYXpEREwoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkRm9vQmF6RERMKCkpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlTY2hlbWEgc2NoZW1hID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKCJUQUJMRV9URVNUIik7Ci0KLQkJLy8gRk9PCi0JCVRhYmxlIGZvb1RhYmxlID0gc2NoZW1hLmdldFRhYmxlTmFtZWQoIkZPTyIpOwotCQlhc3NlcnRFcXVhbHMoNCwgZm9vVGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0KLQkJQ29sdW1uIHBrQ29sdW1uID0gZm9vVGFibGUuZ2V0UHJpbWFyeUtleUNvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoIklEIiwgcGtDb2x1bW4uZ2V0TmFtZSgpKTsKLQkJQ29sdW1uIGlkQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uTmFtZWQoIklEIik7Ci0JCWFzc2VydFNhbWUocGtDb2x1bW4sIGlkQ29sdW1uKTsKLQkJYXNzZXJ0RXF1YWxzKCJJTlRFR0VSIiwgaWRDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRTYW1lKGZvb1RhYmxlLCBpZENvbHVtbi5nZXRUYWJsZSgpKTsKLQkJYXNzZXJ0VHJ1ZShpZENvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGlkQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbnQiLCBpZENvbHVtbi5nZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkpOwotCi0JCUNvbHVtbiBuYW1lQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uTmFtZWQoIk5BTUUiKTsKLQkJYXNzZXJ0RXF1YWxzKCJWQVJDSEFSIiwgbmFtZUNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YS5sYW5nLlN0cmluZyIsIG5hbWVDb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKDIwLCBuYW1lQ29sdW1uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RmFsc2UobmFtZUNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0JCWFzc2VydEZhbHNlKG5hbWVDb2x1bW4uaXNOdW1lcmljKCkpOwotCQlhc3NlcnRUcnVlKG5hbWVDb2x1bW4uaXNOdWxsYWJsZSgpKTsKLQotCQlDb2x1bW4gYmFyQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uTmFtZWQoIkJBUl9JRCIpOwotCQlhc3NlcnRFcXVhbHMoIklOVEVHRVIiLCBiYXJDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRUcnVlKGJhckNvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGJhckNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJQ29sdW1uIHNhbGFyeUNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbk5hbWVkKCJTQUxBUlkiKTsKLQkJYXNzZXJ0RXF1YWxzKCJERUNJTUFMIiwgc2FsYXJ5Q29sdW1uLmdldERhdGFUeXBlTmFtZSgpKTsKLQkJYXNzZXJ0VHJ1ZShzYWxhcnlDb2x1bW4uaXNOdWxsYWJsZSgpKTsKLQkJYXNzZXJ0VHJ1ZShzYWxhcnlDb2x1bW4uaXNOdW1lcmljKCkpOwotCQlhc3NlcnRFcXVhbHMoMTEsIHNhbGFyeUNvbHVtbi5nZXRQcmVjaXNpb24oKSk7Ci0JCWFzc2VydEVxdWFscygyLCBzYWxhcnlDb2x1bW4uZ2V0U2NhbGUoKSk7Ci0JCWFzc2VydEVxdWFscygtMSwgc2FsYXJ5Q29sdW1uLmdldExlbmd0aCgpKTsKLQotCQlGb3JlaWduS2V5IGJhckZLID0gZm9vVGFibGUuZm9yZWlnbktleXMoKS5uZXh0KCk7ICAvLyB0aGVyZSBzaG91bGQgb25seSBiZSAxIGZvcmVpZ24ga2V5Ci0JCWFzc2VydEVxdWFscygxLCBiYXJGSy5jb2x1bW5QYWlyc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygiQkFSIiwgYmFyRksuZ2V0QXR0cmlidXRlTmFtZSgpKTsKLQkJYXNzZXJ0TnVsbChiYXJGSy5nZXRKb2luQ29sdW1uQW5ub3RhdGlvbklkZW50aWZpZXIoImJhciIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJCQVJfSUQiLCBiYXJGSy5nZXRKb2luQ29sdW1uQW5ub3RhdGlvbklkZW50aWZpZXIoInByaW1hcnlCYXIiKSk7Ci0JCWFzc2VydFNhbWUoZm9vVGFibGUsIGJhckZLLmdldEJhc2VUYWJsZSgpKTsKLQotCQlhc3NlcnRGYWxzZShmb29UYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlhc3NlcnRTYW1lKHNjaGVtYSwgZm9vVGFibGUuZ2V0U2NoZW1hKCkpOwotCi0JCS8vIEJBUgotCQlUYWJsZSBiYXJUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJCQVIiKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGJhclRhYmxlLmNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgYmFyVGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgYmFyVGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIklEIiwgYmFyVGFibGUuZ2V0UHJpbWFyeUtleUNvbHVtbigpLmdldE5hbWUoKSk7Ci0JCWFzc2VydEZhbHNlKGJhclRhYmxlLmlzUG9zc2libGVKb2luVGFibGUoKSk7Ci0KLQkJQ29sdW1uIGlkMkNvbHVtbiA9IGJhclRhYmxlLmdldENvbHVtbk5hbWVkKCJJRDIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJJTlRFR0VSIiwgaWQyQ29sdW1uLmdldERhdGFUeXBlTmFtZSgpKTsKLS8vCQlhc3NlcnRUcnVlKGlkMkNvbHVtbi5pc1BhcnRPZlVuaXF1ZUNvbnN0cmFpbnQoKSk7ICAvLyBkb2Vzbid0IHdvcmsoPykKLQkJYXNzZXJ0RmFsc2UoaWQyQ29sdW1uLmlzTnVsbGFibGUoKSk7Ci0JCWFzc2VydFRydWUoaWQyQ29sdW1uLmlzTnVtZXJpYygpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGlkMkNvbHVtbi5nZXRQcmVjaXNpb24oKSk7ICAvLyBub3Qgc3VyZSB3aGF0IHRvIGV4cGVjdCBoZXJlLi4uCi0JCWFzc2VydEVxdWFscygwLCBpZDJDb2x1bW4uZ2V0U2NhbGUoKSk7ICAvLyBub3Qgc3VyZSB3aGF0IHRvIGV4cGVjdCBoZXJlIGVpdGhlci4uLgotCQlhc3NlcnRFcXVhbHMoIkJMT0IiLCBiYXJUYWJsZS5nZXRDb2x1bW5OYW1lZCgiQ0hVTksiKS5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiYnl0ZVtdIiwgYmFyVGFibGUuZ2V0Q29sdW1uTmFtZWQoIkNIVU5LIikuZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0VHJ1ZShiYXJUYWJsZS5nZXRDb2x1bW5OYW1lZCgiQ0hVTksiKS5pc0xPQigpKTsKLQkJYXNzZXJ0U2FtZShiYXJUYWJsZSwgYmFyRksuZ2V0UmVmZXJlbmNlZFRhYmxlKCkpOwotCi0JCS8vIEJBWgotCQlUYWJsZSBiYXpUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJCQVoiKTsKLQkJQ29sdW1uIG5pY2tuYW1lQ29sdW1uID0gYmF6VGFibGUuZ2V0Q29sdW1uTmFtZWQoIk5JQ0tOQU1FIik7Ci0JCWFzc2VydEVxdWFscygyMCwgbmlja25hbWVDb2x1bW4uZ2V0TGVuZ3RoKCkpOwotLy8JCWFzc2VydFRydWUobmlja25hbWVDb2x1bW4uaXNQYXJ0T2ZVbmlxdWVDb25zdHJhaW50KCkpOyAgLy8gZG9lc24ndCB3b3JrKD8pCi0KLQkJLy8gRk9PX0JBWgotCQlUYWJsZSBmb29fYmF6VGFibGUgPSBzY2hlbWEuZ2V0VGFibGVOYW1lZCgiRk9PX0JBWiIpOwotCQlhc3NlcnRFcXVhbHMoMiwgZm9vX2JhelRhYmxlLmNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgZm9vX2JhelRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGZvb19iYXpUYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0JCWFzc2VydFRydWUoZm9vX2JhelRhYmxlLmlzUG9zc2libGVKb2luVGFibGUoKSk7Ci0JCWFzc2VydFRydWUoZm9vX2JhelRhYmxlLmpvaW5UYWJsZU5hbWVJc0RlZmF1bHQoKSk7Ci0JCWFzc2VydFRydWUoZm9vX2JhelRhYmxlLmdldENvbHVtbk5hbWVkKCJGT09fSUQiKS5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiRk9PX0JBWiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiVEFCTEVfVEVTVCIsICJCQVoiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiRk9PIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkJBUiIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRBQkxFX1RFU1QiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgIC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkQmFyRERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgQkFSICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBJRCBJTlQgUFJJTUFSWSBLRVksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgSUQyIElOVCBVTklRVUUgTk9UIE5VTEwsIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgQ0hVTksgQkxPQigxMDBLKSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRm9vRERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgRk9PICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBJRCBJTlQgUFJJTUFSWSBLRVksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgTkFNRSBWQVJDSEFSKDIwKSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBTQUxBUlkgREVDSU1BTCgxMSwgMiksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgQkFSX0lEIElOVCBSRUZFUkVOQ0VTIEJBUihJRCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZEJhekRETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIEJBWiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgSUQgSU5UIFBSSU1BUlkgS0VZLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIE5JQ0tOQU1FIFZBUkNIQVIoMjApIE5PVCBOVUxMIFVOSVFVRSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRm9vQmF6RERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgRk9PX0JBWiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgRk9PX0lEIElOVCBSRUZFUkVOQ0VTIEZPTyhJRCksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgQkFaX0lEIElOVCBSRUZFUkVOQ0VTIEJBWihJRCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sdW1uTG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJDT0xVTU5fVEVTVCIsICJ0ZXN0Iik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiQ09MVU1OX1RFU1QiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgQ09MVU1OX1RFU1QiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJTRVQgU0NIRU1BID0gQ09MVU1OX1RFU1QiKTsKLQotCQkvLyBsb3dlcmNhc2UKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdCAoaWQgSU5URUdFUiwgbmFtZSBWQVJDSEFSKDIwKSkiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJVGFibGUgdGFibGUgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoIkNPTFVNTl9URVNUIikuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiaWQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigibmFtZSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgiQ09MVU1OX1RFU1QiLCAidGVzdCIpOwotCi0JCS8vIHVwcGVyY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChJRCBJTlRFR0VSLCBOQU1FIFZBUkNIQVIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiQ09MVU1OX1RFU1QiKS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJJRCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJOQU1FIikpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJDT0xVTU5fVEVTVCIsICJ0ZXN0Iik7Ci0KLQkJLy8gbWl4ZWQgY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChJZCBJTlRFR0VSLCBOYW1lIFZBUkNIQVIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiQ09MVU1OX1RFU1QiKS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJJZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJOYW1lIikpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJDT0xVTU5fVEVTVCIsICJ0ZXN0Iik7Ci0KLQkJLy8gZGVsaW1pdGVkCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIHRlc3QgKFwiSWRcIiBJTlRFR0VSLCBcIk5hbWVcIiBWQVJDSEFSKDIwKSkiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJdGFibGUgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoIkNPTFVNTl9URVNUIikuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiXCJJZFwiIikpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIlwiTmFtZVwiIikpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJDT0xVTU5fVEVTVCIsICJ0ZXN0Iik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiQ09MVU1OX1RFU1QiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcm9zc1NjaGVtYVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgiWFJFRl9URVNUMiIsICJFTVAiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJYUkVGX1RFU1QyIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJYUkVGX1RFU1QxIiwgIk9SRyIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlhSRUZfVEVTVDEiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgWFJFRl9URVNUMSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBTQ0hFTUEgPSBYUkVGX1RFU1QxIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIE9SRyAoSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgTkFNRSBWQVJDSEFSKDIwKSkiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgWFJFRl9URVNUMiIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBTQ0hFTUEgPSBYUkVGX1RFU1QyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIEVNUCAoSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgTkFNRSBWQVJDSEFSKDIwKSwgIiArCi0JCQkJIk9SR19JRCBJTlRFR0VSIFJFRkVSRU5DRVMgWFJFRl9URVNUMS5PUkcoSUQpKSIpOwotCi0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCQlTY2hlbWEgc2NoZW1hMSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiWFJFRl9URVNUMSIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCQlUYWJsZSBvcmdUYWJsZSA9IHNjaGVtYTEuZ2V0VGFibGVOYW1lZCgiT1JHIik7Ci0JCWFzc2VydE5vdE51bGwob3JnVGFibGUpOwotCi0JCVNjaGVtYSBzY2hlbWEyID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKCJYUkVGX1RFU1QyIik7Ci0JCWFzc2VydE5vdE51bGwoc2NoZW1hMik7Ci0JCVRhYmxlIGVtcFRhYmxlID0gc2NoZW1hMi5nZXRUYWJsZU5hbWVkKCJFTVAiKTsKLQkJYXNzZXJ0Tm90TnVsbChlbXBUYWJsZSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbXBUYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0JCUZvcmVpZ25LZXkgZmsgPSBlbXBUYWJsZS5mb3JlaWduS2V5cygpLm5leHQoKTsKLQkJVGFibGUgcmVmVGFibGUgPSBmay5nZXRSZWZlcmVuY2VkVGFibGUoKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWZUYWJsZSk7Ci0JCWFzc2VydEVxdWFscygiT1JHIiwgcmVmVGFibGUuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGZrLmNvbHVtblBhaXJzU2l6ZSgpKTsKLQkJRm9yZWlnbktleS5Db2x1bW5QYWlyIGNwID0gZmsuY29sdW1uUGFpcnMoKS5uZXh0KCk7Ci0JCUNvbHVtbiBiYXNlQ29sdW1uID0gY3AuZ2V0QmFzZUNvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoIk9SR19JRCIsIGJhc2VDb2x1bW4uZ2V0TmFtZSgpKTsKLQkJQ29sdW1uIHJlZkNvbHVtbiA9IGNwLmdldFJlZmVyZW5jZWRDb2x1bW4oKTsKLQkJYXNzZXJ0RXF1YWxzKCJJRCIsIHJlZkNvbHVtbi5nZXROYW1lKCkpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJYUkVGX1RFU1QyIiwgIkVNUCIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlhSRUZfVEVTVDIiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlhSRUZfVEVTVDEiLCAiT1JHIik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiWFJFRl9URVNUMSIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkcm9wVGFibGUoU3RyaW5nIHNjaGVtYU5hbWUsIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlTY2hlbWEgc2NoZW1hPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcihzY2hlbWFOYW1lKTsKLQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0JCQlpZiAoc2NoZW1hLmdldFRhYmxlRm9ySWRlbnRpZmllcih0YWJsZU5hbWUpICE9IG51bGwpIHsKLQkJCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkRST1AgVEFCTEUgIiArIHNjaGVtYU5hbWUgKyAnLicgKyB0YWJsZU5hbWUpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogTkI6IEEgRGVyYnkgc2NoZW1hIG11c3QgYmUgZW1wdHkgYmVmb3JlIGl0IGNhbiBiZSBkcm9wcGVkLgotCSAqLwotCXByaXZhdGUgdm9pZCBkcm9wU2NoZW1hKFN0cmluZyBuYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKG5hbWUpICE9IG51bGwpIHsKLQkJCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiRFJPUCBTQ0hFTUEgIiArIG5hbWUgKyAiIFJFU1RSSUNUIik7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvTXlTUUxUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9NeVNRTFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZTJkOGYuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9NeVNRTFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWwucGxhdGZvcm1zOwotCi1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmRyaXZlcnMuamRiYy5JSkRCQ0RyaXZlckRlZmluaXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5zcW0uY29yZS5ydGUuSUNhdGFsb2dPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5UYWJsZTsKLQotLyoqCi0gKiBNeVNRTAotICogCi0gKiBOb3RlczoKLSAqIC0gV2UgY2FuIG9ubHkgZ2V0IGRhdGFiYXNlIG9iamVjdHMgZnJvbSB0aGUgZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoIG91cgotICogICAgIGNvbm5lY3Rpb24gcHJvZmlsZS4KLSAqIC0gV2UgY2FuIHJlZmVyZW5jZSBvYmplY3RzIGFjcm9zcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHNvIHRoZXkgYXJlIHNvcnRhIGxpa2UKLSAqICAgICBzY2hlbWFzLi4uLgotICogLSBGb3JlaWduIGtleXMgbXVzdCBiZSBkZWZpbmVkIGFzIHRhYmxlLWxldmVsIGNvbnN0cmFpbnRzOyB0aGV5IGNhbm5vdCBiZQotICogICAgIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgY29sdW1uIGNsYXVzZS4KLSAqIC0gQ2FzZS1zZW5zaXRpdml0eSBhbmQgLWZvbGRpbmcgaXMgd2hhY2tlZCBvbiBNeVNRTC4uLi4KLSAqLwotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgY2xhc3MgTXlTUUxUZXN0cyBleHRlbmRzIERUUFBsYXRmb3JtVGVzdHMgewotCi0JcHVibGljIE15U1FMVGVzdHMoIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UGxhdGZvcm1Qcm9wZXJ0aWVzRmlsZU5hbWUoKSB7Ci0JCXJldHVybiAibXlzcWwucHJvcGVydGllcyI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJOYW1lKCkgewotCQlyZXR1cm4gIk15U1FMIEpEQkMgRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25JRCgpIHsKLQkJcmV0dXJuICJEcml2ZXJEZWZuLk15U1FMIEpEQkMgRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25UeXBlKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50Lm15c3FsLjRfMS5kcml2ZXJUZW1wbGF0ZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlbmRvcigpIHsKLQkJcmV0dXJuICJNeVNxbCI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKSB7Ci0JCXJldHVybiAiNC4xIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckNsYXNzKCkgewotCQlyZXR1cm4gImNvbS5teXNxbC5qZGJjLkRyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREZWZhdWx0SkRCQ1VSTCgpIHsKLQkJcmV0dXJuICJqZGJjOm15c3FsOi8vbG9jYWxob3N0OjMzMDYiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZmlsZU5hbWUoKSB7Ci0JCXJldHVybiAiTXlTUUxfNC4xIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuICJNeVNRTCA0LjEgSkRCQyBQcm9maWxlIFtUZXN0XSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBQcm9wZXJ0aWVzIGJ1aWxkRFRQQ29ubmVjdGlvblByb2ZpbGVQcm9wZXJ0aWVzKCkgewotCQlQcm9wZXJ0aWVzIHAgPSBzdXBlci5idWlsZERUUENvbm5lY3Rpb25Qcm9maWxlUHJvcGVydGllcygpOwotCQlwLnNldFByb3BlcnR5KElKREJDRHJpdmVyRGVmaW5pdGlvbkNvbnN0YW50cy5EQVRBQkFTRV9OQU1FX1BST1BfSUQsIHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCkpOwotCQlyZXR1cm4gcDsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7Ci0JCXJldHVybiAiZGFsaXRlc3QiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVPZmZsaW5lVGVzdHMoKSB7Ci0JCXJldHVybiB0cnVlOyAgLy8gc2VlbXMgdG8gd29yay4uLgotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REYXRhYmFzZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQkvLyBEVFA6IE15U1FMIGhhcyBhIHNpbmdsZSBzY2hlbWEgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYXRhYmFzZQotCQlTY2hlbWEgc2NoZW1hID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldFNjaGVtYU5hbWVkKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCkpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0JCWFzc2VydFNhbWUodGhpcy5nZXREZWZhdWx0U2NoZW1hKCksIHNjaGVtYSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wRGF0YWJhc2UodGhpcy5nZXREYXRhYmFzZU5hbWUoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIERBVEFCQVNFICIgKyB0aGlzLmdldERhdGFiYXNlTmFtZSgpKTsKLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2codGhpcy5nZXREYXRhYmFzZU5hbWUoKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgImZvb19iYXoiKTsKLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgImJheiIpOwotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAiZm9vIik7Ci0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJiYXIiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEJhckRETCgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRGb29EREwoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkQmF6RERMKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEZvb0JhekRETCgpKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJU2NoZW1hIHNjaGVtYSA9IHRoaXMuZ2V0RGVmYXVsdFNjaGVtYSgpOwotCi0JCS8vIGZvbwotCQlUYWJsZSBmb29UYWJsZSA9IHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJmb28iKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGZvb1RhYmxlLmNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZm9vVGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZm9vVGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCi0JCUNvbHVtbiBwa0NvbHVtbiA9IGZvb1RhYmxlLmdldFByaW1hcnlLZXlDb2x1bW4oKTsKLQkJYXNzZXJ0RXF1YWxzKCJpZCIsIHBrQ29sdW1uLmdldE5hbWUoKSk7Ci0JCUNvbHVtbiBpZENvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbk5hbWVkKCJpZCIpOwotCQlhc3NlcnRTYW1lKHBrQ29sdW1uLCBpZENvbHVtbik7Ci0JCWFzc2VydEVxdWFscygiSU5UIiwgaWRDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRTYW1lKGZvb1RhYmxlLCBpZENvbHVtbi5nZXRUYWJsZSgpKTsKLQkJYXNzZXJ0VHJ1ZShpZENvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGlkQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbnQiLCBpZENvbHVtbi5nZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkpOwotCi0JCUNvbHVtbiBuYW1lQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uTmFtZWQoIm5hbWUiKTsKLQkJYXNzZXJ0RXF1YWxzKCJWQVJDSEFSIiwgbmFtZUNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YS5sYW5nLlN0cmluZyIsIG5hbWVDb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0RmFsc2UobmFtZUNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJQ29sdW1uIGJhckNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbk5hbWVkKCJiYXJfaWQiKTsKLQkJYXNzZXJ0RXF1YWxzKCJJTlQiLCBiYXJDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRUcnVlKGJhckNvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGJhckNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJRm9yZWlnbktleSBiYXJGSyA9IGZvb1RhYmxlLmZvcmVpZ25LZXlzKCkubmV4dCgpOyAgLy8gdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBmb3JlaWduIGtleQotCQlhc3NlcnRFcXVhbHMoMSwgYmFyRksuY29sdW1uUGFpcnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoImJhciIsIGJhckZLLmdldEF0dHJpYnV0ZU5hbWUoKSk7Ci0JCWFzc2VydE51bGwoYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygiYmFyX2lkIiwgYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJwcmltYXJ5QmFyIikpOwotCQlhc3NlcnRTYW1lKGZvb1RhYmxlLCBiYXJGSy5nZXRCYXNlVGFibGUoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoZm9vVGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0U2FtZShzY2hlbWEsIGZvb1RhYmxlLmdldFNjaGVtYSgpKTsKLQotCQkvLyBCQVIKLQkJVGFibGUgYmFyVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVOYW1lZCgiYmFyIik7Ci0JCWFzc2VydEVxdWFscygyLCBiYXJUYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGJhclRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGJhclRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpZCIsIGJhclRhYmxlLmdldFByaW1hcnlLZXlDb2x1bW4oKS5nZXROYW1lKCkpOwotCQlhc3NlcnRGYWxzZShiYXJUYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoIkJMT0IiLCBiYXJUYWJsZS5nZXRDb2x1bW5OYW1lZCgiY2h1bmsiKS5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiYnl0ZVtdIiwgYmFyVGFibGUuZ2V0Q29sdW1uTmFtZWQoImNodW5rIikuZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0VHJ1ZShiYXJUYWJsZS5nZXRDb2x1bW5OYW1lZCgiY2h1bmsiKS5pc0xPQigpKTsKLQkJYXNzZXJ0U2FtZShiYXJUYWJsZSwgYmFyRksuZ2V0UmVmZXJlbmNlZFRhYmxlKCkpOwotCi0JCS8vIEZPT19CQVoKLQkJVGFibGUgZm9vX2JhelRhYmxlID0gc2NoZW1hLmdldFRhYmxlTmFtZWQoImZvb19iYXoiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGZvb19iYXpUYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGZvb19iYXpUYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygyLCBmb29fYmF6VGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5qb2luVGFibGVOYW1lSXNEZWZhdWx0KCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5nZXRDb2x1bW5OYW1lZCgiZm9vX2lkIikuaXNQYXJ0T2ZGb3JlaWduS2V5KCkpOwotCi0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJmb29fYmF6Iik7Ci0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJiYXoiKTsKLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgImZvbyIpOwotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAiYmFyIik7Ci0KLQkJdGhpcy5kcm9wRGF0YWJhc2UodGhpcy5nZXREYXRhYmFzZU5hbWUoKSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7ICAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFN0cmluZyBidWlsZEJhckRETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIGJhciAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBjaHVuayBCTE9CIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRGb29EREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoIkNSRUFURSBUQUJMRSBmb28gKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgbmFtZSBWQVJDSEFSKDIwKSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBiYXJfaWQgSU5URUdFUiwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBGT1JFSUdOIEtFWSAoYmFyX2lkKSBSRUZFUkVOQ0VTIGJhcihpZCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZEJhekRETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIGJheiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBuYW1lIFZBUkNIQVIoMjApIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRGb29CYXpEREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoIkNSRUFURSBUQUJMRSBmb29fYmF6ICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBmb29faWQgSU5ULCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGJhel9pZCBJTlQsIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgRk9SRUlHTiBLRVkgKGZvb19pZCkgUkVGRVJFTkNFUyBmb28oaWQpLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIEZPUkVJR04gS0VZIChiYXpfaWQpIFJFRkVSRU5DRVMgYmF6KGlkKSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIE9uIFdpbmRvd3MsIHRhYmxlIG5hbWVzIGdldCBmb2xkZWQgdG8gbG93ZXJjYXNlIGJ5IGRlZmF1bHQ7Ci0JICogZXZlbiBpZiB0aGUgbmFtZSBpcyBkZWxpbWl0ZWQgKGFwcGFyZW50bHkpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWJsZUxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmRyb3BEYXRhYmFzZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgREFUQUJBU0UgIiArIHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCkpOwotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZyh0aGlzLmdldERhdGFiYXNlTmFtZSgpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAidGVzdDEiKTsKLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgIlRFU1QyIik7Ci0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJgVEVTVDNgIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdDEgKGlkIElOVEVHRVIsIG5hbWUgVkFSQ0hBUigyMCkpIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIFRFU1QyIChpZCBJTlRFR0VSLCBuYW1lIFZBUkNIQVIoMjApKSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSBgVEVTVDNgIChpZCBJTlRFR0VSLCBuYW1lIFZBUkNIQVIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlTY2hlbWEgc2NoZW1hID0gdGhpcy5nZXREZWZhdWx0U2NoZW1hKCk7Ci0KLQkJVGFibGUgdGVzdDFUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QxIik7Ci0JCWFzc2VydE5vdE51bGwodGVzdDFUYWJsZSk7Ci0KLQkJLy8gdGhpcyBwcm9iYWJseSBvbmx5IHdvcmtzIG9uIFdpbmRvd3MKLQkJVGFibGUgdGVzdDJUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QyIik7Ci0JCWFzc2VydE5vdE51bGwodGVzdDJUYWJsZSk7Ci0KLQkJLy8gdGhpcyBwcm9iYWJseSBvbmx5IHdvcmtzIG9uIFdpbmRvd3MKLQkJVGFibGUgdGVzdDNUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoImB0ZXN0M2AiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0M1RhYmxlKTsKLQotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAidGVzdDEiKTsKLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgIlRFU1QyIik7Ci0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJgVEVTVDNgIik7Ci0KLQkJdGhpcy5kcm9wRGF0YWJhc2UodGhpcy5nZXREYXRhYmFzZU5hbWUoKSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sdW1uTG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcERhdGFiYXNlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBEQVRBQkFTRSAiICsgdGhpcy5nZXREYXRhYmFzZU5hbWUoKSk7Ci0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCkpOwotCi0JCXRoaXMuZHJvcFRhYmxlKHRoaXMuZ2V0RGF0YWJhc2VOYW1lKCksICJ0ZXN0Iik7Ci0KLQkJLy8gbG93ZXJjYXNlCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIHRlc3QgKGlkIElOVEVHRVIsIG5hbWUgVkFSQ0hBUigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVRhYmxlIHRhYmxlID0gdGhpcy5nZXREZWZhdWx0U2NoZW1hKCkuZ2V0VGFibGVOYW1lZCgidGVzdCIpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbk5hbWVkKCJpZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5OYW1lZCgibmFtZSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAidGVzdCIpOwotCi0JCS8vIHVwcGVyY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChJRCBJTlRFR0VSLCBOQU1FIFZBUkNIQVIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGVmYXVsdFNjaGVtYSgpLmdldFRhYmxlTmFtZWQoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5OYW1lZCgiSUQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uTmFtZWQoIk5BTUUiKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgInRlc3QiKTsKLQotCQkvLyBtaXhlZCBjYXNlCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIHRlc3QgKElkIElOVEVHRVIsIE5hbWUgVkFSQ0hBUigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREZWZhdWx0U2NoZW1hKCkuZ2V0VGFibGVOYW1lZCgidGVzdCIpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbk5hbWVkKCJJZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5OYW1lZCgiTmFtZSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpLCAidGVzdCIpOwotCi0JCS8vIGRlbGltaXRlZAotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChgSWRgIElOVEVHRVIsIGBOYW1lYCBWQVJDSEFSKDIwKSkiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJdGFibGUgPSB0aGlzLmdldERlZmF1bHRTY2hlbWEoKS5nZXRUYWJsZU5hbWVkKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiYElkYCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJgTmFtZWAiKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUodGhpcy5nZXREYXRhYmFzZU5hbWUoKSwgInRlc3QiKTsKLQotCQl0aGlzLmRyb3BEYXRhYmFzZSh0aGlzLmdldERhdGFiYXNlTmFtZSgpKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCS8qKgotCSAqIFdlIGNhbiBvbmx5IGdldCBhIHNpbmdsZSAic2NoZW1hIiBwZXIgY29ubmVjdGlvbiB2aWEgRFRQLAotCSAqIHNvIGNyb3NzLXNjaGVtYSByZWZlcmVuY2VzIGFyZSBub3QgdmlzaWJsZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q3Jvc3NTY2hlbWFSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wRGF0YWJhc2UoInhyZWZfdGVzdDIiKTsKLQkJdGhpcy5kcm9wRGF0YWJhc2UoInhyZWZfdGVzdDEiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBEQVRBQkFTRSB4cmVmX3Rlc3QxIik7Ci0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJ4cmVmX3Rlc3QxIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIG9yZyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBWQVJDSEFSKDIwKSkiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBEQVRBQkFTRSB4cmVmX3Rlc3QyIik7Ci0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJ4cmVmX3Rlc3QyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIGVtcCAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSwgbmFtZSBWQVJDSEFSKDIwKSwgIiArCi0JCQkJIm9yZ19pZCBJTlRFR0VSLCBGT1JFSUdOIEtFWSAob3JnX2lkKSBSRUZFUkVOQ0VTIHhyZWZfdGVzdDEub3JnKGlkKSkiKTsKLQotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygieHJlZl90ZXN0MiIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQkJU2NoZW1hIHNjaGVtYTIgPSB0aGlzLmdldERlZmF1bHRTY2hlbWEoKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEyKTsKLQkJVGFibGUgZW1wVGFibGUgPSBzY2hlbWEyLmdldFRhYmxlTmFtZWQoImVtcCIpOwotCQlhc3NlcnROb3ROdWxsKGVtcFRhYmxlKTsKLQkJLy8gbm8gZm9yZWlnbiBrZXlzCi0JCWFzc2VydEVxdWFscygwLCBlbXBUYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0KLQkJdGhpcy5kcm9wRGF0YWJhc2UoInhyZWZfdGVzdDIiKTsKLQkJdGhpcy5kcm9wRGF0YWJhc2UoInhyZWZfdGVzdDEiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkcm9wVGFibGUoU3RyaW5nIGRiTmFtZSwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiArIGRiTmFtZSArICcuJyArIHRhYmxlTmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRyb3BEYXRhYmFzZShTdHJpbmcgbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgIiArIG5hbWUpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9PcmFjbGUxMGdUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9PcmFjbGUxMGdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTQ0OTU2Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvT3JhY2xlMTBnVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7Ci0KLWltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnNxbS5jb3JlLnJ0ZS5JQ2F0YWxvZ09iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Gb3JlaWduS2V5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5TY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlRhYmxlOwotCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBjbGFzcyBPcmFjbGUxMGdUZXN0cyBleHRlbmRzIERUUFBsYXRmb3JtVGVzdHMgewotCi0JcHVibGljIE9yYWNsZTEwZ1Rlc3RzKCBTdHJpbmcgbmFtZSkgewotCQlzdXBlciggbmFtZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpIHsKLQkJcmV0dXJuICJvcmFjbGUxMGcucHJvcGVydGllcyI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJOYW1lKCkgewotCQlyZXR1cm4gIk9yYWNsZSAxMGcgVGhpbiBEcml2ZXIiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyRGVmaW5pdGlvbklEKCkgewotCQlyZXR1cm4gIkRyaXZlckRlZm4uT3JhY2xlIFRoaW4gRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25UeXBlKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50Lm9yYWNsZS4xMC5kcml2ZXJUZW1wbGF0ZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlbmRvcigpIHsKLQkJcmV0dXJuICJPcmFjbGUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZXJzaW9uKCkgewotCQlyZXR1cm4gIjEwIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckNsYXNzKCkgewotCQlyZXR1cm4gIm9yYWNsZS5qZGJjLk9yYWNsZURyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9maWxlTmFtZSgpIHsKLQkJcmV0dXJuICJPcmFjbGUxMGdfMTAuMS4wLjQiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZmlsZURlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gIk9yYWNsZTEwZyAoMTAuMS4wLjQpIEpEQkMgUHJvZmlsZSBbVGVzdF0iOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHN1cHBvcnRzQ2F0YWxvZ3MoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlT2ZmbGluZVRlc3RzKCkgewotCQkvLyB3b3JraW5nIG9mZmxpbmUgaXMgcHJldHR5IHVnbHkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REYXRhYmFzZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAodGhpcy5jb25uZWN0aW9uUHJvZmlsZS5nZXRVc2VyTmFtZSgpLnRvVXBwZXJDYXNlKCkuZXF1YWxzKCJTWVMiKSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJza2lwcGVkIHRlc3Q6ICIgKyB0aGlzLmdldENsYXNzKCkgKyAnLicgKyB0aGlzLmdldE5hbWUoKSk7Ci0JCQlyZXR1cm47ICAvLyBTWVMgZG9lcyBub3QgaGF2ZSBhIHNjaGVtYQotCQl9Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCS8vIE9yYWNsZSBzaG91bGQgaGF2ZSBhIHNjaGVtYSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIKLQkJU2NoZW1hIHNjaGVtYSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKHRoaXMuZ2V0VXNlcklEKCkpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYSk7Ci0JCWFzc2VydFNhbWUodGhpcy5nZXREZWZhdWx0U2NoZW1hKCksIHNjaGVtYSk7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wVGFibGUoImZvb19iYXoiKTsKLQkJdGhpcy5kcm9wVGFibGUoImJheiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiZm9vIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJiYXIiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEJhckRETCgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRGb29EREwoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkQmF6RERMKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEZvb0JhekRETCgpKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJU2NoZW1hIHNjaGVtYSA9IHRoaXMuZ2V0RGVmYXVsdFNjaGVtYSgpOwotCi0JCS8vIGZvbwotCQlUYWJsZSBmb29UYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoImZvbyIpOwotCQlhc3NlcnRFcXVhbHMoMywgZm9vVGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0KLQkJQ29sdW1uIHBrQ29sdW1uID0gZm9vVGFibGUuZ2V0UHJpbWFyeUtleUNvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoIklEIiwgcGtDb2x1bW4uZ2V0TmFtZSgpKTsKLQkJQ29sdW1uIGlkQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiaWQiKTsKLQkJYXNzZXJ0U2FtZShwa0NvbHVtbiwgaWRDb2x1bW4pOwotCQlhc3NlcnRFcXVhbHMoIk5VTUJFUiIsIGlkQ29sdW1uLmdldERhdGFUeXBlTmFtZSgpKTsKLQkJYXNzZXJ0U2FtZShmb29UYWJsZSwgaWRDb2x1bW4uZ2V0VGFibGUoKSk7Ci0JCWFzc2VydFRydWUoaWRDb2x1bW4uaXNQYXJ0T2ZQcmltYXJ5S2V5KCkpOwotCQlhc3NlcnRGYWxzZShpZENvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiLCBpZENvbHVtbi5nZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkpOwotCi0JCUNvbHVtbiBuYW1lQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigibmFtZSIpOwotCQlhc3NlcnRFcXVhbHMoIlZBUkNIQVIyIiwgbmFtZUNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YS5sYW5nLlN0cmluZyIsIG5hbWVDb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0RmFsc2UobmFtZUNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJQ29sdW1uIGJhckNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoImJhcl9pZCIpOwotCQlhc3NlcnRFcXVhbHMoIk5VTUJFUiIsIGJhckNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydFRydWUoYmFyQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpKTsKLQkJYXNzZXJ0RmFsc2UoYmFyQ29sdW1uLmlzUGFydE9mUHJpbWFyeUtleSgpKTsKLQotCQlGb3JlaWduS2V5IGJhckZLID0gZm9vVGFibGUuZm9yZWlnbktleXMoKS5uZXh0KCk7ICAvLyB0aGVyZSBzaG91bGQgb25seSBiZSAxIGZvcmVpZ24ga2V5Ci0JCWFzc2VydEVxdWFscygxLCBiYXJGSy5jb2x1bW5QYWlyc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygiQkFSIiwgYmFyRksuZ2V0QXR0cmlidXRlTmFtZSgpKTsKLQkJYXNzZXJ0TnVsbChiYXJGSy5nZXRKb2luQ29sdW1uQW5ub3RhdGlvbklkZW50aWZpZXIoImJhciIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJCQVJfSUQiLCBiYXJGSy5nZXRKb2luQ29sdW1uQW5ub3RhdGlvbklkZW50aWZpZXIoInByaW1hcnlCYXIiKSk7Ci0JCWFzc2VydFNhbWUoZm9vVGFibGUsIGJhckZLLmdldEJhc2VUYWJsZSgpKTsKLQotCQlhc3NlcnRGYWxzZShmb29UYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlhc3NlcnRTYW1lKHNjaGVtYSwgZm9vVGFibGUuZ2V0U2NoZW1hKCkpOwotCi0JCS8vIEJBUgotCQlUYWJsZSBiYXJUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoImJhciIpOwotCQlhc3NlcnRFcXVhbHMoMiwgYmFyVGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBiYXJUYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBiYXJUYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygiSUQiLCBiYXJUYWJsZS5nZXRQcmltYXJ5S2V5Q29sdW1uKCkuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RmFsc2UoYmFyVGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJCTE9CIiwgYmFyVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiY2h1bmsiKS5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiYnl0ZVtdIiwgYmFyVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiY2h1bmsiKS5nZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkpOwotCQlhc3NlcnRUcnVlKGJhclRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoImNodW5rIikuaXNMT0IoKSk7Ci0JCWFzc2VydFNhbWUoYmFyVGFibGUsIGJhckZLLmdldFJlZmVyZW5jZWRUYWJsZSgpKTsKLQotCQkvLyBGT09fQkFaCi0JCVRhYmxlIGZvb19iYXpUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoImZvb19iYXoiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGZvb19iYXpUYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGZvb19iYXpUYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygyLCBmb29fYmF6VGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5qb2luVGFibGVOYW1lSXNEZWZhdWx0KCkpOwotCQlhc3NlcnRUcnVlKGZvb19iYXpUYWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJmb29faWQiKS5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUoImZvb19iYXoiKTsKLQkJdGhpcy5kcm9wVGFibGUoImJheiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiZm9vIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJiYXIiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgIC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkQmFyRERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgYmFyICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBpZCBOVU1CRVIoMTApIFBSSU1BUlkgS0VZLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGNodW5rIEJMT0IiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZEZvb0RETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIGZvbyAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgaWQgTlVNQkVSKDEwKSBQUklNQVJZIEtFWSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBuYW1lIFZBUkNIQVIyKDIwKSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBiYXJfaWQgUkVGRVJFTkNFUyBiYXIoaWQpIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRCYXpEREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoIkNSRUFURSBUQUJMRSBiYXogKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGlkIE5VTUJFUigxMCkgUFJJTUFSWSBLRVksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgbmFtZSBWQVJDSEFSMigyMCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBidWlsZEZvb0JhekRETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIGZvb19iYXogKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGZvb19pZCBOVU1CRVIoMTApIFJFRkVSRU5DRVMgZm9vKGlkKSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBiYXpfaWQgTlVNQkVSKDEwKSBSRUZFUkVOQ0VTIGJheihpZCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFibGVMb29rdXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wVGFibGUoInRlc3QxIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJURVNUMiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiXCJ0ZXN0M1wiIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdDEgKGlkIE5VTUJFUigxMCksIG5hbWUgVkFSQ0hBUjIoMjApKSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSBURVNUMiAoaWQgTlVNQkVSKDEwKSwgbmFtZSBWQVJDSEFSMigyMCkpIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIFwidGVzdDNcIiAoaWQgTlVNQkVSKDEwKSwgbmFtZSBWQVJDSEFSMigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVNjaGVtYSBzY2hlbWEgPSB0aGlzLmdldERlZmF1bHRTY2hlbWEoKTsKLQotCQlUYWJsZSB0ZXN0MVRhYmxlID0gc2NoZW1hLmdldFRhYmxlRm9ySWRlbnRpZmllcigidGVzdDEiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0MVRhYmxlKTsKLQkJdGVzdDFUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoIlRFU1QxIik7Ci0JCWFzc2VydE5vdE51bGwodGVzdDFUYWJsZSk7Ci0KLQkJVGFibGUgdGVzdDJUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QyIik7Ci0JCWFzc2VydE5vdE51bGwodGVzdDJUYWJsZSk7Ci0JCXRlc3QyVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJURVNUMiIpOwotCQlhc3NlcnROb3ROdWxsKHRlc3QyVGFibGUpOwotCi0JCVRhYmxlIHRlc3QzVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJcInRlc3QzXCIiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0M1RhYmxlKTsKLQkJdGVzdDNUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QzIik7Ci0JCWFzc2VydE51bGwodGVzdDNUYWJsZSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUoInRlc3QxIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJURVNUMiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiXCJ0ZXN0M1wiIik7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sdW1uTG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJ0ZXN0Iik7Ci0KLQkJLy8gbG93ZXJjYXNlCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIHRlc3QgKGlkIE5VTUJFUigxMCksIG5hbWUgVkFSQ0hBUjIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlUYWJsZSB0YWJsZSA9IHRoaXMuZ2V0RGVmYXVsdFNjaGVtYSgpLmdldFRhYmxlRm9ySWRlbnRpZmllcigidGVzdCIpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoImlkIikpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIm5hbWUiKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUoInRlc3QiKTsKLQotCQkvLyB1cHBlcmNhc2UKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdCAoSUQgTlVNQkVSKDEwKSwgTkFNRSBWQVJDSEFSMigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREZWZhdWx0U2NoZW1hKCkuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiSUQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiTkFNRSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgidGVzdCIpOwotCi0JCS8vIG1peGVkIGNhc2UKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdCAoSWQgTlVNQkVSKDEwKSwgTmFtZSBWQVJDSEFSMigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREZWZhdWx0U2NoZW1hKCkuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiSWQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiTmFtZSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgidGVzdCIpOwotCi0JCS8vIGRlbGltaXRlZAotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChcIklkXCIgTlVNQkVSKDEwKSwgXCJOYW1lXCIgVkFSQ0hBUjIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGVmYXVsdFNjaGVtYSgpLmdldFRhYmxlRm9ySWRlbnRpZmllcigidGVzdCIpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIlwiSWRcIiIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJcIk5hbWVcIiIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgidGVzdCIpOwotCi0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyb3NzU2NoZW1hUmVmZXJlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmICggISB0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmdldFVzZXJOYW1lKCkudG9VcHBlckNhc2UoKS5lcXVhbHMoIlNZUyIpKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInNraXBwZWQgdGVzdDogIiArIHRoaXMuZ2V0Q2xhc3MoKSArICcuJyArIHRoaXMuZ2V0TmFtZSgpKTsKLQkJCXJldHVybjsgIC8vIFNZUyBkb2VzIG5vdCBoYXZlIGEgc2NoZW1hCi0JCX0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlSWdub3JlRXJyb3JzKCJEUk9QIFVTRVIgWFJFRl9URVNUMiBDQVNDQURFIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZUlnbm9yZUVycm9ycygiRFJPUCBVU0VSIFhSRUZfVEVTVDEgQ0FTQ0FERSIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFVTRVIgWFJFRl9URVNUMSBJREVOVElGSUVEIEJZIGZvbyIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkFMVEVSIFVTRVIgWFJFRl9URVNUMSBRVU9UQSBVTkxJTUlURUQgT04gVVNFUlMiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgWFJFRl9URVNUMS5PUkcgKElEIE5VTUJFUigxMCkgUFJJTUFSWSBLRVksIE5BTUUgVkFSQ0hBUjIoMjApKSIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFVTRVIgWFJFRl9URVNUMiBJREVOVElGSUVEIEJZIGZvbyIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkFMVEVSIFVTRVIgWFJFRl9URVNUMiBRVU9UQSBVTkxJTUlURUQgT04gVVNFUlMiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJHUkFOVCBBTEwgT04gWFJFRl9URVNUMS5PUkcgVE8gWFJFRl9URVNUMiIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSBYUkVGX1RFU1QyLkVNUCAoSUQgTlVNQkVSKDEwKSBQUklNQVJZIEtFWSwgTkFNRSBWQVJDSEFSMigyMCksICIgKwotCQkJCSJPUkdfSUQgTlVNQkVSKDEwKSBSRUZFUkVOQ0VTIFhSRUZfVEVTVDEuT1JHKElEKSkiKTsKLQotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQkJU2NoZW1hIHNjaGVtYTEgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0U2NoZW1hTmFtZWQoIlhSRUZfVEVTVDEiKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWExKTsKLQkJVGFibGUgb3JnVGFibGUgPSBzY2hlbWExLmdldFRhYmxlTmFtZWQoIk9SRyIpOwotCQlhc3NlcnROb3ROdWxsKG9yZ1RhYmxlKTsKLQotCQlTY2hlbWEgc2NoZW1hMiA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRTY2hlbWFOYW1lZCgiWFJFRl9URVNUMiIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTIpOwotCQlUYWJsZSBlbXBUYWJsZSA9IHNjaGVtYTIuZ2V0VGFibGVOYW1lZCgiRU1QIik7Ci0JCWFzc2VydE5vdE51bGwoZW1wVGFibGUpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW1wVGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCQlGb3JlaWduS2V5IGZrID0gZW1wVGFibGUuZm9yZWlnbktleXMoKS5uZXh0KCk7Ci0JCVRhYmxlIHJlZlRhYmxlID0gZmsuZ2V0UmVmZXJlbmNlZFRhYmxlKCk7Ci0JCWFzc2VydE5vdE51bGwocmVmVGFibGUpOwotCQlhc3NlcnRFcXVhbHMoIk9SRyIsIHJlZlRhYmxlLmdldE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmay5jb2x1bW5QYWlyc1NpemUoKSk7Ci0JCUZvcmVpZ25LZXkuQ29sdW1uUGFpciBjcCA9IGZrLmNvbHVtblBhaXJzKCkubmV4dCgpOwotCQlDb2x1bW4gYmFzZUNvbHVtbiA9IGNwLmdldEJhc2VDb2x1bW4oKTsKLQkJYXNzZXJ0RXF1YWxzKCJPUkdfSUQiLCBiYXNlQ29sdW1uLmdldE5hbWUoKSk7Ci0JCUNvbHVtbiByZWZDb2x1bW4gPSBjcC5nZXRSZWZlcmVuY2VkQ29sdW1uKCk7Ci0JCWFzc2VydEVxdWFscygiSUQiLCByZWZDb2x1bW4uZ2V0TmFtZSgpKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkRST1AgVVNFUiBYUkVGX1RFU1QyIENBU0NBREUiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJEUk9QIFVTRVIgWFJFRl9URVNUMSBDQVNDQURFIik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRyb3BUYWJsZShTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5leGVjdXRlVXBkYXRlSWdub3JlRXJyb3JzKCJEUk9QIFRBQkxFICIgKyB0YWJsZU5hbWUgKyAiIENBU0NBREUgQ09OU1RSQUlOVFMiKTsKLQl9Ci0KLS8vIG5lZWQgT3JhY2xlIGVuYWJsZW1lbnQgcGx1Zy1pbgotLy8JcHVibGljIHZvaWQgdGVzdFNlcXVlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0vLwkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotLy8KLS8vCQl0aGlzLmRyb3BTZXF1ZW5jZSgiRk9PX1NFUSIpOwotLy8KLS8vCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTRVFVRU5DRSBGT09fU0VRIik7Ci0vLwkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0vLwotLy8JCVNlcXVlbmNlIHNlcXVlbmNlID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldERlZmF1bHRTY2hlbWEoKS5nZXRTZXF1ZW5jZUZvcklkZW50aWZpZXIoIkZPTyIpOwotLy8JCWFzc2VydE5vdE51bGwoc2VxdWVuY2UpOwotLy8JCWFzc2VydEVxdWFscygiRk9PX1NFUSIsIHNlcXVlbmNlLmdldE5hbWUoKSk7Ci0vLwotLy8JCXRoaXMuZHJvcFNlcXVlbmNlKCJGT09fU0VRIik7Ci0vLwotLy8JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLS8vCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLS8vCX0KLS8vCi0vLwlwcml2YXRlIHZvaWQgZHJvcFNlcXVlbmNlKFN0cmluZyBzZXF1ZW5jZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotLy8JCXRoaXMuZXhlY3V0ZVVwZGF0ZUlnbm9yZUVycm9ycygiRFJPUCBTRVFVRU5DRSAiICsgc2VxdWVuY2VOYW1lKTsKLS8vCX0KLS8vCi0JcHJvdGVjdGVkIHZvaWQgZHVtcFVzZXJPYmplY3RzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCXRoaXMuZHVtcCgic2VsZWN0ICogZnJvbSB1c2VyX29iamVjdHMiKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvT3JhY2xlMTBnWEVUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9PcmFjbGUxMGdYRVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzA5ZjguLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9PcmFjbGUxMGdYRVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7Ci0KLQotLyoqCi0gKiAgT3JhY2xlIDEwZyBUaGluIERyaXZlciBUZXN0Ci0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIE9yYWNsZTEwZ1hFVGVzdHMgZXh0ZW5kcyBEVFBQbGF0Zm9ybVRlc3RzIHsKLQotCXB1YmxpYyBPcmFjbGUxMGdYRVRlc3RzKCBTdHJpbmcgbmFtZSkgewotCQlzdXBlciggbmFtZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpIHsKLQkJcmV0dXJuICJvcmFjbGUxMGdYRS5wcm9wZXJ0aWVzIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlck5hbWUoKSB7Ci0JCXJldHVybiAiT3JhY2xlIDEwZyBUaGluIERyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uSUQoKSB7Ci0JCXJldHVybiAiRHJpdmVyRGVmbi5PcmFjbGUgVGhpbiBEcml2ZXIiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyRGVmaW5pdGlvblR5cGUoKSB7Ci0JCXJldHVybiAib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQub3JhY2xlLjEwLmRyaXZlclRlbXBsYXRlIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERhdGFiYXNlVmVuZG9yKCkgewotCQlyZXR1cm4gIk9yYWNsZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKSB7Ci0JCXJldHVybiAiMTAiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyQ2xhc3MoKSB7Ci0JCXJldHVybiAib3JhY2xlLmpkYmMuT3JhY2xlRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVOYW1lKCkgewotCQlyZXR1cm4gIk9yYWNsZTEwZ19YRSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9maWxlRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiT3JhY2xlMTBnIFhFIFJlbGVhc2UgMiAoMTAuMikgSkRCQyBQcm9maWxlIFtUZXN0XSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVPZmZsaW5lVGVzdHMoKSB7Ci0JCS8vIHdvcmtpbmcgb2ZmbGluZSBpcyBwcmV0dHkgdWdseQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL09yYWNsZTlpVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvT3JhY2xlOWlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFjNDc0Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvT3JhY2xlOWlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWwucGxhdGZvcm1zOwotCi0KLS8qKgotICogIE9yYWNsZSA5aSBUaGluIERyaXZlciBUZXN0Ci0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIE9yYWNsZTlpVGVzdHMgZXh0ZW5kcyBEVFBQbGF0Zm9ybVRlc3RzIHsKLQotCXB1YmxpYyBPcmFjbGU5aVRlc3RzKCBTdHJpbmcgbmFtZSkgewotCQlzdXBlciggbmFtZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpIHsKLQkJcmV0dXJuICJvcmFjbGU5aS5wcm9wZXJ0aWVzIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlck5hbWUoKSB7Ci0JCXJldHVybiAiT3JhY2xlIDlpIFRoaW4gRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25JRCgpIHsKLQkJcmV0dXJuICJEcml2ZXJEZWZuLk9yYWNsZSBUaGluIERyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uVHlwZSgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuZW5hYmxlbWVudC5vcmFjbGUuOS5kcml2ZXJUZW1wbGF0ZSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlbmRvcigpIHsKLQkJcmV0dXJuICJPcmFjbGUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZXJzaW9uKCkgewotCQlyZXR1cm4gIjkiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyQ2xhc3MoKSB7Ci0JCXJldHVybiAib3JhY2xlLmpkYmMuT3JhY2xlRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVOYW1lKCkgewotCQlyZXR1cm4gIk9yYWNsZTlpIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuICJPcmFjbGU5aSBKREJDIFByb2ZpbGUgW1Rlc3RdIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBzdXBwb3J0c0NhdGFsb2dzKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU9mZmxpbmVUZXN0cygpIHsKLQkJLy8gd29ya2luZyBvZmZsaW5lIGlzIHByZXR0eSB1Z2x5Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvUG9zdGdyZVNRTFRlc3RzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL1Bvc3RncmVTUUxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2ZlZWE4Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvUG9zdGdyZVNRTFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMuaW50ZXJuYWwucGxhdGZvcm1zOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGF0YXRvb2xzLmNvbm5lY3Rpdml0eS5zcW0uY29yZS5ydGUuSUNhdGFsb2dPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLkNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuRm9yZWlnbktleTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5UYWJsZTsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgY2xhc3MgUG9zdGdyZVNRTFRlc3RzIGV4dGVuZHMgRFRQUGxhdGZvcm1UZXN0cyB7Ci0KLQlwdWJsaWMgUG9zdGdyZVNRTFRlc3RzKCBTdHJpbmcgbmFtZSkgewotCQlzdXBlciggbmFtZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpIHsKLQkJcmV0dXJuICJwb3N0Z3Jlc3FsLnByb3BlcnRpZXMiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyTmFtZSgpIHsKLQkJcmV0dXJuICJQb3N0Z3JlU1FMIEpEQkMgRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25JRCgpIHsKLQkJcmV0dXJuICJEcml2ZXJEZWZuLlBvc3RncmVTUUwgSkRCQyBEcml2ZXIiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RHJpdmVyRGVmaW5pdGlvblR5cGUoKSB7Ci0JCXJldHVybiAib3JnLmVjbGlwc2UuZGF0YXRvb2xzLmVuYWJsZW1lbnQucG9zdGdyZXNxbC5wb3N0Z3Jlc3FsRHJpdmVyVGVtcGxhdGUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZW5kb3IoKSB7Ci0JCXJldHVybiAicG9zdGdyZXMiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZXJzaW9uKCkgewotCQlyZXR1cm4gIjgueCI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJDbGFzcygpIHsKLQkJcmV0dXJuICJvcmcucG9zdGdyZXNxbC5Ecml2ZXIiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGVmYXVsdEpEQkNVUkwoKSB7Ci0JCS8vIHVzaW5nIHRoaXMgVVJMIHdpbGwgcmVzdWx0IGluIHRoZSBEVFAgZGF0YWJhc2UgY29udGFpbmluZyBhIHNpbmdsZQotCQkvLyBjYXRhbG9nIG5hbWVkICIiIC0gd2hpY2gsIHVuZm9ydHVuYXRlbHksIHJlc2VtYmxlcyB0aGUgcHNldWRvLWNhdGFsb2cKLQkJLy8gZ2VuZXJhdGVkIGJ5IERUUCBmb3IgZGF0YWJhc2VzIHRoYXQgZG8gbm90IHJldHVybiBhbnkgY2F0YWxvZ3MgdmlhCi0JCS8vIEpEQkMgbWV0YWRhdGEgY2FsbHMuLi4KLQkJcmV0dXJuICJqZGJjOnBvc3RncmVzcWwiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvZmlsZU5hbWUoKSB7Ci0JCXJldHVybiAiUG9zdGdyZVNRTCI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9maWxlRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiUG9zdGdyZVNRTCA4LjIgSkRCQyBQcm9maWxlIFtUZXN0XSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gc3VwcG9ydHNDYXRhbG9ncygpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gZXhlY3V0ZU9mZmxpbmVUZXN0cygpIHsKLQkJLy8gRFRQIGRvZXMgbm90IHN1cHBvcnQgUG9zdGdyZVNRTCBvZmYtbGluZSAtIHNlZSAyMjY3MDQvMjQxNTU4Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFNjaGVtYSgiVEVTVDEiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJURVNUMiIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBURVNUMSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlTY2hlbWEgc2NoZW1hMSA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJURVNUMSIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBURVNUMiIpOwotCQlTY2hlbWEgc2NoZW1hMiA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJURVNUMiIpOwotCQlhc3NlcnROdWxsKHNjaGVtYTIpOyAgLy8gc2hvdWxkIGJlIG51bGwgdW50aWwgcmVmcmVzaAotCi0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCQlhc3NlcnRTYW1lKHRoaXMuZ2V0RGF0YWJhc2UoKSwgbGlzdGVuZXIuY2hhbmdlZERhdGFiYXNlKTsKLQotCQlzY2hlbWEyID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlRFU1QyIik7Ci0JCWFzc2VydE5vdE51bGwoc2NoZW1hMik7Ci0JCWFzc2VydE5vdFNhbWUoc2NoZW1hMSwgdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlRFU1QxIikpOyAgLy8gd2Ugc2hvdWxkIGhhdmUgYSBuZXcgc2NoZW1hIGFmdGVyIHRoZSByZWZyZXNoCi0KLQkJdGhpcy5kcm9wU2NoZW1hKCJURVNUMiIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRFU1QxIik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNjaGVtYUxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmRyb3BTY2hlbWEoIkxPT0tVUF9URVNUIik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiXCJsb29rdXBfVEVTVFwiIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIExPT0tVUF9URVNUIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCWFzc2VydE51bGwodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYU5hbWVkKCJMT09LVVBfVEVTVCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigiTE9PS1VQX1RFU1QiKSk7Ci0KLQkJYXNzZXJ0Tm90TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hTmFtZWQoImxvb2t1cF90ZXN0IikpOwotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJsb29rdXBfdGVzdCIpKTsKLQotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFOYW1lZCgibG9va3VwX1RFU1QiKSk7Ci0JCWFzc2VydE5vdE51bGwodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoImxvb2t1cF9URVNUIikpOwotCi0JCWFzc2VydE5vdE51bGwodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlwibG9va3VwX3Rlc3RcIiIpKTsKLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigiXCJsb29rdXBfVEVTVFwiIikpOwotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJcIkxPT0tVUF9URVNUXCIiKSk7Ci0KLQkJdGhpcy5kcm9wU2NoZW1hKCJMT09LVVBfVEVTVCIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBcImxvb2t1cF9URVNUXCIiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hTmFtZWQoIkxPT0tVUF9URVNUIikpOwotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJMT09LVVBfVEVTVCIpKTsKLQotCQlhc3NlcnROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFOYW1lZCgibG9va3VwX3Rlc3QiKSk7Ci0JCWFzc2VydE51bGwodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoImxvb2t1cF90ZXN0IikpOwotCi0JCWFzc2VydE5vdE51bGwodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYU5hbWVkKCJsb29rdXBfVEVTVCIpKTsKLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigibG9va3VwX1RFU1QiKSk7Ci0KLQkJYXNzZXJ0TnVsbCh0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigiXCJMT09LVVBfVEVTVFwiIikpOwotCQlhc3NlcnROb3ROdWxsKHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJcImxvb2t1cF9URVNUXCIiKSk7Ci0KLQkJdGhpcy5kcm9wU2NoZW1hKCJcImxvb2t1cF9URVNUXCIiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTY2hlbWFJZGVudGlmaWVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFNjaGVtYSgiTE9PS1VQX1RFU1QiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJcImxvb2t1cF9URVNUXCIiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgbG9va3VwX3Rlc3QiKTsgIC8vIHRoaXMgZ2V0cyBmb2xkZWQgdG8gbG93ZXJjYXNlCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNDSEVNQSBcImxvb2t1cF9URVNUXCIiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJU2NoZW1hIHNjaGVtYSA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJMT09LVVBfVEVTVCIpOwotCQlhc3NlcnRFcXVhbHMoImxvb2t1cF90ZXN0Iiwgc2NoZW1hLmdldElkZW50aWZpZXIoKSk7Ci0JCWFzc2VydEVxdWFscygibG9va3VwX3Rlc3QiLCBzY2hlbWEuZ2V0SWRlbnRpZmllcigiTG9va3VwVGVzdCIpKTsKLQkJYXNzZXJ0TnVsbChzY2hlbWEuZ2V0SWRlbnRpZmllcigiTG9va3VwX1Rlc3QiKSk7Ci0KLQkJc2NoZW1hID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYU5hbWVkKCJsb29rdXBfdGVzdCIpOwotCQlhc3NlcnRFcXVhbHMoImxvb2t1cF90ZXN0Iiwgc2NoZW1hLmdldElkZW50aWZpZXIoKSk7Ci0KLQkJc2NoZW1hID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlwibG9va3VwX1RFU1RcIiIpOwotCQlhc3NlcnRFcXVhbHMoIlwibG9va3VwX1RFU1RcIiIsIHNjaGVtYS5nZXRJZGVudGlmaWVyKCkpOwotCQlhc3NlcnRFcXVhbHMoIlwibG9va3VwX1RFU1RcIiIsIHNjaGVtYS5nZXRJZGVudGlmaWVyKCJsb29rdXBfVEVTVCIpKTsKLQotCQl0aGlzLmRyb3BTY2hlbWEoIlwibG9va3VwX1RFU1RcIiIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIkxPT0tVUF9URVNUIik7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiRk9PX0JBWiIpOwotCQl0aGlzLmRyb3BUYWJsZSgiVEFCTEVfVEVTVCIsICJCQVoiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiRk9PIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkJBUiIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRBQkxFX1RFU1QiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgVEFCTEVfVEVTVCIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBzZWFyY2hfcGF0aCBUTyBUQUJMRV9URVNUIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRCYXJEREwoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkRm9vRERMKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEJhekRETCgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRGb29CYXpEREwoKSk7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVNjaGVtYSBzY2hlbWEgPSB0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcigiVEFCTEVfVEVTVCIpOwotCi0JCS8vIEZPTwotCQlUYWJsZSBmb29UYWJsZSA9IHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoIkZPTyIpOwotCQlhc3NlcnRFcXVhbHMoMywgZm9vVGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5wcmltYXJ5S2V5Q29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBmb29UYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0KLQkJQ29sdW1uIHBrQ29sdW1uID0gZm9vVGFibGUuZ2V0UHJpbWFyeUtleUNvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoImlkIiwgcGtDb2x1bW4uZ2V0TmFtZSgpKTsKLQkJQ29sdW1uIGlkQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiSUQiKTsKLQkJYXNzZXJ0U2FtZShwa0NvbHVtbiwgaWRDb2x1bW4pOwotCQlhc3NlcnRFcXVhbHMoIklOVDQiLCBpZENvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydFNhbWUoZm9vVGFibGUsIGlkQ29sdW1uLmdldFRhYmxlKCkpOwotCQlhc3NlcnRUcnVlKGlkQ29sdW1uLmlzUGFydE9mUHJpbWFyeUtleSgpKTsKLQkJYXNzZXJ0RmFsc2UoaWRDb2x1bW4uaXNQYXJ0T2ZGb3JlaWduS2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIiwgaWRDb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQotCQlDb2x1bW4gbmFtZUNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIk5BTUUiKTsKLQkJYXNzZXJ0RXF1YWxzKCJWQVJDSEFSIiwgbmFtZUNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YS5sYW5nLlN0cmluZyIsIG5hbWVDb2x1bW4uZ2V0SmF2YVR5cGVEZWNsYXJhdGlvbigpKTsKLQkJYXNzZXJ0RmFsc2UobmFtZUNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJQ29sdW1uIGJhckNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIkJBUl9JRCIpOwotCQlhc3NlcnRFcXVhbHMoIklOVDQiLCBiYXJDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRUcnVlKGJhckNvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGJhckNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJRm9yZWlnbktleSBiYXJGSyA9IGZvb1RhYmxlLmZvcmVpZ25LZXlzKCkubmV4dCgpOyAgLy8gdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBmb3JlaWduIGtleQotCQlhc3NlcnRFcXVhbHMoMSwgYmFyRksuY29sdW1uUGFpcnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoImJhciIsIGJhckZLLmdldEF0dHJpYnV0ZU5hbWUoKSk7Ci0JCWFzc2VydE51bGwoYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygiYmFyX2lkIiwgYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJwcmltYXJ5QmFyIikpOwotCQlhc3NlcnRTYW1lKGZvb1RhYmxlLCBiYXJGSy5nZXRCYXNlVGFibGUoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoZm9vVGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0U2FtZShzY2hlbWEsIGZvb1RhYmxlLmdldFNjaGVtYSgpKTsKLQotCQkvLyBCQVIKLQkJVGFibGUgYmFyVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJCQVIiKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGJhclRhYmxlLmNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgYmFyVGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgYmFyVGFibGUuZm9yZWlnbktleXNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoImlkIiwgYmFyVGFibGUuZ2V0UHJpbWFyeUtleUNvbHVtbigpLmdldE5hbWUoKSk7Ci0JCWFzc2VydEZhbHNlKGJhclRhYmxlLmlzUG9zc2libGVKb2luVGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiQllURUEiLCBiYXJUYWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJDSFVOSyIpLmdldERhdGFUeXBlTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJieXRlW10iLCBiYXJUYWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJDSFVOSyIpLmdldEphdmFUeXBlRGVjbGFyYXRpb24oKSk7Ci0JCS8vIGFzc2VydFRydWUoYmFyVGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiQ0hVTksiKS5kYXRhVHlwZUlzTE9CKCkpOwotCQlhc3NlcnRTYW1lKGJhclRhYmxlLCBiYXJGSy5nZXRSZWZlcmVuY2VkVGFibGUoKSk7Ci0KLQkJLy8gRk9PX0JBWgotCQlUYWJsZSBmb29fYmF6VGFibGUgPSBzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJGT09fQkFaIik7Ci0JCWFzc2VydEVxdWFscygyLCBmb29fYmF6VGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBmb29fYmF6VGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMiwgZm9vX2JhelRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuam9pblRhYmxlTmFtZUlzRGVmYXVsdCgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiRk9PX0lEIikuaXNQYXJ0T2ZGb3JlaWduS2V5KCkpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkZPT19CQVoiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAiQkFaIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgIkZPTyIpOwotCQl0aGlzLmRyb3BUYWJsZSgiVEFCTEVfVEVTVCIsICJCQVIiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJUQUJMRV9URVNUIik7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7ICAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFN0cmluZyBidWlsZEJhckRETCgpIHsKLQkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKDIwMCk7Ci0JCXNiLmFwcGVuZCgiQ1JFQVRFIFRBQkxFIEJBUiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgSUQgaW50ZWdlciBQUklNQVJZIEtFWSwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBDSFVOSyBieXRlYSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRm9vRERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgRk9PICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBJRCBpbnRlZ2VyIFBSSU1BUlkgS0VZLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIE5BTUUgdmFyY2hhcigyMCksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgQkFSX0lEIGludGVnZXIgUkVGRVJFTkNFUyBCQVIoSUQpIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRCYXpEREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoIkNSRUFURSBUQUJMRSBCQVogKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIElEIGludGVnZXIgUFJJTUFSWSBLRVksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgTkFNRSB2YXJjaGFyKDIwKSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRm9vQmF6RERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJDUkVBVEUgVEFCTEUgRk9PX0JBWiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgRk9PX0lEIGludCBSRUZFUkVOQ0VTIEZPTyhJRCksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgQkFaX0lEIGludCBSRUZFUkVOQ0VTIEJBWihJRCkiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIikiKS5hcHBlbmQoQ1IpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sdW1uTG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgInRlc3QiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJUQUJMRV9URVNUIik7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFRBQkxFX1RFU1QiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJTRVQgc2VhcmNoX3BhdGggVE8gVEFCTEVfVEVTVCIpOwotCi0JCS8vIGxvd2VyY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChpZCBpbnQsIG5hbWUgdmFyY2hhcigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVRhYmxlIHRhYmxlID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlRBQkxFX1RFU1QiKS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJpZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJuYW1lIikpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgInRlc3QiKTsKLQotCQkvLyB1cHBlcmNhc2UKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdCAoSUQgaW50LCBOQU1FIHZhcmNoYXIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFGb3JJZGVudGlmaWVyKCJUQUJMRV9URVNUIikuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiSUQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiTkFNRSIpKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgiVEFCTEVfVEVTVCIsICJ0ZXN0Iik7Ci0KLQkJLy8gbWl4ZWQgY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBUQUJMRSB0ZXN0IChJZCBpbnQsIE5hbWUgdmFyY2hhcigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlRBQkxFX1RFU1QiKS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJJZCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJOYW1lIikpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJUQUJMRV9URVNUIiwgInRlc3QiKTsKLQotCQkvLyBkZWxpbWl0ZWQKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgVEFCTEUgdGVzdCAoXCJJZFwiIGludCwgXCJOYW1lXCIgdmFyY2hhcigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIoIlRBQkxFX1RFU1QiKS5nZXRUYWJsZUZvcklkZW50aWZpZXIoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJcIklkXCIiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiXCJOYW1lXCIiKSk7Ci0KLQkJdGhpcy5kcm9wVGFibGUoIlRBQkxFX1RFU1QiLCAidGVzdCIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlRBQkxFX1RFU1QiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcm9zc1NjaGVtYVJlZmVyZW5jZSgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmRyb3BUYWJsZSgiWFJFRl9URVNUMiIsICJFTVAiKTsKLQkJdGhpcy5kcm9wU2NoZW1hKCJYUkVGX1RFU1QyIik7Ci0JCXRoaXMuZHJvcFRhYmxlKCJYUkVGX1RFU1QxIiwgIk9SRyIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlhSRUZfVEVTVDEiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgWFJFRl9URVNUMSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBzZWFyY2hfcGF0aCBUTyBYUkVGX1RFU1QxIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIE9SRyAoSUQgaW50ZWdlciBQUklNQVJZIEtFWSwgTkFNRSB2YXJjaGFyKDIwKSkiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkNSRUFURSBTQ0hFTUEgWFJFRl9URVNUMiIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBzZWFyY2hfcGF0aCBUTyBYUkVGX1RFU1QyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFRBQkxFIEVNUCAoSUQgaW50ZWdlciBQUklNQVJZIEtFWSwgTkFNRSB2YXJjaGFyKDIwKSwgIiArCi0JCQkJIk9SR19JRCBpbnRlZ2VyIFJFRkVSRU5DRVMgWFJFRl9URVNUMS5PUkcoSUQpKSIpOwotCi0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCQlTY2hlbWEgc2NoZW1hMSA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFOYW1lZCgieHJlZl90ZXN0MSIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCQlUYWJsZSBvcmdUYWJsZSA9IHNjaGVtYTEuZ2V0VGFibGVOYW1lZCgib3JnIik7Ci0JCWFzc2VydE5vdE51bGwob3JnVGFibGUpOwotCi0JCVNjaGVtYSBzY2hlbWEyID0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYU5hbWVkKCJ4cmVmX3Rlc3QyIik7Ci0JCWFzc2VydE5vdE51bGwoc2NoZW1hMik7Ci0JCVRhYmxlIGVtcFRhYmxlID0gc2NoZW1hMi5nZXRUYWJsZU5hbWVkKCJlbXAiKTsKLQkJYXNzZXJ0Tm90TnVsbChlbXBUYWJsZSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbXBUYWJsZS5mb3JlaWduS2V5c1NpemUoKSk7Ci0JCUZvcmVpZ25LZXkgZmsgPSBlbXBUYWJsZS5mb3JlaWduS2V5cygpLm5leHQoKTsKLQkJVGFibGUgcmVmVGFibGUgPSBmay5nZXRSZWZlcmVuY2VkVGFibGUoKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWZUYWJsZSk7Ci0JCWFzc2VydEVxdWFscygib3JnIiwgcmVmVGFibGUuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGZrLmNvbHVtblBhaXJzU2l6ZSgpKTsKLQkJRm9yZWlnbktleS5Db2x1bW5QYWlyIGNwID0gZmsuY29sdW1uUGFpcnMoKS5uZXh0KCk7Ci0JCUNvbHVtbiBiYXNlQ29sdW1uID0gY3AuZ2V0QmFzZUNvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoIm9yZ19pZCIsIGJhc2VDb2x1bW4uZ2V0TmFtZSgpKTsKLQkJQ29sdW1uIHJlZkNvbHVtbiA9IGNwLmdldFJlZmVyZW5jZWRDb2x1bW4oKTsKLQkJYXNzZXJ0RXF1YWxzKCJpZCIsIHJlZkNvbHVtbi5nZXROYW1lKCkpOwotCi0JCXRoaXMuZHJvcFRhYmxlKCJYUkVGX1RFU1QyIiwgIkVNUCIpOwotCQl0aGlzLmRyb3BTY2hlbWEoIlhSRUZfVEVTVDIiKTsKLQkJdGhpcy5kcm9wVGFibGUoIlhSRUZfVEVTVDEiLCAiT1JHIik7Ci0JCXRoaXMuZHJvcFNjaGVtYSgiWFJFRl9URVNUMSIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkcm9wVGFibGUoU3RyaW5nIHNjaGVtYU5hbWUsIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlTY2hlbWEgc2NoZW1hPSB0aGlzLmdldERlZmF1bHRDYXRhbG9nKCkuZ2V0U2NoZW1hRm9ySWRlbnRpZmllcihzY2hlbWFOYW1lKTsKLQkJaWYgKHNjaGVtYSAhPSBudWxsKSB7Ci0JCQlpZiAoc2NoZW1hLmdldFRhYmxlRm9ySWRlbnRpZmllcih0YWJsZU5hbWUpICE9IG51bGwpIHsKLQkJCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkRST1AgVEFCTEUgIiArIHNjaGVtYU5hbWUgKyAnLicgKyB0YWJsZU5hbWUpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRyb3BTY2hlbWEoU3RyaW5nIG5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAodGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYUZvcklkZW50aWZpZXIobmFtZSkgIT0gbnVsbCkgewotCQkJdGhpcy5leGVjdXRlVXBkYXRlKCJEUk9QIFNDSEVNQSAiICsgbmFtZSArICIgQ0FTQ0FERSIpOwotCQl9Ci0JfQotCi0vLyBzZWUgMjQxNTc4LzI0MTU1NwotLy8JcHVibGljIHZvaWQgdGVzdFNlcXVlbmNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0vLwkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotLy8KLS8vCQl0aGlzLmRyb3BTZXF1ZW5jZSgiU0VRVUVOQ0VfVEVTVCIsICJGT08iKTsKLS8vCQl0aGlzLmRyb3BTY2hlbWEoIlNFUVVFTkNFX1RFU1QiKTsKLS8vCi0vLwkJdGhpcy5leGVjdXRlVXBkYXRlKCJDUkVBVEUgU0NIRU1BIFNFUVVFTkNFX1RFU1QiKTsKLS8vCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIlNFVCBzZWFyY2hfcGF0aCBUTyBTRVFVRU5DRV9URVNUIik7Ci0vLwotLy8JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkQmFyRERMKCkpOwotLy8JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiQ1JFQVRFIFNFUVVFTkNFIEZPTyBTVEFSVCAxIik7Ci0vLy8vCQlMaXN0PE9iamVjdFtdPiBsaXN0ID0gdGhpcy5leGVjdXRlKCJTRUxFQ1QgbmV4dHZhbCgnZm9vJykiKTsKLS8vLy8JCVN5c3RlbS5vdXQucHJpbnRsbihsaXN0KTsKLS8vCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLS8vCi0vLwkJU2NoZW1hIHNjaGVtYSA9IHRoaXMuZ2V0RGVmYXVsdENhdGFsb2coKS5nZXRTY2hlbWFOYW1lZCgiU0VRVUVOQ0VfVEVTVCIpOwotLy8JCVNlcXVlbmNlIHNlcXVlbmNlID0gc2NoZW1hLmdldFNlcXVlbmNlTmFtZWQoIkZPTyIpOwotLy8JCWFzc2VydE5vdE51bGwoc2VxdWVuY2UpOwotLy8JCWFzc2VydEVxdWFscygiZm9vX3NlcSIsIHNlcXVlbmNlLmdldE5hbWUoKSk7Ci0vLwotLy8JCXRoaXMuZHJvcFNlcXVlbmNlKCJTRVFVRU5DRV9URVNUIiwgIkZPTyIpOwotLy8JCXRoaXMuZHJvcFNjaGVtYSgiU0VRVUVOQ0VfVEVTVCIpOwotLy8KLS8vCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0vLwkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0vLwl9Ci0vLwotLy8JcHJpdmF0ZSB2b2lkIGRyb3BTZXF1ZW5jZShTdHJpbmcgc2NoZW1hTmFtZSwgU3RyaW5nIHNlcXVlbmNlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJU2NoZW1hIHNjaGVtYT0gdGhpcy5nZXREZWZhdWx0Q2F0YWxvZygpLmdldFNjaGVtYU5hbWVkKHNjaGVtYU5hbWUpOwotLy8JCWlmIChzY2hlbWEgIT0gbnVsbCkgewotLy8JCQlpZiAoc2NoZW1hLmdldFNlcXVlbmNlTmFtZWQoc2VxdWVuY2VOYW1lKSAhPSBudWxsKSB7Ci0vLwkJCQl0aGlzLmV4ZWN1dGVVcGRhdGUoIkRST1AgU0VRVUVOQ0UgIiArIHNjaGVtYU5hbWUgKyAnLicgKyBzZXF1ZW5jZU5hbWUpOwotLy8JCQl9Ci0vLwkJfQotLy8JfQotLy8KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvU1FMU2VydmVyVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvU1FMU2VydmVyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VkZGU1ZC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LmRiLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZGIvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm1zL1NRTFNlcnZlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7Ci0KLQotLyoqCi0gKiAgU1FMIFNlcnZlciAyMDA1IERyaXZlciBUZXN0Ci0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIFNRTFNlcnZlclRlc3RzIGV4dGVuZHMgRFRQUGxhdGZvcm1UZXN0cyB7Ci0KLQlwdWJsaWMgU1FMU2VydmVyVGVzdHMoIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKCBuYW1lKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFBsYXRmb3JtUHJvcGVydGllc0ZpbGVOYW1lKCkgewotCQlyZXR1cm4gInNxbHNlcnZlci5wcm9wZXJ0aWVzIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlck5hbWUoKSB7Ci0JCXJldHVybiAiTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgMjAwNSBKREJDIERyaXZlciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJEZWZpbml0aW9uSUQoKSB7Ci0JCXJldHVybiAiRHJpdmVyRGVmbi5NaWNyb3NvZnQgU1FMIFNlcnZlciAyMDA1IEpEQkMgRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25UeXBlKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5lbmFibGVtZW50Lm1zZnQuc3Fsc2VydmVyLjIwMDUuZHJpdmVyVGVtcGxhdGUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZW5kb3IoKSB7Ci0JCXJldHVybiAiU1FMU2VydmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERhdGFiYXNlVmVyc2lvbigpIHsKLQkJcmV0dXJuICIyMDA1IjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckNsYXNzKCkgewotCQlyZXR1cm4gImNvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVOYW1lKCkgewotCQlyZXR1cm4gIlNRTFNlcnZlcl8yMDA1IjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVEZXNjcmlwdGlvbigpIHsKLQkJcmV0dXJuICJNaWNyb3NvZnQgU1FMIFNlcnZlciAyMDA1IEpEQkMgUHJvZmlsZSBbVGVzdF0iOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UHJvdmlkZXJJRCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LmRiLmdlbmVyaWMuY29ubmVjdGlvblByb2ZpbGUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHN1cHBvcnRzQ2F0YWxvZ3MoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIGV4ZWN1dGVPZmZsaW5lVGVzdHMoKSB7Ci0JCXJldHVybiB0cnVlOyAgLy8gaGF2ZW4ndCBhY3R1YWxseSB0cmllZCB0aGlzIHlldC4uLgotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9TeWJhc2VUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L2RiL3Rlc3RzL2ludGVybmFsL3BsYXRmb3Jtcy9TeWJhc2VUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWY1NGNiLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZGIudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9kYi90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybXMvU3liYXNlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5kYi50ZXN0cy5pbnRlcm5hbC5wbGF0Zm9ybXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kYXRhdG9vbHMuY29ubmVjdGl2aXR5LnNxbS5jb3JlLnJ0ZS5JQ2F0YWxvZ09iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuZGIuQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5Gb3JlaWduS2V5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5kYi5TY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmRiLlRhYmxlOwotCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBjbGFzcyBTeWJhc2VUZXN0cyBleHRlbmRzIERUUFBsYXRmb3JtVGVzdHMgewotCi0JcHVibGljIFN5YmFzZVRlc3RzKCBTdHJpbmcgbmFtZSkgewotCQlzdXBlciggbmFtZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQbGF0Zm9ybVByb3BlcnRpZXNGaWxlTmFtZSgpIHsKLQkJcmV0dXJuICJzeWJhc2UucHJvcGVydGllcyI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJOYW1lKCkgewotCQlyZXR1cm4gIlN5YmFzZSBKREJDIERyaXZlciBmb3IgU3liYXNlIEFTRSAxNS54IjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25JRCgpIHsKLQkJcmV0dXJuICJEcml2ZXJEZWZuLlN5YmFzZSBKREJDIERyaXZlciBmb3IgU3liYXNlIEFTRSAxNS54IjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERyaXZlckRlZmluaXRpb25UeXBlKCkgewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLmRhdGF0b29scy5jb25uZWN0aXZpdHkuZGIuc3liYXNlLmFzZS5nZW5lcmljRHJpdmVyVGVtcGxhdGVfMTUiOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGF0YWJhc2VWZW5kb3IoKSB7Ci0JCXJldHVybiAiU3liYXNlX0FTRSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREYXRhYmFzZVZlcnNpb24oKSB7Ci0JCXJldHVybiAiMTUueCI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREcml2ZXJDbGFzcygpIHsKLQkJcmV0dXJuICJjb20uc3liYXNlLmpkYmMzLmpkYmMuU3liRHJpdmVyIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2ZpbGVOYW1lKCkgewotCQlyZXR1cm4gIlN5YmFzZV8xNSI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9maWxlRGVzY3JpcHRpb24oKSB7Ci0JCXJldHVybiAiU3liYXNlIEFTRSAxNSBqQ29ubmVjdCBKREJDIFByb2ZpbGUgW1Rlc3RdIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBzdXBwb3J0c0NhdGFsb2dzKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgYm9vbGVhbiBleGVjdXRlT2ZmbGluZVRlc3RzKCkgewotCQkvLyB3b3JraW5nIG9mZmxpbmUgaXMgcHJldHR5IHVnbHkKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFN5YmFzZSAiZGF0YWJhc2VzIiBiZWNvbWUgRFRQICJjYXRhbG9ncyIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygibWFzdGVyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZUlnbm9yZUVycm9ycygiZHJvcCBkYXRhYmFzZSB0ZXN0MSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGVJZ25vcmVFcnJvcnMoImRyb3AgZGF0YWJhc2UgdGVzdDIiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSBkYXRhYmFzZSB0ZXN0MSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlDYXRhbG9nIGNhdGFsb2cxID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldENhdGFsb2dOYW1lZCgidGVzdDEiKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nMSk7Ci0JCVNjaGVtYSBzY2hlbWExID0gY2F0YWxvZzEuZ2V0U2NoZW1hTmFtZWQoImRibyIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCQlhc3NlcnRTYW1lKHNjaGVtYTEsIGNhdGFsb2cxLmdldERlZmF1bHRTY2hlbWEoKSk7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJjcmVhdGUgZGF0YWJhc2UgdGVzdDIiKTsKLQkJQ2F0YWxvZyBjYXRhbG9nMiA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRDYXRhbG9nTmFtZWQoInRlc3QyIik7Ci0JCWFzc2VydE51bGwoY2F0YWxvZzIpOyAgLy8gc2hvdWxkIGJlIG51bGwgdW50aWwgcmVmcmVzaAotCi0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCQlhc3NlcnRTYW1lKHRoaXMuZ2V0RGF0YWJhc2UoKSwgbGlzdGVuZXIuY2hhbmdlZERhdGFiYXNlKTsKLQotCQljYXRhbG9nMiA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRDYXRhbG9nTmFtZWQoInRlc3QyIik7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZzIpOwotCQlTY2hlbWEgc2NoZW1hMiA9IGNhdGFsb2cyLmdldERlZmF1bHRTY2hlbWEoKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEyKTsKLQotCQlhc3NlcnROb3RTYW1lKGNhdGFsb2cxLCB0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKCJ0ZXN0MSIpKTsgIC8vIHdlIHNob3VsZCBoYXZlIGEgbmV3IGNhdGFsb2cgYWZ0ZXIgdGhlIHJlZnJlc2gKLQkJYXNzZXJ0Tm90U2FtZShzY2hlbWExLCB0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKCJ0ZXN0MSIpLmdldERlZmF1bHRTY2hlbWEoKSk7ICAvLyB3ZSBzaG91bGQgaGF2ZSBhIG5ldyBzY2hlbWEgYWZ0ZXIgdGhlIHJlZnJlc2gKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgZGF0YWJhc2UgdGVzdDIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIGRhdGFiYXNlIHRlc3QxIik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUucmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5kaXNjb25uZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlSWdub3JlRXJyb3JzKCJkcm9wIGRhdGFiYXNlIHRhYmxlX3Rlc3QiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJjcmVhdGUgZGF0YWJhc2UgdGFibGVfdGVzdCIpOwotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygidGFibGVfdGVzdCIpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkQmFyRERMKCkpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUodGhpcy5idWlsZEZvb0RETCgpKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKHRoaXMuYnVpbGRCYXpEREwoKSk7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSh0aGlzLmJ1aWxkRm9vQmF6RERMKCkpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlTY2hlbWEgc2NoZW1hID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldENhdGFsb2dOYW1lZCgidGFibGVfdGVzdCIpLmdldERlZmF1bHRTY2hlbWEoKTsKLQotCQkvLyBmb28KLQkJVGFibGUgZm9vVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVOYW1lZCgiZm9vIik7Ci0JCWFzc2VydEVxdWFscygzLCBmb29UYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGZvb1RhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGZvb1RhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQotCQlDb2x1bW4gcGtDb2x1bW4gPSBmb29UYWJsZS5nZXRQcmltYXJ5S2V5Q29sdW1uKCk7Ci0JCWFzc2VydEVxdWFscygiaWQiLCBwa0NvbHVtbi5nZXROYW1lKCkpOwotCQlDb2x1bW4gaWRDb2x1bW4gPSBmb29UYWJsZS5nZXRDb2x1bW5OYW1lZCgiaWQiKTsKLQkJYXNzZXJ0U2FtZShmb29UYWJsZSwgaWRDb2x1bW4uZ2V0VGFibGUoKSk7Ci0JCWFzc2VydFNhbWUocGtDb2x1bW4sIGlkQ29sdW1uKTsKLQkJYXNzZXJ0VHJ1ZShpZENvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGlkQ29sdW1uLmlzUGFydE9mRm9yZWlnbktleSgpKTsKLQkJYXNzZXJ0VHJ1ZShpZENvbHVtbi5pc1BhcnRPZlVuaXF1ZUNvbnN0cmFpbnQoKSk7Ci0JCWFzc2VydEZhbHNlKGlkQ29sdW1uLmlzTnVsbGFibGUoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJJTlQiLCBpZENvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydFRydWUoaWRDb2x1bW4uaXNOdW1lcmljKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgaWRDb2x1bW4uZ2V0UHJlY2lzaW9uKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgaWRDb2x1bW4uZ2V0U2NhbGUoKSk7Ci0JCWFzc2VydEVxdWFscygtMSwgaWRDb2x1bW4uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRGYWxzZShpZENvbHVtbi5pc0xPQigpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbnQiLCBpZENvbHVtbi5nZXRKYXZhVHlwZURlY2xhcmF0aW9uKCkpOwotCi0JCUNvbHVtbiBuYW1lQ29sdW1uID0gZm9vVGFibGUuZ2V0Q29sdW1uTmFtZWQoIm5hbWUiKTsKLQkJYXNzZXJ0RmFsc2UobmFtZUNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0JCWFzc2VydEZhbHNlKG5hbWVDb2x1bW4uaXNQYXJ0T2ZGb3JlaWduS2V5KCkpOwotCQlhc3NlcnRUcnVlKG5hbWVDb2x1bW4uaXNQYXJ0T2ZVbmlxdWVDb25zdHJhaW50KCkpOwotCQlhc3NlcnRGYWxzZShuYW1lQ29sdW1uLmlzTnVsbGFibGUoKSk7ICAvLyBpbXBsaWVkICJOT1QgTlVMTCIgPwotCi0JCWFzc2VydEVxdWFscygiVkFSQ0hBUiIsIG5hbWVDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRGYWxzZShuYW1lQ29sdW1uLmlzTnVtZXJpYygpKTsKLQkJYXNzZXJ0RXF1YWxzKC0xLCBuYW1lQ29sdW1uLmdldFByZWNpc2lvbigpKTsKLQkJYXNzZXJ0RXF1YWxzKC0xLCBuYW1lQ29sdW1uLmdldFNjYWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoMjAsIG5hbWVDb2x1bW4uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRGYWxzZShuYW1lQ29sdW1uLmlzTE9CKCkpOwotCQlhc3NlcnRFcXVhbHMoImphdmEubGFuZy5TdHJpbmciLCBuYW1lQ29sdW1uLmdldEphdmFUeXBlRGVjbGFyYXRpb24oKSk7Ci0KLQkJQ29sdW1uIGJhckNvbHVtbiA9IGZvb1RhYmxlLmdldENvbHVtbk5hbWVkKCJiYXJfaWQiKTsKLQkJYXNzZXJ0RXF1YWxzKCJJTlQiLCBiYXJDb2x1bW4uZ2V0RGF0YVR5cGVOYW1lKCkpOwotCQlhc3NlcnRUcnVlKGJhckNvbHVtbi5pc1BhcnRPZkZvcmVpZ25LZXkoKSk7Ci0JCWFzc2VydEZhbHNlKGJhckNvbHVtbi5pc1BhcnRPZlByaW1hcnlLZXkoKSk7Ci0KLQkJRm9yZWlnbktleSBiYXJGSyA9IGZvb1RhYmxlLmZvcmVpZ25LZXlzKCkubmV4dCgpOyAgLy8gdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBmb3JlaWduIGtleQotCQlhc3NlcnRFcXVhbHMoMSwgYmFyRksuY29sdW1uUGFpcnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoImJhciIsIGJhckZLLmdldEF0dHJpYnV0ZU5hbWUoKSk7Ci0JCWFzc2VydE51bGwoYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygiYmFyX2lkIiwgYmFyRksuZ2V0Sm9pbkNvbHVtbkFubm90YXRpb25JZGVudGlmaWVyKCJwcmltYXJ5QmFyIikpOwotCQlhc3NlcnRTYW1lKGZvb1RhYmxlLCBiYXJGSy5nZXRCYXNlVGFibGUoKSk7Ci0KLQkJYXNzZXJ0RmFsc2UoZm9vVGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0U2FtZShzY2hlbWEsIGZvb1RhYmxlLmdldFNjaGVtYSgpKTsKLQotCQkvLyBCQVIKLQkJVGFibGUgYmFyVGFibGUgPSBzY2hlbWEuZ2V0VGFibGVOYW1lZCgiYmFyIik7Ci0JCWFzc2VydEVxdWFscygyLCBiYXJUYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGJhclRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGJhclRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJpZCIsIGJhclRhYmxlLmdldFByaW1hcnlLZXlDb2x1bW4oKS5nZXROYW1lKCkpOwotCQlhc3NlcnRGYWxzZShiYXJUYWJsZS5pc1Bvc3NpYmxlSm9pblRhYmxlKCkpOwotCQlDb2x1bW4gY2h1bmtDb2x1bW4gPSBiYXJUYWJsZS5nZXRDb2x1bW5OYW1lZCgiY2h1bmsiKTsKLQkJYXNzZXJ0RXF1YWxzKCJJTUFHRSIsIGNodW5rQ29sdW1uLmdldERhdGFUeXBlTmFtZSgpKTsKLQkJYXNzZXJ0RmFsc2UoY2h1bmtDb2x1bW4uaXNOdW1lcmljKCkpOwotCQlhc3NlcnRUcnVlKGNodW5rQ29sdW1uLmlzTE9CKCkpOwotCQlhc3NlcnRFcXVhbHMoImJ5dGVbXSIsIGNodW5rQ29sdW1uLmdldEphdmFUeXBlRGVjbGFyYXRpb24oKSk7Ci0JCWFzc2VydFNhbWUoYmFyVGFibGUsIGJhckZLLmdldFJlZmVyZW5jZWRUYWJsZSgpKTsKLQotCQkvLyBCQVoKLQkJVGFibGUgYmF6VGFibGUgPSBzY2hlbWEuZ2V0VGFibGVOYW1lZCgiYmF6Iik7Ci0JCWFzc2VydEVxdWFscyg0LCBiYXpUYWJsZS5jb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGJhelRhYmxlLnByaW1hcnlLZXlDb2x1bW5zU2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGJhelRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQotCQlDb2x1bW4gbmlja25hbWVDb2x1bW4gPSBiYXpUYWJsZS5nZXRDb2x1bW5OYW1lZCgibmlja25hbWUiKTsKLQkJYXNzZXJ0VHJ1ZShuaWNrbmFtZUNvbHVtbi5pc051bGxhYmxlKCkpOwotCi0JCUNvbHVtbiBzb25nQ29sdW1uID0gYmF6VGFibGUuZ2V0Q29sdW1uTmFtZWQoInNvbmciKTsKLQkJYXNzZXJ0RmFsc2Uoc29uZ0NvbHVtbi5pc051bGxhYmxlKCkpOwotCi0JCUNvbHVtbiBzYWxhcnlDb2x1bW4gPSBiYXpUYWJsZS5nZXRDb2x1bW5OYW1lZCgic2FsYXJ5Iik7Ci0JCWFzc2VydEZhbHNlKHNhbGFyeUNvbHVtbi5pc1BhcnRPZlVuaXF1ZUNvbnN0cmFpbnQoKSk7Ci0JCWFzc2VydEVxdWFscygiREVDSU1BTCIsIHNhbGFyeUNvbHVtbi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0JCWFzc2VydFRydWUoc2FsYXJ5Q29sdW1uLmlzTnVtZXJpYygpKTsKLQkJYXNzZXJ0RXF1YWxzKDEwLCBzYWxhcnlDb2x1bW4uZ2V0UHJlY2lzaW9uKCkpOwotCQlhc3NlcnRFcXVhbHMoMiwgc2FsYXJ5Q29sdW1uLmdldFNjYWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoLTEsIHNhbGFyeUNvbHVtbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEZhbHNlKHNhbGFyeUNvbHVtbi5pc0xPQigpKTsKLQotCQkvLyBGT09fQkFaCi0JCVRhYmxlIGZvb19iYXpUYWJsZSA9IHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJmb29fYmF6Iik7Ci0JCWFzc2VydEVxdWFscygyLCBmb29fYmF6VGFibGUuY29sdW1uc1NpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBmb29fYmF6VGFibGUucHJpbWFyeUtleUNvbHVtbnNTaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMiwgZm9vX2JhelRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuaXNQb3NzaWJsZUpvaW5UYWJsZSgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuam9pblRhYmxlTmFtZUlzRGVmYXVsdCgpKTsKLQkJYXNzZXJ0VHJ1ZShmb29fYmF6VGFibGUuZ2V0Q29sdW1uTmFtZWQoImZvb19pZCIpLmlzUGFydE9mRm9yZWlnbktleSgpKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgdGFibGUgZm9vX2JheiIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgdGFibGUgYmF6Iik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSBmb28iKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlIGJhciIpOwotCi0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIGRhdGFiYXNlIHRhYmxlX3Rlc3QiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUiA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgIC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkQmFyRERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJjcmVhdGUgdGFibGUgYmFyICgiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGNodW5rIGltYWdlIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRGb29EREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoImNyZWF0ZSB0YWJsZSBmb28gKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGlkIGludGVnZXIgcHJpbWFyeSBrZXksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgbmFtZSB2YXJjaGFyKDIwKSB1bmlxdWUsIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgYmFyX2lkIGludGVnZXIgcmVmZXJlbmNlcyBiYXIoaWQpIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIpIikuYXBwZW5kKENSKTsKLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgYnVpbGRCYXpEREwoKSB7Ci0JCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigyMDApOwotCQlzYi5hcHBlbmQoImNyZWF0ZSB0YWJsZSBiYXogKCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGlkIGludGVnZXIgcHJpbWFyeSBrZXksIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgbmlja25hbWUgdmFyY2hhcigyMCkgbnVsbCwiKS5hcHBlbmQoQ1IpOwotCQlzYi5hcHBlbmQoIiAgICBzb25nIHZhcmNoYXIoMjApIG5vdCBudWxsLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIHNhbGFyeSBkZWNpbWFsKDEwLCAyKSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGJ1aWxkRm9vQmF6RERMKCkgewotCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoMjAwKTsKLQkJc2IuYXBwZW5kKCJjcmVhdGUgdGFibGUgZm9vX2JheiAoIikuYXBwZW5kKENSKTsKLQkJc2IuYXBwZW5kKCIgICAgZm9vX2lkIGludGVnZXIgcmVmZXJlbmNlcyBmb28oaWQpLCIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiICAgIGJhel9pZCBpbnRlZ2VyIHJlZmVyZW5jZXMgYmF6KGlkKSIpLmFwcGVuZChDUik7Ci0JCXNiLmFwcGVuZCgiKSIpLmFwcGVuZChDUik7Ci0JCXJldHVybiBzYi50b1N0cmluZygpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUYWJsZUxvb2t1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmNvbm5lY3QoKTsKLQkJVGVzdENvbm5lY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBUZXN0Q29ubmVjdGlvbkxpc3RlbmVyKCk7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuYWRkQ29ubmVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygibWFzdGVyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZUlnbm9yZUVycm9ycygiZHJvcCBkYXRhYmFzZSB0YWJsZV9sb29rdXBfdGVzdCIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSBkYXRhYmFzZSB0YWJsZV9sb29rdXBfdGVzdCIpOwotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygidGFibGVfbG9va3VwX3Rlc3QiKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSB0YWJsZSB0ZXN0MSAoaWQgaW50ZWdlciwgbmFtZSB2YXJjaGFyKDIwKSkiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJjcmVhdGUgdGFibGUgVEVTVDIgKGlkIGludGVnZXIsIG5hbWUgdmFyY2hhcigyMCkpIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiY3JlYXRlIHRhYmxlIFtUZXN0M10gKGlkIGludGVnZXIsIG5hbWUgdmFyY2hhcigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCVNjaGVtYSBzY2hlbWEgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKCJ0YWJsZV9sb29rdXBfdGVzdCIpLmdldERlZmF1bHRTY2hlbWEoKTsKLQotCQlhc3NlcnROb3ROdWxsKHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJ0ZXN0MSIpKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJ0ZXN0MSIpKTsKLQotCQlhc3NlcnROb3ROdWxsKHNjaGVtYS5nZXRUYWJsZU5hbWVkKCJURVNUMiIpKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEuZ2V0VGFibGVGb3JJZGVudGlmaWVyKCJURVNUMiIpKTsKLQotCQlhc3NlcnROb3ROdWxsKHNjaGVtYS5nZXRUYWJsZUZvcklkZW50aWZpZXIoIltUZXN0M10iKSk7Ci0KLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlIFtUZXN0M10iKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlIFRFU1QyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSB0ZXN0MSIpOwotCi0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIGRhdGFiYXNlIHRhYmxlX2xvb2t1cF90ZXN0Iik7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29sdW1uTG9va3VwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuY29ubmVjdCgpOwotCQlUZXN0Q29ubmVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RDb25uZWN0aW9uTGlzdGVuZXIoKTsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5hZGRDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCi0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlSWdub3JlRXJyb3JzKCJkcm9wIGRhdGFiYXNlIGNvbHVtbl9sb29rdXBfdGVzdCIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSBkYXRhYmFzZSBjb2x1bW5fbG9va3VwX3Rlc3QiKTsKLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2coImNvbHVtbl9sb29rdXBfdGVzdCIpOwotCi0JCS8vIGxvd2VyY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSB0YWJsZSB0ZXN0IChpZCBpbnRlZ2VyLCBuYW1lIHZhcmNoYXIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQlUYWJsZSB0YWJsZSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRDYXRhbG9nTmFtZWQoImNvbHVtbl9sb29rdXBfdGVzdCIpLmdldERlZmF1bHRTY2hlbWEoKS5nZXRUYWJsZU5hbWVkKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uTmFtZWQoImlkIikpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbk5hbWVkKCJuYW1lIikpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSB0ZXN0Iik7Ci0KLQkJLy8gdXBwZXJjYXNlCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiY3JlYXRlIHRhYmxlIHRlc3QgKElEIGludGVnZXIsIE5BTUUgdmFyY2hhcigyMCkpIik7Ci0JCSgoSUNhdGFsb2dPYmplY3QpIHRoaXMuZ2V0RFRQRGF0YWJhc2UoKSkucmVmcmVzaCgpOwotCi0JCXRhYmxlID0gdGhpcy5nZXREYXRhYmFzZSgpLmdldENhdGFsb2dOYW1lZCgiY29sdW1uX2xvb2t1cF90ZXN0IikuZ2V0RGVmYXVsdFNjaGVtYSgpLmdldFRhYmxlTmFtZWQoInRlc3QiKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJJRCIpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0YWJsZS5nZXRDb2x1bW5Gb3JJZGVudGlmaWVyKCJOQU1FIikpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSB0ZXN0Iik7Ci0KLQkJLy8gbWl4ZWQgY2FzZQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSB0YWJsZSB0ZXN0IChJZCBpbnRlZ2VyLCBOYW1lIHZhcmNoYXIoMjApKSIpOwotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQotCQl0YWJsZSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRDYXRhbG9nTmFtZWQoImNvbHVtbl9sb29rdXBfdGVzdCIpLmdldERlZmF1bHRTY2hlbWEoKS5nZXRUYWJsZU5hbWVkKCJ0ZXN0Iik7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiSWQiKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiTmFtZSIpKTsKLQotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgdGFibGUgdGVzdCIpOwotCi0JCS8vIGRlbGltaXRlZAotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSB0YWJsZSB0ZXN0IChbSWRdIGludGVnZXIsIFtOYW1lXSB2YXJjaGFyKDIwKSkiKTsKLQkJKChJQ2F0YWxvZ09iamVjdCkgdGhpcy5nZXREVFBEYXRhYmFzZSgpKS5yZWZyZXNoKCk7Ci0KLQkJdGFibGUgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKCJjb2x1bW5fbG9va3VwX3Rlc3QiKS5nZXREZWZhdWx0U2NoZW1hKCkuZ2V0VGFibGVOYW1lZCgidGVzdCIpOwotCQlhc3NlcnROb3ROdWxsKHRhYmxlLmdldENvbHVtbkZvcklkZW50aWZpZXIoIltJZF0iKSk7Ci0JCWFzc2VydE5vdE51bGwodGFibGUuZ2V0Q29sdW1uRm9ySWRlbnRpZmllcigiW05hbWVdIikpOwotCi0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSB0ZXN0Iik7Ci0KLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2coIm1hc3RlciIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgZGF0YWJhc2UgY29sdW1uX2xvb2t1cF90ZXN0Iik7Ci0KLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5yZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmRpc2Nvbm5lY3QoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3Jvc3NTY2hlbWFSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy5jb25uZWN0aW9uUHJvZmlsZS5jb25uZWN0KCk7Ci0JCVRlc3RDb25uZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdENvbm5lY3Rpb25MaXN0ZW5lcigpOwotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLmFkZENvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0KLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2coIm1hc3RlciIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGVJZ25vcmVFcnJvcnMoImRyb3AgZGF0YWJhc2UgeHJlZl90ZXN0MiIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGVJZ25vcmVFcnJvcnMoImRyb3AgZGF0YWJhc2UgeHJlZl90ZXN0MSIpOwotCi0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJjcmVhdGUgZGF0YWJhc2UgeHJlZl90ZXN0MSIpOwotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygieHJlZl90ZXN0MSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSB0YWJsZSBvcmcgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhcigyMCkpIik7Ci0KLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2coIm1hc3RlciIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImNyZWF0ZSBkYXRhYmFzZSB4cmVmX3Rlc3QyIik7Ci0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJ4cmVmX3Rlc3QyIik7Ci0JCXRoaXMuZXhlY3V0ZVVwZGF0ZSgiY3JlYXRlIHRhYmxlIGVtcCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyKDIwKSwgIiArCi0JCQkJIm9yZ19pZCBpbnRlZ2VyIHJlZmVyZW5jZXMgeHJlZl90ZXN0MS4ub3JnKGlkKSkiKTsKLQotCQkoKElDYXRhbG9nT2JqZWN0KSB0aGlzLmdldERUUERhdGFiYXNlKCkpLnJlZnJlc2goKTsKLQkJQ2F0YWxvZyBjYXRhbG9nMSA9IHRoaXMuZ2V0RGF0YWJhc2UoKS5nZXRDYXRhbG9nTmFtZWQoInhyZWZfdGVzdDEiKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nMSk7Ci0JCVNjaGVtYSBzY2hlbWExID0gY2F0YWxvZzEuZ2V0U2NoZW1hTmFtZWQoImRibyIpOwotCQlhc3NlcnROb3ROdWxsKHNjaGVtYTEpOwotCQlUYWJsZSBvcmdUYWJsZSA9IHNjaGVtYTEuZ2V0VGFibGVOYW1lZCgib3JnIik7Ci0JCWFzc2VydE5vdE51bGwob3JnVGFibGUpOwotCi0JCUNhdGFsb2cgY2F0YWxvZzIgPSB0aGlzLmdldERhdGFiYXNlKCkuZ2V0Q2F0YWxvZ05hbWVkKCJ4cmVmX3Rlc3QyIik7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZzIpOwotCQlTY2hlbWEgc2NoZW1hMiA9IGNhdGFsb2cyLmdldFNjaGVtYU5hbWVkKCJkYm8iKTsKLQkJYXNzZXJ0Tm90TnVsbChzY2hlbWEyKTsKLQkJVGFibGUgZW1wVGFibGUgPSBzY2hlbWEyLmdldFRhYmxlTmFtZWQoImVtcCIpOwotCQlhc3NlcnROb3ROdWxsKGVtcFRhYmxlKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVtcFRhYmxlLmZvcmVpZ25LZXlzU2l6ZSgpKTsKLQkJRm9yZWlnbktleSBmayA9IGVtcFRhYmxlLmZvcmVpZ25LZXlzKCkubmV4dCgpOwotCQlUYWJsZSByZWZUYWJsZSA9IGZrLmdldFJlZmVyZW5jZWRUYWJsZSgpOwotCQlhc3NlcnROb3ROdWxsKHJlZlRhYmxlKTsKLQkJYXNzZXJ0RXF1YWxzKCJvcmciLCByZWZUYWJsZS5nZXROYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZmsuY29sdW1uUGFpcnNTaXplKCkpOwotCQlGb3JlaWduS2V5LkNvbHVtblBhaXIgY3AgPSBmay5jb2x1bW5QYWlycygpLm5leHQoKTsKLQkJQ29sdW1uIGJhc2VDb2x1bW4gPSBjcC5nZXRCYXNlQ29sdW1uKCk7Ci0JCWFzc2VydEVxdWFscygib3JnX2lkIiwgYmFzZUNvbHVtbi5nZXROYW1lKCkpOwotCQlDb2x1bW4gcmVmQ29sdW1uID0gY3AuZ2V0UmVmZXJlbmNlZENvbHVtbigpOwotCQlhc3NlcnRFcXVhbHMoImlkIiwgcmVmQ29sdW1uLmdldE5hbWUoKSk7Ci0KLQkJdGhpcy5nZXRKREJDQ29ubmVjdGlvbigpLnNldENhdGFsb2coInhyZWZfdGVzdDIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIHRhYmxlIGVtcCIpOwotCQl0aGlzLmdldEpEQkNDb25uZWN0aW9uKCkuc2V0Q2F0YWxvZygieHJlZl90ZXN0MSIpOwotCQl0aGlzLmV4ZWN1dGVVcGRhdGUoImRyb3AgdGFibGUgb3JnIik7Ci0JCXRoaXMuZ2V0SkRCQ0Nvbm5lY3Rpb24oKS5zZXRDYXRhbG9nKCJtYXN0ZXIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIGRhdGFiYXNlIHhyZWZfdGVzdDIiKTsKLQkJdGhpcy5leGVjdXRlVXBkYXRlKCJkcm9wIGRhdGFiYXNlIHhyZWZfdGVzdDEiKTsKLQotCQl0aGlzLmNvbm5lY3Rpb25Qcm9maWxlLnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCXRoaXMuY29ubmVjdGlvblByb2ZpbGUuZGlzY29ubmVjdCgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvLmNsYXNzcGF0aCBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzQ0ZTcuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS9qcHQvZ2VuLyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvLnByb2plY3QgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE1OWZlYi4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmFiOTEzLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBKdWwgMDcgMjA6MTM6MjQgRURUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZlNDQ1YS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMi4wLjAKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iMy40LjAiLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSIzLjQuMCIsCi0gb3JnLmVjbGlwc2UuanB0LnV0aWxpdHk7YnVuZGxlLXZlcnNpb249IjEuMi4wIiwKLSBvcmcuZWNsaXBzZS5qcHQuZGI7YnVuZGxlLXZlcnNpb249IjEuMS4xIiwKLSBvcmcuZWNsaXBzZS5qcHQuZ2VuO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSIzLjguMiIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL2Fib3V0Lmh0bWwgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTUzNGJhLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMDIsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OGQ0YmYuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotIyB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotIyBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotamF2YWNTb3VyY2UgPSAxLjUKLWphdmFjVGFyZ2V0ID0gMS41Ci1iaW4uaW5jbHVkZXMgPSAuLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY5YTVkYy4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSMgIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKLSMgIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcwotIyAgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAKLSMgIENvbnRyaWJ1dG9yczogT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lPUphdmEgUGVyc2lzdGVuY2UgVG9vbHMgRW50aXR5IEdlbmVyYXRpb24gVGVzdHMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vdGVzdHMvaW50ZXJuYWwvRW50aXR5R2VuVG9vbHNUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vdGVzdHMvaW50ZXJuYWwvRW50aXR5R2VuVG9vbHNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjBiYTk4Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL3Rlc3RzL2ludGVybmFsL0VudGl0eUdlblRvb2xzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5nZW4uaW50ZXJuYWwub2xkLkVudGl0eUdlblRvb2xzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqIAotICovCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBjbGFzcyBFbnRpdHlHZW5Ub29sc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIEVudGl0eUdlblRvb2xzVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZTEoKSB7Ci0JCUhhc2hTZXQ8U3RyaW5nPiBuYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb28iLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIkZvbyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJmb28iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvbyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb28iLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIkZPT18iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvbyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiX0ZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PKiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiX29vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCI1b28iLCBuYW1lcykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUyKCkgewotCQlIYXNoU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCW5hbWVzLmFkZCgiRm9vIik7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRm9vIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJmb28iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvbzIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIkZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiX0ZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PKiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiX29vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCI1T08iLCBuYW1lcykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUzKCkgewotCQlIYXNoU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCW5hbWVzLmFkZCgiZm9vIik7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRm9vIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJmb28iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvbzIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIkZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiX0ZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PKiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiX29vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCI1T08iLCBuYW1lcykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWU0KCkgewotCQlIYXNoU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCWFzc2VydEVxdWFscygiRm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJGb29CYXIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvb19iYXIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoImZvb19iYXIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvb0JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PX0JBUiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJfRk9PX0JBUiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJGT09fQkFSXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vQmFyXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PX0JBUl8qIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJfZm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCI0Rk9PX0JBUiIsIG5hbWVzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZTUoKSB7Ci0JCUhhc2hTZXQ8U3RyaW5nPiBuYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkJbmFtZXMuYWRkKCJGb29CYXIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb29CYXIyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJGb29CYXIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvb19iYXIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoImZvb19iYXIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvb0JhcjIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIkZPT19CQVIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIkZvb0JhcjIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVDbGFzc05hbWUoIl9GT09fQkFSIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJGb29CYXIyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCJGT09fQkFSXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiRm9vQmFyXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUNsYXNzTmFtZSgiRk9PX0JBUl8qIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJfZm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQ2xhc3NOYW1lKCI0Rk9PX0JBUiIsIG5hbWVzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUxKCkgewotCQlIYXNoU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCWFzc2VydEVxdWFscygiZm9vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRm9vIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb28iLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCJmb28iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvbyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRk9PXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiX0ZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPTyoiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoIl9vbyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIjVvbyIsIG5hbWVzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUyKCkgewotCQlIYXNoU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0JCW5hbWVzLmFkZCgiRm9vIik7Ci0JCWFzc2VydEVxdWFscygiZm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZvbyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoImZvbyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPTyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPT18iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvbzIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCJfRk9PIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb29fIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRk9PKiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiX29vIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiNU9PIiwgbmFtZXMpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZTMoKSB7Ci0JCUhhc2hTZXQ8U3RyaW5nPiBuYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkJbmFtZXMuYWRkKCJmb28iKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRm9vIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiZm9vIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRk9PIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb28yIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRk9PXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIl9GT08iLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvb18iLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCJGT08qIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJfb28iLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCI1T08iLCBuYW1lcykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lNCgpIHsKLQkJSGFzaFNldDxTdHJpbmc+IG5hbWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCQlhc3NlcnRFcXVhbHMoImZvb0JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZvb0JhciIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vX2JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoImZvb19iYXIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvb0JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPT19CQVIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvb0JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIl9GT09fQkFSIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb29CYXIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCJGT09fQkFSXyIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vQmFyXyIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPT19CQVJfKiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiX2Zvb0JhciIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIjRGT09fQkFSIiwgbmFtZXMpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZTUoKSB7Ci0JCUhhc2hTZXQ8U3RyaW5nPiBuYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkJbmFtZXMuYWRkKCJGb29CYXIiKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb29CYXIyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRm9vQmFyIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb29fYmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiZm9vX2JhciIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vQmFyMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPT19CQVIiLCBuYW1lcykpOwotCQlhc3NlcnRFcXVhbHMoImZvb0JhcjIiLCBFbnRpdHlHZW5Ub29scy5jb252ZXJ0VG9VbmlxdWVKYXZhU3R5bGVBdHRyaWJ1dGVOYW1lKCJfRk9PX0JBUiIsIG5hbWVzKSk7Ci0JCWFzc2VydEVxdWFscygiZm9vQmFyMiIsIEVudGl0eUdlblRvb2xzLmNvbnZlcnRUb1VuaXF1ZUphdmFTdHlsZUF0dHJpYnV0ZU5hbWUoIkZPT19CQVJfIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb29CYXJfIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiRk9PX0JBUl8qIiwgbmFtZXMpKTsKLQkJYXNzZXJ0RXF1YWxzKCJfZm9vQmFyIiwgRW50aXR5R2VuVG9vbHMuY29udmVydFRvVW5pcXVlSmF2YVN0eWxlQXR0cmlidXRlTmFtZSgiNEZPT19CQVIiLCBuYW1lcykpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vdGVzdHMvaW50ZXJuYWwvSnB0R2VuVGVzdHMuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvZ2VuL3Rlc3RzL2ludGVybmFsL0pwdEdlblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNzlkN2QuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC9nZW4vdGVzdHMvaW50ZXJuYWwvSnB0R2VuVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0Lmdlbi50ZXN0cy5pbnRlcm5hbC5FbnRpdHlHZW5Ub29sc1Rlc3RzOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgSnB0R2VuVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJKUFQgRW50aXR5IEdlbmVyYXRpb24gVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5R2VuVG9vbHNUZXN0cy5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLQlwcml2YXRlIEpwdEdlblRlc3RzKCkgewotCQlzdXBlcigpOwotCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzL3Rlc3QueG1sIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZDMxMWEuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC5nZW4udGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQk8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotCTwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0JPGVjaG8gbWVzc2FnZT0iYmFzZWRpciAke2Jhc2VkaXJ9IiAvPgotCTxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UgcGxhY2UgJHtlY2xpcHNlLWhvbWV9IiAvPgotCTwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBwbHVnaW4tbmFtZSAtLT4KLQk8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzIi8+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0JPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLQk8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8dHN0YW1wLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCQk8YW50IHRhcmdldD0iZ2VuLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5qcHQuZ2VuLnRlc3RzLmludGVybmFsLkpwdEdlblRlc3RzIiAvPgotCQkJPHByb3BlcnR5IG5hbWU9InBsdWdpbi1wYXRoIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iLz4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJleHRyYVZNYXJncyIgdmFsdWU9IiIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsIHN1aXRlLCBjbGVhbnVwIj4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLy5jbGFzc3BhdGggYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3MDg3N2IuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2UvanB0L3VpLyoqIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS9qcHQvY29yZS8qKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2UvanB0L3V0aWxpdHkvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLy5wcm9qZWN0IGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI0MDc3NC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNjRhMGYuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDA3IDE0OjI3OjE2IEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDc4NmYwLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEKLVJlcXVpcmUtQnVuZGxlOiAKLSBvcmcuanVuaXQ0O2J1bmRsZS12ZXJzaW9uPSI0LjMuMSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpmYWNlLAotIG9yZy5lY2xpcHNlLmpwdC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpwdC5jb3JlLnRlc3RzLmV4dGVuc2lvbi5yZXNvdXJjZSwKLSBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eSwKLSBvcmcuZWNsaXBzZS5qcHQuY29yZSwKLSBvcmcuZWNsaXBzZS5qcHQudWksCi0gb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yO2J1bmRsZS12ZXJzaW9uPSIzLjQuMCIsCi0gb3JnLmVjbGlwc2UudWkuZm9ybXM7YnVuZGxlLXZlcnNpb249IjMuMy4xMDAiLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaDtidW5kbGUtdmVyc2lvbj0iMy40LjAiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLmpmYWNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnBsYXRmb3JtO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnN3dDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnV0aWxpdHkuc3d0O3gtaW50ZXJuYWw6PXRydWUKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRkMmU0ZC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLgpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOGFiODcuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSMgIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKLSMgIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcwotIyAgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jICAKLSMgIENvbnRyaWJ1dG9yczogT3JhY2xlLiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUbyBjb2RlIGRldmVsb3BlcjoKLSMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKLSMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgotIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQotIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1wbHVnaW5OYW1lPUphdmEgUGVyc2lzdGVuY2UgQVBJIFVJIFRlc3RzCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9KcHRVaVRlc3RzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvSnB0VWlUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTBhYmI3Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9KcHRVaVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwucGxhdGZvcm0uSnB0VWlQbGF0Zm9ybVRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC5zd3QuSnB0VWlTV1RUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbC5KcHRVaVV0aWxUZXN0czsKLQotLyoqCi0gKiBSdW5zIGFsbCBKUFQgVUkgVGVzdHMKLSAqLwotcHVibGljIGNsYXNzIEpwdFVpVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKEpwdFVpVGVzdHMuY2xhc3MuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoSnB0VWlQbGF0Zm9ybVRlc3RzLnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KEpwdFVpU1dUVGVzdHMuc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoSnB0VWlVdGlsVGVzdHMuc3VpdGUoKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLQlwcml2YXRlIEpwdFVpVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL2pmYWNlL0RlbGVnYXRpbmdMYWJlbFByb3ZpZGVyVWlUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvamZhY2UvRGVsZWdhdGluZ0xhYmVsUHJvdmlkZXJVaVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhY2UzZS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvamZhY2UvRGVsZWdhdGluZ0xhYmVsUHJvdmlkZXJVaVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC5qZmFjZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BcnJheUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkJhc2VMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5BcHBsaWNhdGlvbldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5qZmFjZS5BYnN0cmFjdEl0ZW1MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5qZmFjZS5BYnN0cmFjdFRyZWVJdGVtQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5qZmFjZS5EZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5qZmFjZS5EZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmpmYWNlLkl0ZW1MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5qZmFjZS5JdGVtTGFiZWxQcm92aWRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmpmYWNlLlRyZWVJdGVtQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5qZmFjZS5UcmVlSXRlbUNvbnRlbnRQcm92aWRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLk51bGxDb2xsZWN0aW9uVmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5Qcm9wZXJ0eUFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlN0YXRpY0NvbGxlY3Rpb25WYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlN0YXRpY1Byb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC5ldmVudC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLmxpc3RlbmVyLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuQ29sbGVjdGlvblZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBhbGV0dGVEYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLXB1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nTGFiZWxQcm92aWRlclVpVGVzdCBleHRlbmRzIEFwcGxpY2F0aW9uV2luZG93Ci17Ci0JcHJpdmF0ZSBUcmVlVmlld2VyIHRyZWU7Ci0JCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxWZWhpY2xlPiBzZWxlY3RlZFZlaGljbGU7Ci0JCi0JCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlXaW5kb3cgd2luZG93ID0gbmV3IERlbGVnYXRpbmdMYWJlbFByb3ZpZGVyVWlUZXN0KGFyZ3MpOwotCQl3aW5kb3cuc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0JCXdpbmRvdy5vcGVuKCk7Ci0JCURpc3BsYXkuZ2V0Q3VycmVudCgpLmRpc3Bvc2UoKTsKLQkJU3lzdGVtLmV4aXQoMCk7Ci0JfQotCQotCQotCXByaXZhdGUgRGVsZWdhdGluZ0xhYmVsUHJvdmlkZXJVaVRlc3QoU3RyaW5nW10gYXJncykgewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy5zZWxlY3RlZFZlaGljbGUgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPFZlaGljbGU+KCk7Ci0JfQotCQotCQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJKChTaGVsbCkgcGFyZW50KS5zZXRUZXh0KENsYXNzVG9vbHMuc2hvcnRDbGFzc05hbWVGb3JPYmplY3QodGhpcykpOwotCQlwYXJlbnQuc2V0U2l6ZSg0MDAsIDQwMCk7Ci0JCXBhcmVudC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCUNvbXBvc2l0ZSBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQltYWluUGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCW1haW5QYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCWJ1aWxkVHJlZVBhbmVsKG1haW5QYW5lbCk7Ci0JCWJ1aWxkQ29udHJvbFBhbmVsKG1haW5QYW5lbCk7Ci0JCXJldHVybiBtYWluUGFuZWw7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidWlsZFRyZWVQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCXBhbmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lbCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsIEdyaWREYXRhLkNFTlRFUiwgZmFsc2UsIGZhbHNlKSk7Ci0JCWxhYmVsLnNldFRleHQoIk15IFZlaGljbGVzIik7Ci0JCQotCQl0cmVlID0gbmV3IFRyZWVWaWV3ZXIocGFuZWwsIFNXVC5TSU5HTEUgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuQk9SREVSKTsKLQkJdHJlZS5nZXRUcmVlKCkuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwgdHJ1ZSwgdHJ1ZSkpOwotCQlEZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXIgY29udGVudEFuZExhYmVsUHJvdmlkZXIgPSAKLQkJCW5ldyBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKAotCQkJCW5ldyBWZWhpY2xlQ29udGVudFByb3ZpZGVyRmFjdG9yeSgpLAotCQkJCW5ldyBWZWhpY2xlTGFiZWxQcm92aWRlckZhY3RvcnkoKSk7Ci0JCXRyZWUuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKTsKLQkJdHJlZS5zZXRMYWJlbFByb3ZpZGVyKGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKTsKLQkJdHJlZS5zZXRJbnB1dChuZXcgUm9vdCgpKTsKLQkJdHJlZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoYnVpbGRUcmVlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkpOwotCX0KLQkKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgYnVpbGRUcmVlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQlyZXR1cm4gbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCXNlbGVjdGVkVmVoaWNsZS5zZXRWYWx1ZSgoVmVoaWNsZSkgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpKTsKLQkJCX0KLQkJfTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQ29udHJvbFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOwotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCWJ1aWxkVXBwZXJDb250cm9sUGFuZWwocGFuZWwpOwotCQlidWlsZExvd2VyQ29udHJvbFBhbmVsKHBhbmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkVXBwZXJDb250cm9sUGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0JCXBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCB0cnVlKSk7Ci0JCWJ1aWxkVmVoaWNsZUNvbWJvKHBhbmVsKTsKLQkJYnVpbGRDb2xvckNvbWJvKHBhbmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkVmVoaWNsZUNvbWJvKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJZmluYWwgQ29tYm9WaWV3ZXIgY29tYm8gPSBuZXcgQ29tYm9WaWV3ZXIocGFyZW50LCBTV1QuUkVBRF9PTkxZKTsKLQkJY29tYm8uZ2V0Q29tYm8oKS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0JCWNvbWJvLnNldENvbnRlbnRQcm92aWRlcihuZXcgQXJyYXlDb250ZW50UHJvdmlkZXIoKSk7Ci0JCWNvbWJvLnNldExhYmVsUHJvdmlkZXIobmV3IFZlaGljbGVUeXBlTGFiZWxQcm92aWRlcigpKTsKLQkJY29tYm8uc2V0SW5wdXQoCi0JCQluZXcgVmVoaWNsZVR5cGVbXSB7Ci0JCQkJVmVoaWNsZVR5cGUuQklDWUNMRSwgVmVoaWNsZVR5cGUuQ0FSLCAKLQkJCQlWZWhpY2xlVHlwZS5UUlVDSywgVmVoaWNsZVR5cGUuQk9BVAotCQkJfSk7Ci0JCWNvbWJvLmdldENvbWJvKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWNvbWJvLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCXNlbGVjdGVkVmVoaWNsZSgpLnNldFZlaGljbGVUeXBlKChWZWhpY2xlVHlwZSkgKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCkpOyAKLQkJCQl9Ci0JCQl9KTsKLQkJc2VsZWN0ZWRWZWhpY2xlLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoCi0JCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsIAotCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQkJVmVoaWNsZSB2ZWhpY2xlID0gc2VsZWN0ZWRWZWhpY2xlKCk7Ci0JCQkJCWNvbWJvLmdldENvbWJvKCkuc2V0RW5hYmxlZCh2ZWhpY2xlICE9IG51bGwpOwotCQkJCQljb21iby5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKHZlaGljbGUgPT0gbnVsbCkgPyBudWxsIDogdmVoaWNsZS52ZWhpY2xlVHlwZSgpKSk7Ci0JCQkJfQotCQkJfSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidWlsZENvbG9yQ29tYm8oQ29tcG9zaXRlIHBhcmVudCkgewotCQlmaW5hbCBDb21ib1ZpZXdlciBjb21ibyA9IG5ldyBDb21ib1ZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQljb21iby5nZXRDb21ibygpLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwgZmFsc2UpKTsKLQkJY29tYm8uc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJY29tYm8uc2V0TGFiZWxQcm92aWRlcihuZXcgQ29sb3JMYWJlbFByb3ZpZGVyKCkpOwotCQljb21iby5zZXRJbnB1dChuZXcgQ29sb3JbXSB7Q29sb3IuUkVELCBDb2xvci5CTFVFLCBDb2xvci5ZRUxMT1csIENvbG9yLkdSRUVOfSk7Ci0JCWNvbWJvLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKLQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCXNlbGVjdGVkVmVoaWNsZSgpLnNldENvbG9yKChDb2xvcikgKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCkpOyAKLQkJCQl9Ci0JCQl9KTsKLQkJc2VsZWN0ZWRWZWhpY2xlLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoCi0JCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsIAotCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQkJVmVoaWNsZSB2ZWhpY2xlID0gc2VsZWN0ZWRWZWhpY2xlKCk7Ci0JCQkJCWNvbWJvLmdldENvbWJvKCkuc2V0RW5hYmxlZCh2ZWhpY2xlICE9IG51bGwpOwotCQkJCQljb21iby5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKHZlaGljbGUgPT0gbnVsbCkgPyBudWxsIDogdmVoaWNsZS5jb2xvcigpKSk7Ci0JCQkJfQotCQkJfSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidWlsZExvd2VyQ29udHJvbFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOwotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJYnVpbGRFZmZlY3RzTGFiZWwocGFuZWwpOwotCQlidWlsZEdyZXllZENoZWNrQm94KHBhbmVsKTsKLQkJYnVpbGRUcmFuc2x1Y2VudENoZWNrQm94KHBhbmVsKTsKLQkJYnVpbGRBY3Rpb25QYW5lbChwYW5lbCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidWlsZEVmZmVjdHNMYWJlbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOwotCQlsYWJlbC5zZXRUZXh0KCJDb2xvciBlZmZlY3RzOiAiKTsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLCBHcmlkRGF0YS5DRU5URVIsIGZhbHNlLCBmYWxzZSwgMywgMSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVpbGRHcmV5ZWRDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWZpbmFsIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLQkJYnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywgR3JpZERhdGEuQ0VOVEVSLCBmYWxzZSwgZmFsc2UpKTsKLQkJYnV0dG9uLnNldFRleHQoImdyZXllZCIpOwotCQlidXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJCW5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJCUBPdmVycmlkZQotCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQkJc2VsZWN0ZWRWZWhpY2xlKCkuc2V0R3JleWVkKGJ1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0JCQkJfQotCQkJfSk7Ci0JCXNlbGVjdGVkVmVoaWNsZS5hZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKAotCQkJUHJvcGVydHlWYWx1ZU1vZGVsLlZBTFVFLCAKLQkJCW5ldyBQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgewotCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7Ci0JCQkJCVZlaGljbGUgdmVoaWNsZSA9IHNlbGVjdGVkVmVoaWNsZSgpOwotCQkJCQlidXR0b24uc2V0RW5hYmxlZCh2ZWhpY2xlICE9IG51bGwpOwotCQkJCQlidXR0b24uc2V0U2VsZWN0aW9uKHZlaGljbGUgIT0gbnVsbCAmJiB2ZWhpY2xlLmlzR3JleWVkKCkpOwotCQkJCX0KLQkJCX0pOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVpbGRUcmFuc2x1Y2VudENoZWNrQm94KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJZmluYWwgQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQlidXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0JCWJ1dHRvbi5zZXRUZXh0KCJ0cmFuc2x1Y2VudCIpOwotCQlidXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcigKLQkJCW5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgewotCQkJCUBPdmVycmlkZQotCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQkJc2VsZWN0ZWRWZWhpY2xlKCkuc2V0VHJhbnNsdWNlbnQoYnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLQkJCQl9Ci0JCQl9KTsKLQkJc2VsZWN0ZWRWZWhpY2xlLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoCi0JCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsIAotCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQkJVmVoaWNsZSB2ZWhpY2xlID0gc2VsZWN0ZWRWZWhpY2xlKCk7Ci0JCQkJCWJ1dHRvbi5zZXRFbmFibGVkKHZlaGljbGUgIT0gbnVsbCk7Ci0JCQkJCWJ1dHRvbi5zZXRTZWxlY3Rpb24odmVoaWNsZSAhPSBudWxsICYmIHZlaGljbGUuaXNUcmFuc2x1Y2VudCgpKTsKLQkJCQl9Ci0JCQl9KTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQWN0aW9uUGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkZJTEwsIGZhbHNlLCBmYWxzZSkpOwotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCWJ1aWxkUmVmcmVzaFRyZWVBQ0koKS5maWxsKHBhbmVsKTsKLQl9Ci0JCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkUmVmcmVzaFRyZWVBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJSZWZyZXNoIHRyZWUiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlyZWZyZXNoVHJlZSgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoIlJlZnJlc2ggdGhlIHRyZWUncyBsYWJlbHMiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCQotCXZvaWQgcmVmcmVzaFRyZWUoKSB7Ci0JCXRyZWUucmVmcmVzaCgpOwotCX0KLQkKLQlwcml2YXRlIFZlaGljbGUgc2VsZWN0ZWRWZWhpY2xlKCkgewotCQlyZXR1cm4gc2VsZWN0ZWRWZWhpY2xlLmdldFZhbHVlKCk7Ci0JfQotCQotCQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFZlaGljbGVUeXBlTGFiZWxQcm92aWRlciBleHRlbmRzIEJhc2VMYWJlbFByb3ZpZGVyCi0JCWltcGxlbWVudHMgSUxhYmVsUHJvdmlkZXIKLQl7Ci0JCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJCi0JCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgewotCQkJcmV0dXJuICgoVmVoaWNsZVR5cGUpIGVsZW1lbnQpLmRlc2NyaXB0aW9uKCk7Ci0JCX0KLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29sb3JMYWJlbFByb3ZpZGVyIGV4dGVuZHMgQmFzZUxhYmVsUHJvdmlkZXIKLQkJaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlcgotCXsKLQkJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChDb2xvcikgZWxlbWVudCkuZGVzY3JpcHRpb24oKTsKLQkJfQotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBWZWhpY2xlQ29udGVudFByb3ZpZGVyRmFjdG9yeQotCQlpbXBsZW1lbnRzIFRyZWVJdGVtQ29udGVudFByb3ZpZGVyRmFjdG9yeQotCXsKLQkJcHVibGljIFRyZWVJdGVtQ29udGVudFByb3ZpZGVyIGJ1aWxkSXRlbUNvbnRlbnRQcm92aWRlcihPYmplY3QgaXRlbSwgRGVsZWdhdGluZ0NvbnRlbnRBbmRMYWJlbFByb3ZpZGVyIGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKSB7Ci0JCQlpZiAoaXRlbSBpbnN0YW5jZW9mIFJvb3QpIHsKLQkJCQlyZXR1cm4gbmV3IFJvb3RDb250ZW50UHJvdmlkZXIoCi0JCQkJCShSb290KSBpdGVtLCAoRGVsZWdhdGluZ1RyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcikgY29udGVudEFuZExhYmVsUHJvdmlkZXIpOwotCQkJfQotCQkJcmV0dXJuIG5ldyBWZWhpY2xlQ29udGVudFByb3ZpZGVyKAotCQkJCShWZWhpY2xlKSBpdGVtLCAoRGVsZWdhdGluZ1RyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcikgY29udGVudEFuZExhYmVsUHJvdmlkZXIpOwotCQl9Ci0JfQotCQotCQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFJvb3RDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVtQ29udGVudFByb3ZpZGVyPFZlaGljbGU+Ci0JewotCQlwdWJsaWMgUm9vdENvbnRlbnRQcm92aWRlcihSb290IGl0ZW0sIERlbGVnYXRpbmdUcmVlQ29udGVudEFuZExhYmVsUHJvdmlkZXIgY29udGVudEFuZExhYmVsUHJvdmlkZXIpIHsKLQkJCXN1cGVyKGl0ZW0sIGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKTsKLQkJfQotCQkKLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBSb290IGdldE1vZGVsKCkgewotCQkJcmV0dXJuIChSb290KSBzdXBlci5nZXRNb2RlbCgpOwotCQl9Ci0JCQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQkKLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCBDb2xsZWN0aW9uVmFsdWVNb2RlbDxWZWhpY2xlPiBidWlsZENoaWxkcmVuTW9kZWwoKSB7Ci0JCQlyZXR1cm4gbmV3IFN0YXRpY0NvbGxlY3Rpb25WYWx1ZU1vZGVsPFZlaGljbGU+KHRoaXMuZ2V0TW9kZWwoKS52ZWhpY2xlcygpKTsKLQkJfQotCX0KLQkKLQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBWZWhpY2xlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgotCXsKLQkJcHVibGljIFZlaGljbGVDb250ZW50UHJvdmlkZXIoVmVoaWNsZSBpdGVtLCBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyIGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKSB7Ci0JCQlzdXBlcihpdGVtLCBjb250ZW50QW5kTGFiZWxQcm92aWRlcik7Ci0JCX0KLQkJCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgVmVoaWNsZSBnZXRNb2RlbCgpIHsKLQkJCXJldHVybiAoVmVoaWNsZSkgc3VwZXIuZ2V0TW9kZWwoKTsKLQkJfQotCQkKLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KCkgewotCQkJcmV0dXJuIGdldE1vZGVsKCkucGFyZW50KCk7Ci0JCX0KLQkJCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgQ29sbGVjdGlvblZhbHVlTW9kZWwgYnVpbGRDaGlsZHJlbk1vZGVsKCkgewotCQkJcmV0dXJuIG5ldyBOdWxsQ29sbGVjdGlvblZhbHVlTW9kZWwoKTsKLQkJfQotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBWZWhpY2xlTGFiZWxQcm92aWRlckZhY3RvcnkKLQkJaW1wbGVtZW50cyBJdGVtTGFiZWxQcm92aWRlckZhY3RvcnkKLQl7Ci0JCXB1YmxpYyBJdGVtTGFiZWxQcm92aWRlciBidWlsZEl0ZW1MYWJlbFByb3ZpZGVyKE9iamVjdCBlbGVtZW50LCBEZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcikgewotCQkJcmV0dXJuIG5ldyBWZWhpY2xlTGFiZWxQcm92aWRlcigoVmVoaWNsZSkgZWxlbWVudCwgbGFiZWxQcm92aWRlcik7Ci0JCX0KLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmVoaWNsZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBBYnN0cmFjdEl0ZW1MYWJlbFByb3ZpZGVyCi0JewotCQlwdWJsaWMgVmVoaWNsZUxhYmVsUHJvdmlkZXIoVmVoaWNsZSB2ZWhpY2xlLCBEZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlcikgewotCQkJc3VwZXIodmVoaWNsZSwgbGFiZWxQcm92aWRlcik7Ci0JCX0KLQkJCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgUHJvcGVydHlWYWx1ZU1vZGVsPEltYWdlPiBidWlsZEltYWdlTW9kZWwoKSB7Ci0JCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxWZWhpY2xlLCBJbWFnZT4oCi0JCQkJCW5ldyBTdGF0aWNQcm9wZXJ0eVZhbHVlTW9kZWw8VmVoaWNsZT4oKFZlaGljbGUpIG1vZGVsKCkpLCAKLQkJCQkJVmVoaWNsZS5DT0xPUl9QUk9QRVJUWSwgVmVoaWNsZS5HUkVZRURfUFJPUEVSVFksIFZlaGljbGUuVFJBTlNMVUNFTlRfUFJPUEVSVFkpIHsKLQkJCQlAT3ZlcnJpZGUKLQkJCQlwcm90ZWN0ZWQgSW1hZ2UgYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJCXJldHVybiBzdWJqZWN0LmltYWdlKCk7Ci0JCQkJfQotCQkJfTsKLQkJfQotCQkKLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCBQcm9wZXJ0eVZhbHVlTW9kZWw8U3RyaW5nPiBidWlsZFRleHRNb2RlbCgpIHsKLQkJCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPFZlaGljbGUsIFN0cmluZz4oCi0JCQkJCW5ldyBTdGF0aWNQcm9wZXJ0eVZhbHVlTW9kZWw8VmVoaWNsZT4oKFZlaGljbGUpIG1vZGVsKCkpLCAKLQkJCQkJVmVoaWNsZS5WRUhJQ0xFX1RZUEVfUFJPUEVSVFksIFZlaGljbGUuQ09MT1JfUFJPUEVSVFkpIHsKLQkJCQlAT3ZlcnJpZGUKLQkJCQlwcm90ZWN0ZWQgU3RyaW5nIGJ1aWxkVmFsdWVfKCkgewotCQkJCQlyZXR1cm4gc3ViamVjdC5jb2xvcigpLmRlc2NyaXB0aW9uKCkgKyAnICcgKyBzdWJqZWN0LnZlaGljbGVUeXBlKCkuZGVzY3JpcHRpb24oKTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0JCQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIFByb3BlcnR5VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkRGVzY3JpcHRpb25Nb2RlbCgpIHsKLQkJCXJldHVybiBidWlsZFRleHRNb2RlbCgpOwotCQl9Ci0JfQotCQotCQotCXByaXZhdGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIFRyZWVOb2RlIGV4dGVuZHMgQWJzdHJhY3RNb2RlbAotCXsKLQkJcHJpdmF0ZSBUcmVlTm9kZSBwYXJlbnQ7Ci0JCQotCQkKLQkJcHVibGljIFRyZWVOb2RlKFRyZWVOb2RlIHBhcmVudCkgewotCQkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7Ci0JCX0KLQkJCi0JCQotCQlwdWJsaWMgVHJlZU5vZGUgcGFyZW50KCkgewotCQkJcmV0dXJuIHBhcmVudDsKLQkJfQotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBSb290IGV4dGVuZHMgVHJlZU5vZGUKLQl7Ci0JCXByb3RlY3RlZCBmaW5hbCBWZWhpY2xlW10gdmVoaWNsZXM7Ci0JCQotCQkKLQkJcHVibGljIFJvb3QoKSB7Ci0JCQlzdXBlcihudWxsKTsKLQkJCXZlaGljbGVzID0gbmV3IFZlaGljbGVbXSB7Ci0JCQkJbmV3IFZlaGljbGUodGhpcywgVmVoaWNsZVR5cGUuQklDWUNMRSwgQ29sb3IuQkxVRSksCi0JCQkJbmV3IFZlaGljbGUodGhpcywgVmVoaWNsZVR5cGUuQ0FSLCBDb2xvci5ZRUxMT1cpLAotCQkJCW5ldyBWZWhpY2xlKHRoaXMsIFZlaGljbGVUeXBlLlRSVUNLLCBDb2xvci5SRUQpLAotCQkJCW5ldyBWZWhpY2xlKHRoaXMsIFZlaGljbGVUeXBlLkJPQVQsIENvbG9yLkdSRUVOKX07Ci0JCX0KLQkJCi0JCXB1YmxpYyBWZWhpY2xlW10gdmVoaWNsZXMoKSB7Ci0JCQlyZXR1cm4gdmVoaWNsZXM7Ci0JCX0KLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmVoaWNsZSBleHRlbmRzIFRyZWVOb2RlCi0JewotCQlwcml2YXRlIFZlaGljbGVUeXBlIHZlaGljbGVUeXBlOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBWRUhJQ0xFX1RZUEVfUFJPUEVSVFkgPSAidmVoaWNsZVR5cGUiOwotCQkKLQkJcHJpdmF0ZSBDb2xvciBjb2xvcjsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ09MT1JfUFJPUEVSVFkgPSAiY29sb3IiOwotCQkKLQkJcHJpdmF0ZSBib29sZWFuIGdyZXllZCA9IGZhbHNlOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBHUkVZRURfUFJPUEVSVFkgPSAiZ3JleWVkIjsKLQkJCi0JCXByaXZhdGUgYm9vbGVhbiB0cmFuc2x1Y2VudCA9IGZhbHNlOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBUUkFOU0xVQ0VOVF9QUk9QRVJUWSA9ICJ0cmFuc2x1Y2VudCI7Ci0JCQotCQlwcml2YXRlIEltYWdlIGltYWdlOwotCQkKLQkJCQotCQlwdWJsaWMgVmVoaWNsZShUcmVlTm9kZSBwYXJlbnQsIFZlaGljbGVUeXBlIHZlaGljbGVUeXBlLCBDb2xvciBjb2xvcikgewotCQkJc3VwZXIocGFyZW50KTsKLQkJCXRoaXMudmVoaWNsZVR5cGUgPSB2ZWhpY2xlVHlwZTsKLQkJCXRoaXMuY29sb3IgPSBjb2xvcjsKLQkJfQotCQkKLQkJcHVibGljIFZlaGljbGVUeXBlIHZlaGljbGVUeXBlKCkgewotCQkJcmV0dXJuIHZlaGljbGVUeXBlOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBzZXRWZWhpY2xlVHlwZShWZWhpY2xlVHlwZSBuZXdWZWhpY2xlVHlwZSkgewotCQkJVmVoaWNsZVR5cGUgb2xkVmVoaWNsZVR5cGUgPSB2ZWhpY2xlVHlwZTsKLQkJCXZlaGljbGVUeXBlID0gbmV3VmVoaWNsZVR5cGU7Ci0JCQlmaXJlUHJvcGVydHlDaGFuZ2VkKFZFSElDTEVfVFlQRV9QUk9QRVJUWSwgb2xkVmVoaWNsZVR5cGUsIG5ld1ZlaGljbGVUeXBlKTsKLQkJfQotCQkKLQkJcHVibGljIENvbG9yIGNvbG9yKCkgewotCQkJcmV0dXJuIGNvbG9yOwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBzZXRDb2xvcihDb2xvciBuZXdDb2xvcikgewotCQkJQ29sb3Igb2xkQ29sb3IgPSBjb2xvcjsKLQkJCWNvbG9yID0gbmV3Q29sb3I7Ci0JCQlmaXJlUHJvcGVydHlDaGFuZ2VkKENPTE9SX1BST1BFUlRZLCBvbGRDb2xvciwgbmV3Q29sb3IpOwotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc0dyZXllZCgpIHsKLQkJCXJldHVybiBncmV5ZWQ7Ci0JCX0KLQkJCi0JCXB1YmxpYyB2b2lkIHNldEdyZXllZChib29sZWFuIG5ld0dyZXllZCkgewotCQkJYm9vbGVhbiBvbGRHcmV5ZWQgPSBncmV5ZWQ7Ci0JCQlncmV5ZWQgPSBuZXdHcmV5ZWQ7Ci0JCQlmaXJlUHJvcGVydHlDaGFuZ2VkKEdSRVlFRF9QUk9QRVJUWSwgb2xkR3JleWVkLCBuZXdHcmV5ZWQpOwotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc1RyYW5zbHVjZW50KCkgewotCQkJcmV0dXJuIHRyYW5zbHVjZW50OwotCQl9Ci0JCQotCQlwdWJsaWMgdm9pZCBzZXRUcmFuc2x1Y2VudChib29sZWFuIG5ld1RyYW5zbHVjZW50KSB7Ci0JCQlib29sZWFuIG9sZFRyYW5zbHVjZW50ID0gdHJhbnNsdWNlbnQ7Ci0JCQl0cmFuc2x1Y2VudCA9IG5ld1RyYW5zbHVjZW50OwotCQkJZmlyZVByb3BlcnR5Q2hhbmdlZChUUkFOU0xVQ0VOVF9QUk9QRVJUWSwgb2xkVHJhbnNsdWNlbnQsIG5ld1RyYW5zbHVjZW50KTsKLQkJfQotCQkKLQkJcHVibGljIEltYWdlIGltYWdlKCkgewotCQkJaWYgKGltYWdlICE9IG51bGwpIHsKLQkJCQlpbWFnZS5kaXNwb3NlKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBJbWFnZUZhY3RvcnkuaW1hZ2UoY29sb3IoKSwgZ3JleWVkLCB0cmFuc2x1Y2VudCk7Ci0JCX0KLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgZW51bSBWZWhpY2xlVHlwZQotCXsKLQkJQklDWUNMRSgiYmljeWNsZSIpLAotCQlDQVIoImNhciIpLAotCQlUUlVDSygidHJ1Y2siKSwKLQkJQk9BVCgiYm9hdCIpOwotCQkKLQkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247Ci0JCQotCQlwcml2YXRlIFZlaGljbGVUeXBlKFN0cmluZyBkZXNjcmlwdGlvbikgewotCQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQl9Ci0JCQotCQlwdWJsaWMgU3RyaW5nIGRlc2NyaXB0aW9uKCkgewotCQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCQl9Ci0JCQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCXJldHVybiBkZXNjcmlwdGlvbigpOwotCQl9Ci0JfQotCQotCQotCXByaXZhdGUgc3RhdGljIGVudW0gQ29sb3IKLQl7Ci0JCVJFRCgicmVkIiwgbmV3IFJHQigyNTUsIDAsIDApKSwKLQkJQkxVRSgiYmx1ZSIsIG5ldyBSR0IoMCwgMCwgMjU1KSksCi0JCVlFTExPVygieWVsbG93IiwgbmV3IFJHQigyNTUsIDI1NSwgMCkpLAotCQlHUkVFTigiZ3JlZW4iLCBuZXcgUkdCKDAsIDI1NSwgMCkpOwotCQkKLQkJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247Ci0JCQotCQlwcml2YXRlIGZpbmFsIFJHQiByZ2I7Ci0JCQotCQlwcml2YXRlIENvbG9yKFN0cmluZyBkZXNjcmlwdGlvbiwgUkdCIHJnYikgewotCQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCQkJdGhpcy5yZ2IgPSByZ2I7Ci0JCX0KLQkJCi0JCXB1YmxpYyBTdHJpbmcgZGVzY3JpcHRpb24oKSB7Ci0JCQlyZXR1cm4gZGVzY3JpcHRpb247Ci0JCX0KLQkJCi0JCXB1YmxpYyBSR0IgcmdiKCkgewotCQkJcmV0dXJuIHJnYjsKLQkJfQotCQkKLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlyZXR1cm4gZGVzY3JpcHRpb24oKTsKLQkJfQotCX0KLQkKLQkKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBJbWFnZUZhY3RvcnkKLQl7Ci0JCXByaXZhdGUgc3RhdGljIFJHQiByZ2IoQ29sb3IgY29sb3IsIGJvb2xlYW4gZ3JleWVkLCBib29sZWFuIHRyYW5zbHVjZW50KSB7Ci0JCQlSR0IgcmdiID0gKGdyZXllZCkgPyBuZXcgUkdCKDEyNywgMTI3LCAxMjcpIDogY29sb3IucmdiKCk7Ci0JCQlpZiAodHJhbnNsdWNlbnQpIHsKLQkJCQlyZ2IgPSBuZXcgUkdCKHRyYW5zbHVjaWZ5KHJnYi5yZWQpLCB0cmFuc2x1Y2lmeShyZ2IuZ3JlZW4pLCB0cmFuc2x1Y2lmeShyZ2IuYmx1ZSkpOwotCQkJfQotCQkJcmV0dXJuIHJnYjsKLQkJfQotCQkKLQkJcHJpdmF0ZSBzdGF0aWMgaW50IHRyYW5zbHVjaWZ5KGludCBjb2xvcikgewotCQkJcmV0dXJuIDI1NSAtIChpbnQpICgoMjU1IC0gY29sb3IpICogMC4zKTsKLQkJfQotCQkKLQkJcHVibGljIHN0YXRpYyBJbWFnZSBpbWFnZShDb2xvciBjb2xvciwgYm9vbGVhbiBncmV5ZWQsIGJvb2xlYW4gdHJhbnNsdWNlbnQpIHsKLQkJCVBhbGV0dGVEYXRhIHBkID0gbmV3IFBhbGV0dGVEYXRhKG5ldyBSR0JbXSB7cmdiKGNvbG9yLCBncmV5ZWQsIHRyYW5zbHVjZW50KX0pOwotCQkJSW1hZ2VEYXRhIGlkID0gbmV3IEltYWdlRGF0YSgyMCwgMjAsIDEsIHBkKTsKLQkJCWZvciAoaW50IHggPSAwOyB4IDwgMjA7IHggKyspIHsKLQkJCQlmb3IgKGludCB5ID0gMDsgeSA8IDIwOyB5ICsrKSB7Ci0JCQkJCWlkLnNldFBpeGVsKHgsIHksIDApOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiBuZXcgSW1hZ2UoRGlzcGxheS5nZXRDdXJyZW50KCksIGlkKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9qZmFjZS9EZWxlZ2F0aW5nVHJlZUNvbnRlbnRQcm92aWRlclVpVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL2pmYWNlL0RlbGVnYXRpbmdUcmVlQ29udGVudFByb3ZpZGVyVWlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YWM2NzEuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL2pmYWNlL0RlbGVnYXRpbmdUcmVlQ29udGVudFByb3ZpZGVyVWlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwuamZhY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5CYXNlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuQXBwbGljYXRpb25XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuamZhY2UuQWJzdHJhY3RUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuamZhY2UuRGVsZWdhdGluZ1RyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuamZhY2UuRGVsZWdhdGluZ0NvbnRlbnRBbmRMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5qZmFjZS5UcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuamZhY2UuVHJlZUl0ZW1Db250ZW50UHJvdmlkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkNsYXNzVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ29sbGVjdGlvblRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLml0ZXJhdG9ycy5GaWx0ZXJpbmdJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5pdGVyYXRvcnMuUmVhZE9ubHlMaXN0SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLlRyYW5zZm9ybWF0aW9uSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwuQWJzdHJhY3RNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5Db21wb3NpdGVDb2xsZWN0aW9uVmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5MaXN0QXNwZWN0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5MaXN0Q29sbGVjdGlvblZhbHVlTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TdGF0aWNDb2xsZWN0aW9uVmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC5ldmVudC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLmxpc3RlbmVyLlByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuQ29sbGVjdGlvblZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuTGlzdFZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLQotcHVibGljIGNsYXNzIERlbGVnYXRpbmdUcmVlQ29udGVudFByb3ZpZGVyVWlUZXN0IGV4dGVuZHMgQXBwbGljYXRpb25XaW5kb3cKLXsKLQlwcml2YXRlIGZpbmFsIFJvb3Qgcm9vdDsKLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8VHJlZU5vZGU+IHNlbGVjdGVkTm9kZTsKLQotCXByaXZhdGUgVHJlZVZpZXdlciBjb250cm9sVHJlZTsKLQotCXByaXZhdGUgVHJlZVZpZXdlciB2aWV3VHJlZTsKLQotCXByaXZhdGUgVGV4dCBub2RlTmFtZVRleHQ7Ci0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJV2luZG93IHdpbmRvdyA9IG5ldyBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRQcm92aWRlclVpVGVzdChhcmdzKTsKLQkJd2luZG93LnNldEJsb2NrT25PcGVuKHRydWUpOwotCQl3aW5kb3cub3BlbigpOwotCQlEaXNwbGF5LmdldEN1cnJlbnQoKS5kaXNwb3NlKCk7Ci0JCVN5c3RlbS5leGl0KDApOwotCX0KLQotCXByaXZhdGUgRGVsZWdhdGluZ1RyZWVDb250ZW50UHJvdmlkZXJVaVRlc3QoU3RyaW5nW10gYXJncykgewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy5yb290ID0gbmV3IFJvb3QoKTsKLQkJdGhpcy5yb290LmFkZENoaWxkKCJQYXJlbnRfMSIpOwotCQl0aGlzLnNlbGVjdGVkTm9kZSA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8VHJlZU5vZGU+KHRoaXMucm9vdCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgewotCQkoKFNoZWxsKSBwYXJlbnQpLnNldFRleHQoQ2xhc3NUb29scy5zaG9ydENsYXNzTmFtZUZvck9iamVjdCh0aGlzKSk7Ci0JCXBhcmVudC5zZXRTaXplKDgwMCwgNDAwKTsKLQkJcGFyZW50LnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQkJQ29tcG9zaXRlIG1haW5QYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCW1haW5QYW5lbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJbWFpblBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQkJYnVpbGRUcmVlUGFuZWwobWFpblBhbmVsKTsKLQkJYnVpbGRDb250cm9sUGFuZWwobWFpblBhbmVsKTsKLQkJcmV0dXJuIG1haW5QYW5lbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRUcmVlUGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJYnVpbGRDb250cm9sVHJlZVBhbmVsKHBhbmVsKTsKLQkJYnVpbGRWaWV3VHJlZVBhbmVsKHBhbmVsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDb250cm9sVHJlZVBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJY29udHJvbFRyZWUgPSBidWlsZFRyZWVQYW5lbCgKLQkJCQlwYXJlbnQsICJDb250cm9sIHRyZWUiLAotCQkJCW5ldyBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKG5ldyBDb250cm9sVHJlZUl0ZW1Db250ZW50UHJvdmlkZXJGYWN0b3J5KCkpLAotCQkJCW5ldyBMYWJlbFByb3ZpZGVyKCkpOwotCQljb250cm9sVHJlZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoYnVpbGRUcmVlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkpOwotCQlzZWxlY3RlZE5vZGUuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigKLQkJCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsCi0JCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7Ci0JCQkJCQljb250cm9sVHJlZS5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZXZlbnQuZ2V0TmV3VmFsdWUoKSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRWaWV3VHJlZVBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdmlld1RyZWUgPSBidWlsZFRyZWVQYW5lbCgKLQkJCQlwYXJlbnQsICJWaWV3IHRyZWUiLAotCQkJCW5ldyBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKG5ldyBWaWV3VHJlZUl0ZW1Db250ZW50UHJvdmlkZXJGYWN0b3J5KCkpLAotCQkJCW5ldyBMYWJlbFByb3ZpZGVyKCkpOwotCX0KLQotCXByaXZhdGUgVHJlZVZpZXdlciBidWlsZFRyZWVQYW5lbChDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWxUZXh0LCBJVHJlZUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIsIElMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCXBhbmVsLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lbCwgU1dULkxFRlQpOwotCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsIEdyaWREYXRhLkNFTlRFUiwgZmFsc2UsIGZhbHNlKSk7Ci0JCWxhYmVsLnNldFRleHQobGFiZWxUZXh0KTsKLQotCQlmaW5hbCBUcmVlVmlld2VyIHRyZWUgPSBuZXcgVHJlZVZpZXdlcihwYW5lbCwgU1dULlNJTkdMRSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5CT1JERVIpOwotCQl0cmVlLmdldFRyZWUoKS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5GSUxMLCB0cnVlLCB0cnVlKSk7Ci0JCXRyZWUuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7Ci0JCXRyZWUuc2V0TGFiZWxQcm92aWRlcihsYWJlbFByb3ZpZGVyKTsKLQkJdHJlZS5zZXRJbnB1dChyb290KTsKLQotCQlyZXR1cm4gdHJlZTsKLQl9Ci0KLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgYnVpbGRUcmVlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgewotCQlyZXR1cm4gbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJCVRyZWVOb2RlIHNlbGVjdGlvbiA9IChUcmVlTm9kZSkgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCXNlbGVjdGVkTm9kZS5zZXRWYWx1ZSgoc2VsZWN0aW9uID09IG51bGwpID8gcm9vdCA6IHNlbGVjdGlvbik7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQ29udHJvbFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuRklMTCwgdHJ1ZSwgZmFsc2UpKTsKLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDYsIGZhbHNlKSk7Ci0JCWJ1aWxkTm9kZU5hbWVUZXh0KHBhbmVsKTsKLQkJYnVpbGRBZGRDaGlsZEFDSSgpLmZpbGwocGFuZWwpOwotCQlidWlsZEFkZE5lc3RlZENoaWxkQUNJKCkuZmlsbChwYW5lbCk7Ci0JCWJ1aWxkUmVtb3ZlQUNJKCkuZmlsbChwYW5lbCk7Ci0JCWJ1aWxkQ2xlYXJNb2RlbEFDSSgpLmZpbGwocGFuZWwpOwotCQlidWlsZFJlc3RvcmVNb2RlbEFDSSgpLmZpbGwocGFuZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE5vZGVOYW1lVGV4dChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCW5vZGVOYW1lVGV4dCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSB8IFNXVC5CT1JERVIpOwotCQlub2RlTmFtZVRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZEFkZENoaWxkQUNJKCkgewotCQlmaW5hbCBBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiQWRkIGNoaWxkIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJYWRkQ2hpbGQoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJBZGQgYSBjaGlsZCB3aXRoIHRoZSBnaXZlbiBuYW1lIik7Ci0JCXNlbGVjdGVkTm9kZS5hZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKAotCQkJCVByb3BlcnR5VmFsdWVNb2RlbC5WQUxVRSwKLQkJCQluZXcgUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKLQkJCQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2VkKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKLQkJCQkJCWFjdGlvbi5zZXRFbmFibGVkKCgoVHJlZU5vZGUpIGV2ZW50LmdldE5ld1ZhbHVlKCkpLmNhbkhhdmVDaGlsZHJlbigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCSk7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZEFkZE5lc3RlZENoaWxkQUNJKCkgewotCQlmaW5hbCBBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiQWRkIG5lc3RlZCBjaGlsZCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCWFkZE5lc3RlZENoaWxkKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiQWRkIGEgbmVzdGVkIGNoaWxkIHdpdGggdGhlIGdpdmVuIG5hbWUiKTsKLQkJYWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlzZWxlY3RlZE5vZGUuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigKLQkJCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsCi0JCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7Ci0JCQkJCQlhY3Rpb24uc2V0RW5hYmxlZCgoKFRyZWVOb2RlKSBldmVudC5nZXROZXdWYWx1ZSgpKS5jYW5IYXZlTmVzdGVkQ2hpbGRyZW4oKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZW1vdmVBQ0koKSB7Ci0JCWZpbmFsIEFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJSZW1vdmUiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlyZW1vdmUoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJSZW1vdmUgdGhlIHNlbGVjdGVkIG5vZGUiKTsKLQkJYWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlzZWxlY3RlZE5vZGUuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigKLQkJCQlQcm9wZXJ0eVZhbHVlTW9kZWwuVkFMVUUsCi0JCQkJbmV3IFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7Ci0JCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlZChQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7Ci0JCQkJCQlhY3Rpb24uc2V0RW5hYmxlZChldmVudC5nZXROZXdWYWx1ZSgpICE9IHJvb3QpOwotCQkJCQl9Ci0JCQkJfQotCQkJKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkQ2xlYXJNb2RlbEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oIkNsZWFyIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJY2xlYXJNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoIkNsZWFyIHRoZSBtb2RlbCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZXN0b3JlTW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJSZXN0b3JlIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJcmVzdG9yZU1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiUmVzdG9yZSB0aGUgbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBhZGRDaGlsZCgpIHsKLQkJU3RyaW5nIG5vZGVOYW1lID0gbm9kZU5hbWVUZXh0LmdldFRleHQoKTsKLQkJaWYgKG5vZGVOYW1lLmxlbmd0aCgpICE9IDApIHsKLQkJCXNlbGVjdGVkTm9kZS5nZXRWYWx1ZSgpLmFkZENoaWxkKG5vZGVOYW1lKTsKLQkJfQotCX0KLQotCXZvaWQgYWRkTmVzdGVkQ2hpbGQoKSB7Ci0JCVN0cmluZyBub2RlTmFtZSA9IG5vZGVOYW1lVGV4dC5nZXRUZXh0KCk7Ci0JCWlmIChub2RlTmFtZS5sZW5ndGgoKSAhPSAwKSB7Ci0JCQlzZWxlY3RlZE5vZGUuZ2V0VmFsdWUoKS5hZGROZXN0ZWRDaGlsZChub2RlTmFtZSk7Ci0JCX0KLQl9Ci0KLQl2b2lkIHJlbW92ZSgpIHsKLQkJVHJlZU5vZGUgbm9kZSA9IHNlbGVjdGVkTm9kZS5nZXRWYWx1ZSgpOwotCQlub2RlLnBhcmVudCgpLnJlbW92ZUNoaWxkKG5vZGUpOwotCX0KLQotCXZvaWQgY2xlYXJNb2RlbCgpIHsKLQkJY29udHJvbFRyZWUuc2V0SW5wdXQobnVsbCk7Ci0JCXZpZXdUcmVlLnNldElucHV0KG51bGwpOwotCX0KLQotCXZvaWQgcmVzdG9yZU1vZGVsKCkgewotCQljb250cm9sVHJlZS5zZXRJbnB1dChyb290KTsKLQkJdmlld1RyZWUuc2V0SW5wdXQocm9vdCk7Ci0JfQotCi0KLQlwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRyZWVJdGVtQ29udGVudFByb3ZpZGVyRmFjdG9yeQotCQlpbXBsZW1lbnRzIFRyZWVJdGVtQ29udGVudFByb3ZpZGVyRmFjdG9yeQotCXsKLQkJcHVibGljIFRyZWVJdGVtQ29udGVudFByb3ZpZGVyIGJ1aWxkSXRlbUNvbnRlbnRQcm92aWRlcigKLQkJCU9iamVjdCBpdGVtLCBEZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXIgY29udGVudEFuZExhYmVsUHJvdmlkZXIpIHsKLQkJCXJldHVybiBuZXcgR2VuZXJpY1RyZWVJdGVtQ29udGVudFByb3ZpZGVyKAotCQkJCShUcmVlTm9kZSkgaXRlbSwgKERlbGVnYXRpbmdUcmVlQ29udGVudEFuZExhYmVsUHJvdmlkZXIpIGNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyKTsKLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29udHJvbFRyZWVJdGVtQ29udGVudFByb3ZpZGVyRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZW1Db250ZW50UHJvdmlkZXJGYWN0b3J5Ci0JewotCi0JfQotCi0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBWaWV3VHJlZUl0ZW1Db250ZW50UHJvdmlkZXJGYWN0b3J5Ci0JCWV4dGVuZHMgQWJzdHJhY3RUcmVlSXRlbUNvbnRlbnRQcm92aWRlckZhY3RvcnkKLQl7Ci0JCUBPdmVycmlkZQotCQlwdWJsaWMgVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIgYnVpbGRJdGVtQ29udGVudFByb3ZpZGVyKAotCQkJCU9iamVjdCBpdGVtLCBEZWxlZ2F0aW5nQ29udGVudEFuZExhYmVsUHJvdmlkZXIgY29udGVudEFuZExhYmVsUHJvdmlkZXIpIHsKLQkJCWlmIChpdGVtIGluc3RhbmNlb2YgUGFyZW50KSB7Ci0JCQkJcmV0dXJuIG5ldyBWaWV3VHJlZVBhcmVudEl0ZW1Db250ZW50UHJvdmlkZXIoCi0JCQkJCQkoUGFyZW50KSBpdGVtLCAoRGVsZWdhdGluZ1RyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcikgY29udGVudEFuZExhYmVsUHJvdmlkZXIpOwotCQkJfQotCQkJcmV0dXJuIHN1cGVyLmJ1aWxkSXRlbUNvbnRlbnRQcm92aWRlcihpdGVtLCBjb250ZW50QW5kTGFiZWxQcm92aWRlcik7Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIEdlbmVyaWNUcmVlSXRlbUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZW1Db250ZW50UHJvdmlkZXI8VHJlZU5vZGU+Ci0JewotCQlwdWJsaWMgR2VuZXJpY1RyZWVJdGVtQ29udGVudFByb3ZpZGVyKAotCQkJCVRyZWVOb2RlIHRyZWVOb2RlLCBEZWxlZ2F0aW5nVHJlZUNvbnRlbnRBbmRMYWJlbFByb3ZpZGVyIHRyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcikgewotCQkJc3VwZXIodHJlZU5vZGUsIHRyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlcik7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgVHJlZU5vZGUgdHJlZU5vZGUoKSB7Ci0JCQlyZXR1cm4gKFRyZWVOb2RlKSBnZXRNb2RlbCgpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBUcmVlTm9kZSBnZXRQYXJlbnQoKSB7Ci0JCQlyZXR1cm4gdHJlZU5vZGUoKS5wYXJlbnQoKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgQ29sbGVjdGlvblZhbHVlTW9kZWw8VHJlZU5vZGU+IGJ1aWxkQ2hpbGRyZW5Nb2RlbCgpIHsKLQkJCXJldHVybiBuZXcgTGlzdENvbGxlY3Rpb25WYWx1ZU1vZGVsQWRhcHRlcjxUcmVlTm9kZT4oCi0JCQluZXcgTGlzdEFzcGVjdEFkYXB0ZXI8VHJlZU5vZGUsIFRyZWVOb2RlPihUcmVlTm9kZS5DSElMRFJFTl9MSVNULCB0cmVlTm9kZSgpKSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHJvdGVjdGVkIExpc3RJdGVyYXRvcjxUcmVlTm9kZT4gbGlzdEl0ZXJhdG9yXygpIHsKLQkJCQkJcmV0dXJuIHRyZWVOb2RlKCkuY2hpbGRyZW4oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFZpZXdUcmVlUGFyZW50SXRlbUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEdlbmVyaWNUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgotCXsKLQkJcHVibGljIFZpZXdUcmVlUGFyZW50SXRlbUNvbnRlbnRQcm92aWRlcigKLQkJCQlUcmVlTm9kZSB0cmVlTm9kZSwgRGVsZWdhdGluZ1RyZWVDb250ZW50QW5kTGFiZWxQcm92aWRlciB0cmVlQ29udGVudEFuZExhYmVsUHJvdmlkZXIpIHsKLQkJCXN1cGVyKHRyZWVOb2RlLCB0cmVlQ29udGVudEFuZExhYmVsUHJvdmlkZXIpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBUcmVlTm9kZSBnZXRQYXJlbnQoKSB7Ci0JCQlUcmVlTm9kZSBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQoKTsKLQkJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBOZXN0KSB7Ci0JCQkJcGFyZW50ID0gcGFyZW50LnBhcmVudCgpOwotCQkJfQotCQkJcmV0dXJuIHBhcmVudDsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgQ29sbGVjdGlvblZhbHVlTW9kZWw8VHJlZU5vZGU+IGJ1aWxkQ2hpbGRyZW5Nb2RlbCgpIHsKLQkJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZUNvbGxlY3Rpb25WYWx1ZU1vZGVsPFRyZWVOb2RlLCBUcmVlTm9kZT4oc3VwZXIuYnVpbGRDaGlsZHJlbk1vZGVsKCkpIHsKLQkJCQkJCUBPdmVycmlkZQotCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb25WYWx1ZU1vZGVsPFRyZWVOb2RlPiB0cmFuc2Zvcm0oVHJlZU5vZGUgdmFsdWUpIHsKLQkJCQkJCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBOZXN0KSB7Ci0JCQkJCQkJCWZpbmFsIE5lc3QgbmVzdCA9IChOZXN0KSB2YWx1ZTsKLQkJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Q29sbGVjdGlvblZhbHVlTW9kZWxBZGFwdGVyPFRyZWVOb2RlPigKLQkJCQkJCQkJCQluZXcgTGlzdEFzcGVjdEFkYXB0ZXI8VHJlZU5vZGUsIFRyZWVOb2RlPihUcmVlTm9kZS5DSElMRFJFTl9MSVNULCBuZXN0KSB7Ci0JCQkJCQkJCQkJCUBPdmVycmlkZQotCQkJCQkJCQkJCQlwcm90ZWN0ZWQgTGlzdEl0ZXJhdG9yPFRyZWVOb2RlPiBsaXN0SXRlcmF0b3JfKCkgewotCQkJCQkJCQkJCQkJcmV0dXJuIG5lc3QuY2hpbGRyZW4oKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCSk7Ci0JCQkJCQkJfQotCQkJCQkJCXJldHVybiBuZXcgU3RhdGljQ29sbGVjdGlvblZhbHVlTW9kZWw8VHJlZU5vZGU+KENvbGxlY3Rpb25Ub29scy5jb2xsZWN0aW9uKHZhbHVlKSk7Ci0JCQkJCQl9Ci0JCQkJCX07Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIExhYmVsUHJvdmlkZXIgZXh0ZW5kcyBCYXNlTGFiZWxQcm92aWRlcgotCQlpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyCi0JewotCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCQlyZXR1cm4gKChUcmVlTm9kZSkgZWxlbWVudCkuZ2V0TmFtZSgpOwotCQl9Ci0JfQotCi0KLQlwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBUcmVlTm9kZSBleHRlbmRzIEFic3RyYWN0TW9kZWwKLQl7Ci0JCXByaXZhdGUgVHJlZU5vZGUgcGFyZW50OwotCi0JCXByb3RlY3RlZCBmaW5hbCBMaXN0PFRyZWVOb2RlPiBjaGlsZHJlbjsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0hJTERSRU5fTElTVCA9ICJjaGlsZHJlbiI7Ci0KLQkJcHJvdGVjdGVkIFN0cmluZyBuYW1lOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBOQU1FX1BST1BFUlRZID0gIm5hbWUiOwotCi0KLQkJcHVibGljIFRyZWVOb2RlKFRyZWVOb2RlIHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKLQkJCXRoaXMucGFyZW50ID0gcGFyZW50OwotCQkJdGhpcy5jaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8VHJlZU5vZGU+KCk7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl9Ci0KLQkJcHVibGljIFRyZWVOb2RlIHBhcmVudCgpIHsKLQkJCXJldHVybiBwYXJlbnQ7Ci0JCX0KLQotCQlwdWJsaWMgTGlzdEl0ZXJhdG9yPFRyZWVOb2RlPiBjaGlsZHJlbigpIHsKLQkJCXJldHVybiBuZXcgUmVhZE9ubHlMaXN0SXRlcmF0b3I8VHJlZU5vZGU+KGNoaWxkcmVuKTsKLQkJfQotCi0JCXByb3RlY3RlZCB2b2lkIGFkZENoaWxkKFRyZWVOb2RlIGNoaWxkKSB7Ci0JCQlhZGRJdGVtVG9MaXN0KGNoaWxkLCBjaGlsZHJlbiwgQ0hJTERSRU5fTElTVCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVDaGlsZChUcmVlTm9kZSBjaGlsZCkgewotCQkJcmVtb3ZlSXRlbUZyb21MaXN0KGNoaWxkLCBjaGlsZHJlbiwgQ0hJTERSRU5fTElTVCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVDaGlsZChpbnQgaW5kZXgpIHsKLQkJCXJlbW92ZUl0ZW1Gcm9tTGlzdChpbmRleCwgY2hpbGRyZW4sIENISUxEUkVOX0xJU1QpOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIG5hbWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKSB7Ci0JCQlTdHJpbmcgb2xkTmFtZSA9IG5hbWU7Ci0JCQluYW1lID0gbmV3TmFtZTsKLQkJCWZpcmVQcm9wZXJ0eUNoYW5nZWQoTkFNRV9QUk9QRVJUWSwgb2xkTmFtZSwgbmV3TmFtZSk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBjYW5IYXZlQ2hpbGRyZW4oKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhZGRDaGlsZChTdHJpbmcgbmFtZSkgewotCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBjYW5IYXZlTmVzdGVkQ2hpbGRyZW4oKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhZGROZXN0ZWRDaGlsZChTdHJpbmcgbmFtZSkgewotCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVpbGRlciBzYikgewotCQkJc2IuYXBwZW5kKGdldE5hbWUoKSk7Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFJvb3QgZXh0ZW5kcyBUcmVlTm9kZQotCXsKLQkJcHVibGljIFJvb3QoKSB7Ci0JCQlzdXBlcihudWxsLCBudWxsKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgYm9vbGVhbiBjYW5IYXZlQ2hpbGRyZW4oKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBhZGRDaGlsZChTdHJpbmcgbmFtZSkgewotCQkJYWRkQ2hpbGQobmV3IFBhcmVudCh0aGlzLCBuYW1lKSk7Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFBhcmVudCBleHRlbmRzIFRyZWVOb2RlCi0JewotCQlwdWJsaWMgUGFyZW50KFRyZWVOb2RlIHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKLQkJCXN1cGVyKHBhcmVudCwgbmFtZSk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIGJvb2xlYW4gY2FuSGF2ZUNoaWxkcmVuKCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIHZvaWQgYWRkQ2hpbGQoU3RyaW5nIG5hbWUpIHsKLQkJCWFkZENoaWxkKG5ldyBDaGlsZCh0aGlzLCBuYW1lKSk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIGJvb2xlYW4gY2FuSGF2ZU5lc3RlZENoaWxkcmVuKCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIHZvaWQgYWRkTmVzdGVkQ2hpbGQoU3RyaW5nIG5hbWUpIHsKLQkJCVRyZWVOb2RlIG5lc3QgPSBuZXcgTmVzdCh0aGlzKTsKLQkJCWFkZENoaWxkKG5lc3QpOwotCQkJbmVzdC5hZGRDaGlsZChuYW1lKTsKLQkJfQotCi0JCXB1YmxpYyBJdGVyYXRvcjxDaGlsZD4gbmVzdGxlc3NDaGlsZHJlbigpIHsKLQkJCXJldHVybiBuZXcgRmlsdGVyaW5nSXRlcmF0b3I8Q2hpbGQsIENoaWxkPigKLQkJCQkJbmV3IFRyYW5zZm9ybWF0aW9uSXRlcmF0b3I8VHJlZU5vZGUsIENoaWxkPihjaGlsZHJlbigpKSB7Ci0JCQkJCQlAT3ZlcnJpZGUKLQkJCQkJCXByb3RlY3RlZCBDaGlsZCB0cmFuc2Zvcm0oVHJlZU5vZGUgbmV4dCkgewotCQkJCQkJCWlmIChuZXh0IGluc3RhbmNlb2YgTmVzdCkgewotCQkJCQkJCQlyZXR1cm4gKChOZXN0KSBuZXh0KS5jaGlsZCgpOwotCQkJCQkJCX0KLQkJCQkJCQlyZXR1cm4gKENoaWxkKSBuZXh0OwotCQkJCQkJfQotCQkJCQl9KSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHJvdGVjdGVkIGJvb2xlYW4gYWNjZXB0KENoaWxkIGMpIHsKLQkJCQkJcmV0dXJuIGMgIT0gbnVsbDsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0JfQotCi0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBOZXN0IGV4dGVuZHMgVHJlZU5vZGUKLQl7Ci0JCXB1YmxpYyBOZXN0KFRyZWVOb2RlIHBhcmVudCkgewotCQkJc3VwZXIocGFyZW50LCAibmVzdCIpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBib29sZWFuIGNhbkhhdmVDaGlsZHJlbigpIHsKLQkJCXJldHVybiBjaGlsZHJlbi5zaXplKCkgPT0gMDsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBhZGRDaGlsZChTdHJpbmcgbmFtZSkgewotCQkJYWRkQ2hpbGQobmV3IENoaWxkKHRoaXMsIG5hbWUpKTsKLQkJfQotCi0JCS8qIGNhbiBvbmx5IGhhdmUgb25lIGNoaWxkICovCi0JCXB1YmxpYyBDaGlsZCBjaGlsZCgpIHsKLQkJCXJldHVybiAoY2hpbGRyZW4uaXNFbXB0eSgpKSA/IG51bGwgOiAoQ2hpbGQpIGNoaWxkcmVuLmdldCgwKTsKLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2hpbGQgZXh0ZW5kcyBUcmVlTm9kZQotCXsKLQkJcHVibGljIENoaWxkKFRyZWVOb2RlIHBhcmVudCwgU3RyaW5nIG5hbWUpIHsKLQkJCXN1cGVyKHBhcmVudCwgbmFtZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm0vSnBhUGxhdGZvcm1VaUV4dGVuc2lvblRlc3RzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvcGxhdGZvcm0vSnBhUGxhdGZvcm1VaUV4dGVuc2lvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjYmVmZTIuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3BsYXRmb3JtL0pwYVBsYXRmb3JtVWlFeHRlbnNpb25UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwucGxhdGZvcm07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LmNvcmUuSnBhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuY29yZS5pbnRlcm5hbC5KcGFQbGF0Zm9ybVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5jb3JlLnRlc3RzLmV4dGVuc2lvbi5yZXNvdXJjZS5FeHRlbnNpb25UZXN0UGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC5jb3JlLnRlc3RzLmV4dGVuc2lvbi5yZXNvdXJjZS5UZXN0SnBhUGxhdGZvcm1Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQuY29yZS50ZXN0cy5pbnRlcm5hbC5wcm9qZWN0cy5UZXN0SnBhUHJvamVjdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgY2xhc3MgSnBhUGxhdGZvcm1VaUV4dGVuc2lvblRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLQlwcm90ZWN0ZWQgVGVzdEpwYVByb2plY3QgdGVzdFByb2plY3Q7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiRXh0ZW5zaW9uVGVzdFByb2plY3QiOwotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBBQ0tBR0VfTkFNRSA9ICJleHRlbnNpb24udGVzdCI7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BMVUdJTl9DTEFTUyA9IEV4dGVuc2lvblRlc3RQbHVnaW4uY2xhc3MuZ2V0TmFtZSgpOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUExVR0lOX0lEID0gRXh0ZW5zaW9uVGVzdFBsdWdpbi5QTFVHSU5fSUQ7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BMQVRGT1JNX0lEID0gVGVzdEpwYVBsYXRmb3JtUHJvdmlkZXIuSUQ7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QTEFURk9STV9DTEFTUyA9IFRlc3RKcGFQbGF0Zm9ybVByb3ZpZGVyLmNsYXNzLmdldE5hbWUoKTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BMQVRGT1JNX0xBQkVMID0gIlRlc3QgSnBhIFBsYXRmb3JtIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfVUlfUExBVEZPUk1fSUQgPSBURVNUX1BMQVRGT1JNX0lEOwotCi0JcHVibGljIEpwYVBsYXRmb3JtVWlFeHRlbnNpb25UZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQl0aGlzLnRlc3RQcm9qZWN0ID0gdGhpcy5idWlsZEpwYVByb2plY3QoUFJPSkVDVF9OQU1FLCBmYWxzZSk7ICAvLyBmYWxzZSA9IG5vIGF1dG8tYnVpbGQKLQl9Ci0KLQlwcm90ZWN0ZWQgVGVzdEpwYVByb2plY3QgYnVpbGRKcGFQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgYm9vbGVhbiBhdXRvQnVpbGQpIHRocm93cyBFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFRlc3RKcGFQcm9qZWN0KHByb2plY3ROYW1lLCBhdXRvQnVpbGQpOyAgLy8gZmFsc2UgPSBubyBhdXRvLWJ1aWxkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdGhpcy50ZXN0UHJvamVjdC5nZXRQcm9qZWN0KCkuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQl0aGlzLnRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSnBhUHJvamVjdCBqcGFQcm9qZWN0KCkgewotCQlyZXR1cm4gdGhpcy50ZXN0UHJvamVjdC5nZXRKcGFQcm9qZWN0KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpwYVBsYXRmb3JtKCkgewotCQlhc3NlcnROb3ROdWxsKEpwYVBsYXRmb3JtUmVnaXN0cnkuaW5zdGFuY2UoKS5nZXRKcGFQbGF0Zm9ybSh0aGlzLnRlc3RQcm9qZWN0LmdldFByb2plY3QoKSkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3BsYXRmb3JtL0pwdFVpUGxhdGZvcm1UZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3BsYXRmb3JtL0pwdFVpUGxhdGZvcm1UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGJjYzk5Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9wbGF0Zm9ybS9KcHRVaVBsYXRmb3JtVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnBsYXRmb3JtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEpwdFVpUGxhdGZvcm1UZXN0cwotewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZShKcHRVaVBsYXRmb3JtVGVzdHMuY2xhc3MuZ2V0UGFja2FnZSgpLmdldE5hbWUoKSk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShKcGFQbGF0Zm9ybVVpRXh0ZW5zaW9uVGVzdHMuY2xhc3MpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCi0JcHJpdmF0ZSBKcHRVaVBsYXRmb3JtVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlclRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZkMTJlYS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L0Fic3RyYWN0Q29tYm9Nb2RlbEFkYXB0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC5zd3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnN3dC5BYnN0cmFjdENvbWJvTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5zd3QuQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlci5TZWxlY3Rpb25DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuc3d0LkFic3RyYWN0Q29tYm9Nb2RlbEFkYXB0ZXIuU2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuU3RyaW5nQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLkFic3RyYWN0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuTGlzdEFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuUHJvcGVydHlBc3BlY3RBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZUxpc3RWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5zd2luZy5TaW1wbGVEaXNwbGF5YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5MaXN0VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Xcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbWJvTW9kZWxBZGFwdGVyVGVzdCB7Ci0KLQlwcml2YXRlIE1vZGVsIG1vZGVsOwotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8U2ltcGxlRGlzcGxheWFibGU+IHNlbGVjdGVkSXRlbUhvbGRlcjsKLQlwcml2YXRlIFNoZWxsIHNoZWxsOwotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8TW9kZWw+IHN1YmplY3RIb2xkZXI7Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0KLQlwcm90ZWN0ZWQgZmluYWwgTGlzdFZhbHVlTW9kZWw8U2ltcGxlRGlzcGxheWFibGU+IGJ1aWxkRW1wdHlMaXN0SG9sZGVyKCkgewotCQlyZXR1cm4gbmV3IFNpbXBsZUxpc3RWYWx1ZU1vZGVsPFNpbXBsZURpc3BsYXlhYmxlPigpOwotCX0KLQotCXByaXZhdGUgTGlzdDxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRMaXN0KCkgewotCQlMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxTaW1wbGVEaXNwbGF5YWJsZT4oKTsKLQkJcG9wdWxhdGVDb2xsZWN0aW9uKGxpc3QpOwotCQlyZXR1cm4gbGlzdDsKLQl9Ci0KLQlwcm90ZWN0ZWQgZmluYWwgTGlzdFZhbHVlTW9kZWw8U2ltcGxlRGlzcGxheWFibGU+IGJ1aWxkTGlzdEhvbGRlcigpIHsKLQkJcmV0dXJuIG5ldyBMaXN0QXNwZWN0QWRhcHRlcjxNb2RlbCwgU2ltcGxlRGlzcGxheWFibGU+KHN1YmplY3RIb2xkZXIsIE1vZGVsLklURU1TX0xJU1QpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIExpc3RJdGVyYXRvcjxTaW1wbGVEaXNwbGF5YWJsZT4gbGlzdEl0ZXJhdG9yXygpIHsKLQkJCQlyZXR1cm4gc3ViamVjdC5pdGVtcygpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBpbnQgc2l6ZV8oKSB7Ci0JCQkJcmV0dXJuIHN1YmplY3QuaXRlbXNTaXplKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJvdGVjdGVkIGFic3RyYWN0IEFic3RyYWN0Q29tYm9Nb2RlbEFkYXB0ZXI8U2ltcGxlRGlzcGxheWFibGU+IGJ1aWxkUmVhZE9ubHlDb21ib01vZGVsQWRhcHRlcigpOwotCi0JcHJpdmF0ZSBTaW1wbGVEaXNwbGF5YWJsZSBidWlsZFNlbGVjdGVkSXRlbSgpIHsKLQkJcmV0dXJuIG5ldyBTaW1wbGVEaXNwbGF5YWJsZSgiYmF6Iik7Ci0JfQotCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRTZWxlY3RlZEl0ZW1Ib2xkZXIoKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPE1vZGVsLCBTaW1wbGVEaXNwbGF5YWJsZT4oc3ViamVjdEhvbGRlciwgTW9kZWwuSVRFTV9QUk9QRVJUWSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgU2ltcGxlRGlzcGxheWFibGUgYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIHN1YmplY3QuZ2V0SXRlbSgpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhTaW1wbGVEaXNwbGF5YWJsZSB2YWx1ZSkgewotCQkJCXN1YmplY3Quc2V0SXRlbSh2YWx1ZSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZ0NvbnZlcnRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRTdHJpbmdDb252ZXJ0ZXIoKSB7Ci0JCXJldHVybiBuZXcgU3RyaW5nQ29udmVydGVyPFNpbXBsZURpc3BsYXlhYmxlPigpIHsKLQkJCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKFNpbXBsZURpc3BsYXlhYmxlIHZhbHVlKSB7Ci0JCQkJcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/ICIiIDogdmFsdWUuZGlzcGxheVN0cmluZygpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8TW9kZWw+IGJ1aWxkU3ViamVjdEhvbGRlcigpIHsKLQkJcmV0dXJuIG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8TW9kZWw+KCk7Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IFN0cmluZyBjb21ib1NlbGVjdGVkSXRlbSgpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IGJvb2xlYW4gZW1wdHlDb21ib0NhbkhhdmVTZWxlY3RlZFZhbHVlKCk7Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGl0ZW1BdChpbnQgaW5kZXgpOwotCi0JcHJvdGVjdGVkIGFic3RyYWN0IGludCBpdGVtQ291bnRzKCk7Ci0KLQlwcml2YXRlIHZvaWQgcG9wdWxhdGVDb2xsZWN0aW9uKENvbGxlY3Rpb248U2ltcGxlRGlzcGxheWFibGU+IGMpIHsKLQkJYy5hZGQobmV3IFNpbXBsZURpc3BsYXlhYmxlKCJmb28iKSk7Ci0JCWMuYWRkKG5ldyBTaW1wbGVEaXNwbGF5YWJsZSgiYmFyIikpOwotCQljLmFkZChuZXcgU2ltcGxlRGlzcGxheWFibGUoImJheiIpKTsKLQkJYy5hZGQobmV3IFNpbXBsZURpc3BsYXlhYmxlKCJqb28iKSk7Ci0JCWMuYWRkKG5ldyBTaW1wbGVEaXNwbGF5YWJsZSgiamFyIikpOwotCQljLmFkZChuZXcgU2ltcGxlRGlzcGxheWFibGUoImpheiIpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8U2ltcGxlRGlzcGxheWFibGU+IHNlbGVjdGVkSXRlbUhvbGRlcigpIHsKLQkJcmV0dXJuIHNlbGVjdGVkSXRlbUhvbGRlcjsKLQl9Ci0KLQlAQmVmb3JlCi0JcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzaGVsbCAgICAgICAgICAgICAgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQltb2RlbCAgICAgICAgICAgICAgPSBuZXcgTW9kZWwoKTsKLQkJc3ViamVjdEhvbGRlciAgICAgID0gYnVpbGRTdWJqZWN0SG9sZGVyKCk7Ci0JCXNlbGVjdGVkSXRlbUhvbGRlciA9IGJ1aWxkU2VsZWN0ZWRJdGVtSG9sZGVyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIGZpbmFsIFNoZWxsIHNoZWxsKCkgewotCQlyZXR1cm4gc2hlbGw7Ci0JfQotCi0JcHJvdGVjdGVkIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPE1vZGVsPiBzdWJqZWN0SG9sZGVyKCkgewotCQlyZXR1cm4gc3ViamVjdEhvbGRlcjsKLQl9Ci0KLQlAQWZ0ZXIKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCi0JCWlmICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7Ci0JCQlzaGVsbC5kaXNwb3NlKCk7Ci0JCX0KLQotCQlzaGVsbCAgICAgICAgICAgICAgPSBudWxsOwotCQlzdWJqZWN0SG9sZGVyICAgICAgPSBudWxsOwotCQlzZWxlY3RlZEl0ZW1Ib2xkZXIgPSBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0SXRlbXMoKSB7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBjb3VudCBvZiBpdGVtcyBpcyBub3QgaW4gc3luYyB3aXRoIHRoZSBtb2RlbCIsCi0JCQltb2RlbC5pdGVtc1NpemUoKSwKLQkJCWl0ZW1Db3VudHMoKQotCQkpOwotCi0JCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBtb2RlbC5pdGVtc1NpemUoKTsgaW5kZXgrKykgewotCQkJYXNzZXJ0RXF1YWxzKAotCQkJCSJUaGUgaXRlbSBhdCBpbmRleCAiICsgaW5kZXggKyAiIGlzIG5vdCB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBtb2RlbCBhbmQgdGhlIGNvbWJvIiwKLQkJCQltb2RlbC5pdGVtQXQoaW5kZXgpLmRpc3BsYXlTdHJpbmcoKSwKLQkJCQlpdGVtQXQoaW5kZXgpCi0JCQkpOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9BZGRlZEFmdGVyX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJYnVpbGRSZWFkT25seUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCXRlc3RSZW1vdmVJdGVtc19BZGRlZEFmdGVyKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9BZGRlZEFmdGVyX1JlbW92ZUl0ZW1zX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCXRlc3RSZW1vdmVJdGVtc19BZGRlZEFmdGVyKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9BZGRlZEJlZm9yZV9SZW1vdmVJdGVtc19FZGl0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCQltb2RlbC5hZGRJdGVtcyhidWlsZExpc3QoKSk7Ci0KLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCi0JCUFycmF5TGlzdDxTaW1wbGVEaXNwbGF5YWJsZT4gaXRlbXMgPSBuZXcgQXJyYXlMaXN0PFNpbXBsZURpc3BsYXlhYmxlPigpOwotCQlpdGVtcy5hZGQobW9kZWwuaXRlbUF0KDApKTsKLQkJaXRlbXMuYWRkKG1vZGVsLml0ZW1BdCgzKSk7Ci0JCW1vZGVsLnJlbW92ZUl0ZW1zKGl0ZW1zLml0ZXJhdG9yKCkpOwotCQl0ZXN0SXRlbXMoKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsU3ViamVjdEFmdGVyX0FkZGVkQmVmb3JlX1JlbW92ZUl0ZW1zX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0JCW1vZGVsLmFkZEl0ZW1zKGJ1aWxkTGlzdCgpKTsKLQotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0KLQkJQXJyYXlMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8U2ltcGxlRGlzcGxheWFibGU+KCk7Ci0JCWl0ZW1zLmFkZChtb2RlbC5pdGVtQXQoMCkpOwotCQlpdGVtcy5hZGQobW9kZWwuaXRlbUF0KDMpKTsKLQkJbW9kZWwucmVtb3ZlSXRlbXMoaXRlbXMuaXRlcmF0b3IoKSk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QWZ0ZXJfTnVsbFNlbGVjdGVkSXRlbV9JdGVtc0FmdGVyQWZ0ZXJfRWRpdGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlidWlsZEVkaXRhYmxlQ29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QWZ0ZXJfTnVsbFNlbGVjdGVkSXRlbV9JdGVtc0FmdGVyQWZ0ZXJfUmVhZE9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QWZ0ZXJfTnVsbFNlbGVjdGVkSXRlbV9JdGVtc0FmdGVyQmVmb3JlX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0KLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQl0ZXN0U2VsZWN0ZWRJdGVtKG51bGwpOwotCQl0ZXN0SXRlbXMoKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsU3ViamVjdEFmdGVyX051bGxTZWxlY3RlZEl0ZW1fSXRlbXNBZnRlckJlZm9yZV9SZWFkT25seSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCWJ1aWxkUmVhZE9ubHlDb21ib01vZGVsQWRhcHRlcigpOwotCi0JCW1vZGVsLmFkZEl0ZW1zKGJ1aWxkTGlzdCgpKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0KLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9OdWxsU2VsZWN0ZWRJdGVtX0l0ZW1zQmVmb3JlX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCQlidWlsZEVkaXRhYmxlQ29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9OdWxsU2VsZWN0ZWRJdGVtX0l0ZW1zQmVmb3JlX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9OdWxsU2VsZWN0ZWRJdGVtX05vSXRlbXNfRWRpdGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlidWlsZEVkaXRhYmxlQ29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9OdWxsU2VsZWN0ZWRJdGVtX05vSXRlbXNfUmVhZE9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RBZnRlcl9TZWxlY3RlZEl0ZW1DaGFuZ2VkX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0JCW1vZGVsLmFkZEl0ZW1zKGJ1aWxkTGlzdCgpKTsKLQotCQlTaW1wbGVEaXNwbGF5YWJsZSBzZWxlY3RlZEl0ZW0gPSBtb2RlbC5pdGVtQXQoMCk7Ci0KLQkJQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYWRhcHRlciA9IGJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQlTZWxlY3Rpb25MaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpOwotCQlhZGFwdGVyLmFkZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKHNlbGVjdGlvbkxpc3RlbmVyKTsKLQotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQl0ZXN0U2VsZWN0ZWRJdGVtKG51bGwpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSwgc2VsZWN0aW9uTGlzdGVuZXIpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QmVmb3JlX05vbk51bGxTZWxlY3RlZEl0ZW1BZnRlcl9FZGl0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCVNpbXBsZURpc3BsYXlhYmxlIHNlbGVjdGVkSXRlbSA9IGJ1aWxkU2VsZWN0ZWRJdGVtKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCWJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCi0JCW1vZGVsLnNldEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2FzIHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnRTYW1lKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc2V0IHByb3Blcmx5Iiwgc2VsZWN0ZWRJdGVtLCBtb2RlbC5nZXRJdGVtKCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RCZWZvcmVfTm9uTnVsbFNlbGVjdGVkSXRlbUFmdGVyX0l0ZW1zX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtID0gYnVpbGRTZWxlY3RlZEl0ZW0oKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0KLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCWFzc2VydEZhbHNlKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0KLQkJbW9kZWwuc2V0SXRlbShzZWxlY3RlZEl0ZW0pOwotCQlhc3NlcnRUcnVlKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXMgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0JCWFzc2VydFNhbWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzZXQgcHJvcGVybHkiLCBzZWxlY3RlZEl0ZW0sIG1vZGVsLmdldEl0ZW0oKSk7Ci0KLQkJdGVzdFNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pOwotCQl0ZXN0SXRlbXMoKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsU3ViamVjdEJlZm9yZV9Ob25OdWxsU2VsZWN0ZWRJdGVtQWZ0ZXJfSXRlbXNfUmVhZE9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBsaXN0ID0gYnVpbGRMaXN0KCk7Ci0JCVNpbXBsZURpc3BsYXlhYmxlIHNlbGVjdGVkSXRlbSA9IGxpc3QuZ2V0KDApOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQotCQltb2RlbC5zZXRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCWFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhcyBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBwcm9wZXJseSIsIHNlbGVjdGVkSXRlbSwgbW9kZWwuZ2V0SXRlbSgpKTsKLQotCQl0ZXN0U2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QmVmb3JlX05vbk51bGxTZWxlY3RlZEl0ZW1BZnRlcl9SZWFkT25seSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUxpc3Q8U2ltcGxlRGlzcGxheWFibGU+IGxpc3QgPSBidWlsZExpc3QoKTsKLQkJU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtID0gbGlzdC5nZXQoMCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCWJ1aWxkUmVhZE9ubHlDb21ib01vZGVsQWRhcHRlcigpOwotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCi0JCW1vZGVsLnNldEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2FzIHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnRTYW1lKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc2V0IHByb3Blcmx5Iiwgc2VsZWN0ZWRJdGVtLCBtb2RlbC5nZXRJdGVtKCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RCZWZvcmVfTm9uTnVsbFNlbGVjdGVkSXRlbUJlZm9yZV9FZGl0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCW1vZGVsLmFkZEl0ZW1zKGJ1aWxkTGlzdCgpKTsKLQkJU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtID0gbW9kZWwuaXRlbUF0KDApOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQltb2RlbC5zZXRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCWFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhcyBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBwcm9wZXJseSIsIHNlbGVjdGVkSXRlbSwgbW9kZWwuZ2V0SXRlbSgpKTsKLQotCQltb2RlbC5jbGVhckl0ZW1DYWxsZWRGbGFnKCk7Ci0JCWJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RCZWZvcmVfTm9uTnVsbFNlbGVjdGVkSXRlbUJlZm9yZV9JdGVtc19FZGl0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCW1vZGVsLmFkZEl0ZW1zKGJ1aWxkTGlzdCgpKTsKLQkJU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtID0gbW9kZWwuaXRlbUF0KDApOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQltb2RlbC5zZXRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCWFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhcyBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBwcm9wZXJseSIsIHNlbGVjdGVkSXRlbSwgbW9kZWwuZ2V0SXRlbSgpKTsKLQotCQltb2RlbC5jbGVhckl0ZW1DYWxsZWRGbGFnKCk7Ci0JCWJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RCZWZvcmVfTm9uTnVsbFNlbGVjdGVkSXRlbUJlZm9yZV9JdGVtc19SZWFkT25seSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUxpc3Q8U2ltcGxlRGlzcGxheWFibGU+IGxpc3QgPSBidWlsZExpc3QoKTsKLQkJU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtID0gbGlzdC5nZXQoMCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCW1vZGVsLnNldEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2FzIHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnRTYW1lKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc2V0IHByb3Blcmx5Iiwgc2VsZWN0ZWRJdGVtLCBtb2RlbC5nZXRJdGVtKCkpOwotCi0JCW1vZGVsLmNsZWFySXRlbUNhbGxlZEZsYWcoKTsKLQkJYnVpbGRSZWFkT25seUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCWFzc2VydEZhbHNlKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0KLQkJdGVzdFNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pOwotCQl0ZXN0SXRlbXMoKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsU3ViamVjdEJlZm9yZV9Ob25OdWxsU2VsZWN0ZWRJdGVtQmVmb3JlX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJTGlzdDxTaW1wbGVEaXNwbGF5YWJsZT4gbGlzdCA9IGJ1aWxkTGlzdCgpOwotCQlTaW1wbGVEaXNwbGF5YWJsZSBzZWxlY3RlZEl0ZW0gPSBsaXN0LmdldCgwKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0KLQkJbW9kZWwuc2V0SXRlbShzZWxlY3RlZEl0ZW0pOwotCQlhc3NlcnRUcnVlKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXMgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0JCWFzc2VydFNhbWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzZXQgcHJvcGVybHkiLCBzZWxlY3RlZEl0ZW0sIG1vZGVsLmdldEl0ZW0oKSk7Ci0KLQkJbW9kZWwuY2xlYXJJdGVtQ2FsbGVkRmxhZygpOwotCQlidWlsZFJlYWRPbmx5Q29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQkJYXNzZXJ0RmFsc2UoIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQotCQl0ZXN0U2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QmVmb3JlX051bGxTZWxlY3RlZEl0ZW1fSXRlbXNfRWRpdGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQlidWlsZEVkaXRhYmxlQ29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlhc3NlcnRGYWxzZSgiVGhlIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnROdWxsKCJUaGUgc2VsZWN0ZWQgaXRlbSBpcyBzdXBwb3NlZCB0byByZW1haW4gbnVsbCIsIG1vZGVsLmdldEl0ZW0oKSk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QmVmb3JlX051bGxTZWxlY3RlZEl0ZW1fSXRlbXNfUmVhZE9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQlidWlsZEVkaXRhYmxlQ29tYm9Nb2RlbEFkYXB0ZXIoKTsKLQotCQlhc3NlcnRGYWxzZSgiVGhlIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnROdWxsKCJUaGUgc2VsZWN0ZWQgaXRlbSBpcyBzdXBwb3NlZCB0byByZW1haW4gbnVsbCIsIG1vZGVsLmdldEl0ZW0oKSk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE5vbk51bGxTdWJqZWN0QmVmb3JlX051bGxTZWxlY3RlZEl0ZW1fTm9JdGVtc19FZGl0YWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCWJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCi0JCWFzc2VydEZhbHNlKCJUaGUgaXRlbSB3YXNuJ3Qgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0JCWFzc2VydE51bGwoIlRoZSBzZWxlY3RlZCBpdGVtIGlzIHN1cHBvc2VkIHRvIHJlbWFpbiBudWxsIiwgbW9kZWwuZ2V0SXRlbSgpKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uTnVsbFN1YmplY3RCZWZvcmVfTnVsbFNlbGVjdGVkSXRlbV9Ob0l0ZW1zX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0KLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0KLQkJYXNzZXJ0RmFsc2UoIlRoZSBpdGVtIHdhc24ndCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQkJYXNzZXJ0TnVsbCgiVGhlIHNlbGVjdGVkIGl0ZW0gaXMgc3VwcG9zZWQgdG8gcmVtYWluIG51bGwiLCBtb2RlbC5nZXRJdGVtKCkpOwotCQl0ZXN0U2VsZWN0ZWRJdGVtKG51bGwpOwotCQl0ZXN0SXRlbXMoKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROb25OdWxsU3ViamVjdEJlZm9yZV9TZWxlY3RlZEl0ZW1DaGFuZ2VkX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJbW9kZWwuYWRkSXRlbXMoYnVpbGRMaXN0KCkpOwotCi0JCVNpbXBsZURpc3BsYXlhYmxlIHNlbGVjdGVkSXRlbSA9IG1vZGVsLml0ZW1BdCgzKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtb2RlbCk7Ci0KLQkJQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYWRhcHRlciA9IGJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQlTZWxlY3Rpb25MaXN0ZW5lciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpOwotCQlhZGFwdGVyLmFkZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKHNlbGVjdGlvbkxpc3RlbmVyKTsKLQotCQlhc3NlcnRGYWxzZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQl0ZXN0U2VsZWN0ZWRJdGVtKG51bGwpOwotCi0JCXRlc3RTZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSwgc2VsZWN0aW9uTGlzdGVuZXIpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0TnVsbFN1YmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlhc3NlcnROdWxsKCJUaGUgc2VsZWN0ZWQgaXRlbSBzaG91bGQgYmUgbnVsbCIsIHNlbGVjdGVkSXRlbUhvbGRlci5nZXRWYWx1ZSgpKTsKLQotCQlzZWxlY3RlZEl0ZW1Ib2xkZXIuc2V0VmFsdWUoYnVpbGRTZWxlY3RlZEl0ZW0oKSk7Ci0JCWFzc2VydEZhbHNlKCJUaGUgaXRlbSB3YXNuJ3Qgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0KLQkJLy8gTnVsbCBiZWNhdXNlIHRoZSBzdWJqZWN0IGhvbGRlciBkb2Vzbid0IGhhdmUgdGhlIHN1YmplY3Qgc2V0Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JCXRlc3RJdGVtcygpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdE51bGxTdWJqZWN0X051bGxTZWxlY3RlZEl0ZW1fSXRlbXNfRWRpdGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCk7Ci0JCXRlc3ROdWxsU3ViamVjdCgpOwotCQl0ZXN0SXRlbXMoKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3ROdWxsU3ViamVjdF9OdWxsU2VsZWN0ZWRJdGVtX0l0ZW1zX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJ1aWxkUmVhZE9ubHlDb21ib01vZGVsQWRhcHRlcigpOwotCQl0ZXN0TnVsbFN1YmplY3QoKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0TnVsbFN1YmplY3RfTnVsbFNlbGVjdGVkSXRlbV9Ob0l0ZW1zX0VkaXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJ1aWxkRWRpdGFibGVDb21ib01vZGVsQWRhcHRlcigpOwotCQl0ZXN0TnVsbFN1YmplY3QoKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0TnVsbFN1YmplY3RfTnVsbFNlbGVjdGVkSXRlbV9Ob0l0ZW1zX1JlYWRPbmx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWJ1aWxkUmVhZE9ubHlDb21ib01vZGVsQWRhcHRlcigpOwotCQl0ZXN0TnVsbFN1YmplY3QoKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RSZW1vdmVJdGVtc19BZGRlZEFmdGVyKCkgewotCi0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCQltb2RlbC5hZGRJdGVtcyhidWlsZExpc3QoKSk7Ci0KLQkJdGVzdFNlbGVjdGVkSXRlbShudWxsKTsKLQkJdGVzdEl0ZW1zKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0KLQkJQXJyYXlMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8U2ltcGxlRGlzcGxheWFibGU+KCk7Ci0JCWl0ZW1zLmFkZChtb2RlbC5pdGVtQXQoMCkpOwotCQlpdGVtcy5hZGQobW9kZWwuaXRlbUF0KDMpKTsKLQkJbW9kZWwucmVtb3ZlSXRlbXMoaXRlbXMuaXRlcmF0b3IoKSk7Ci0KLQkJdGVzdEl0ZW1zKCk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0obnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RTZWxlY3RlZEl0ZW0oU2ltcGxlRGlzcGxheWFibGUgc2VsZWN0ZWRJdGVtKSB7Ci0KLQkJaWYgKHNlbGVjdGVkSXRlbSA9PSBudWxsKSB7Ci0KLQkJCWFzc2VydE51bGwoCi0JCQkJIlRoZSBzZWxlY3RlZCBpdGVtIGlzIHN1cHBvc2VkIHRvIGJlIG51bGwiLAotCQkJCW1vZGVsLmdldEl0ZW0oKQotCQkJKTsKLQotCQkJYXNzZXJ0RXF1YWxzKAotCQkJCSJUaGUgY29tYm8ncyBzZWxlY3RlZCBpdGVtIHNob3VsZCBiZSBudWxsIiwKLQkJCQkiIiwKLQkJCQljb21ib1NlbGVjdGVkSXRlbSgpCi0JCQkpOwotCQl9Ci0JCWVsc2UgaWYgKCFlbXB0eUNvbWJvQ2FuSGF2ZVNlbGVjdGVkVmFsdWUoKSkgewotCi0JCQlhc3NlcnRFcXVhbHMoCi0JCQkJIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzZXQgY29ycmVjdGx5IiwKLQkJCQlzZWxlY3RlZEl0ZW0sCi0JCQkJbW9kZWwuZ2V0SXRlbSgpCi0JCQkpOwotCi0JCQlhc3NlcnRFcXVhbHMoCi0JCQkJIlRoZSBjb21ibydzIHNlbGVjdGVkIGl0ZW0gc2hvdWxkIGJlIG51bGwiLAotCQkJCSIiLAotCQkJCWNvbWJvU2VsZWN0ZWRJdGVtKCkKLQkJCSk7Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCWFzc2VydEVxdWFscygKLQkJCQkiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBjb3JyZWN0bHkiLAotCQkJCXNlbGVjdGVkSXRlbSwKLQkJCQltb2RlbC5nZXRJdGVtKCkKLQkJCSk7Ci0KLQkJCWFzc2VydEVxdWFscygKLQkJCQkiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBjb3JyZWN0bHkiLAotCQkJCXNlbGVjdGVkSXRlbS5kaXNwbGF5U3RyaW5nKCksCi0JCQkJY29tYm9TZWxlY3RlZEl0ZW0oKQotCQkJKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0U2VsZWN0ZWRJdGVtQ2hhbmdlZChTaW1wbGVEaXNwbGF5YWJsZSBzZWxlY3RlZEl0ZW0sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkxpc3RlbmVyIHNlbGVjdGlvbkxpc3RlbmVyKSB7Ci0KLQkJLy8gVGVzdCAxCi0JCW1vZGVsLnNldEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2FzIHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnRTYW1lKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc2V0IHByb3Blcmx5Iiwgc2VsZWN0ZWRJdGVtLCBtb2RlbC5nZXRJdGVtKCkpOwotCQlhc3NlcnRUcnVlKCJUaGUgU2VsZWN0aW9uTGlzdGVuZXIgd2FzIHN1cHBvc2VkIHRvIGJlIG5vdGlmaWVkIiwgc2VsZWN0aW9uTGlzdGVuZXIuaXNMaXN0ZW5lck5vdGlmaWVkKCkpOwotCQlhc3NlcnRTYW1lKCJUaGUgU2VsZWN0aW9uTGlzdGVuZXIgd2FzIHN1cHBvc2VkIHRvIGJlIG5vdGlmaWVkIiwgc2VsZWN0ZWRJdGVtLCBzZWxlY3Rpb25MaXN0ZW5lci5nZXRJdGVtKCkpOwotCQl0ZXN0U2VsZWN0ZWRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0KLQkJLy8gVGVzdCAyCi0JCXNlbGVjdGVkSXRlbSA9IG1vZGVsLml0ZW1BdCgxKTsKLQkJbW9kZWwuY2xlYXJJdGVtQ2FsbGVkRmxhZygpOwotCQlzZWxlY3Rpb25MaXN0ZW5lci5jbGVhckluZm8oKTsKLQotCQltb2RlbC5zZXRJdGVtKHNlbGVjdGVkSXRlbSk7Ci0JCWFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhcyBzdXBwb3NlZCB0byBiZSBtb2RpZmllZCIsIG1vZGVsLmlzU2V0SXRlbUNhbGxlZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2Fzbid0IHNldCBwcm9wZXJseSIsIHNlbGVjdGVkSXRlbSwgbW9kZWwuZ2V0SXRlbSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFNlbGVjdGlvbkxpc3RlbmVyIHdhcyBzdXBwb3NlZCB0byBiZSBub3RpZmllZCIsIHNlbGVjdGlvbkxpc3RlbmVyLmlzTGlzdGVuZXJOb3RpZmllZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIFNlbGVjdGlvbkxpc3RlbmVyIHdhcyBzdXBwb3NlZCB0byBiZSBub3RpZmllZCIsIHNlbGVjdGVkSXRlbSwgc2VsZWN0aW9uTGlzdGVuZXIuZ2V0SXRlbSgpKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pOwotCi0JCS8vIFRlc3QgMwotCQlzZWxlY3RlZEl0ZW0gPSBudWxsOwotCQltb2RlbC5jbGVhckl0ZW1DYWxsZWRGbGFnKCk7Ci0JCXNlbGVjdGlvbkxpc3RlbmVyLmNsZWFySW5mbygpOwotCi0JCW1vZGVsLnNldEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW0gd2FzIHN1cHBvc2VkIHRvIGJlIG1vZGlmaWVkIiwgbW9kZWwuaXNTZXRJdGVtQ2FsbGVkKCkpOwotCQlhc3NlcnROdWxsKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXNuJ3Qgc2V0IHByb3Blcmx5IiwgbW9kZWwuZ2V0SXRlbSgpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIFNlbGVjdGlvbkxpc3RlbmVyIHdhcyBzdXBwb3NlZCB0byBiZSBub3RpZmllZCIsIHNlbGVjdGlvbkxpc3RlbmVyLmlzTGlzdGVuZXJOb3RpZmllZCgpKTsKLQkJYXNzZXJ0U2FtZSgiVGhlIFNlbGVjdGlvbkxpc3RlbmVyIHdhcyBzdXBwb3NlZCB0byBiZSBub3RpZmllZCIsIHNlbGVjdGVkSXRlbSwgc2VsZWN0aW9uTGlzdGVuZXIuZ2V0SXRlbSgpKTsKLQkJdGVzdFNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pOwotCi0JCS8vIFRlc3QgMwotCQlzZWxlY3RlZEl0ZW0gPSBtb2RlbC5pdGVtQXQoMik7Ci0JCW1vZGVsLmNsZWFySXRlbUNhbGxlZEZsYWcoKTsKLQkJc2VsZWN0aW9uTGlzdGVuZXIuY2xlYXJJbmZvKCk7Ci0KLQkJbW9kZWwuc2V0SXRlbShzZWxlY3RlZEl0ZW0pOwotCQlhc3NlcnRUcnVlKCJUaGUgc2VsZWN0ZWQgaXRlbSB3YXMgc3VwcG9zZWQgdG8gYmUgbW9kaWZpZWQiLCBtb2RlbC5pc1NldEl0ZW1DYWxsZWQoKSk7Ci0JCWFzc2VydFNhbWUoIlRoZSBzZWxlY3RlZCBpdGVtIHdhc24ndCBzZXQgcHJvcGVybHkiLCBzZWxlY3RlZEl0ZW0sIG1vZGVsLmdldEl0ZW0oKSk7Ci0JCWFzc2VydFRydWUoIlRoZSBTZWxlY3Rpb25MaXN0ZW5lciB3YXMgc3VwcG9zZWQgdG8gYmUgbm90aWZpZWQiLCBzZWxlY3Rpb25MaXN0ZW5lci5pc0xpc3RlbmVyTm90aWZpZWQoKSk7Ci0JCWFzc2VydFNhbWUoIlRoZSBTZWxlY3Rpb25MaXN0ZW5lciB3YXMgc3VwcG9zZWQgdG8gYmUgbm90aWZpZWQiLCBzZWxlY3RlZEl0ZW0sIHNlbGVjdGlvbkxpc3RlbmVyLmdldEl0ZW0oKSk7Ci0JCXRlc3RTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwgewotCi0JCXByaXZhdGUgU2ltcGxlRGlzcGxheWFibGUgaXRlbTsKLQkJcHJpdmF0ZSBMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcyA9IG5ldyBBcnJheUxpc3Q8U2ltcGxlRGlzcGxheWFibGU+KCk7Ci0JCXByaXZhdGUgYm9vbGVhbiBzZXRJdGVtQ2FsbGVkOwotCi0JCXN0YXRpYyBmaW5hbCBTdHJpbmcgSVRFTV9QUk9QRVJUWSA9ICJpdGVtIjsKLQkJc3RhdGljIGZpbmFsIFN0cmluZyBJVEVNU19MSVNUID0gIml0ZW1zIjsKLQotCQl2b2lkIGFkZEl0ZW1zKEl0ZXJhdG9yPFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcykgewotCQkJYWRkSXRlbXNUb0xpc3QoaXRlbXMsIHRoaXMuaXRlbXMsIElURU1TX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCBhZGRJdGVtcyhMaXN0PFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcykgewotCQkJYWRkSXRlbXNUb0xpc3QoaXRlbXMsIHRoaXMuaXRlbXMsIElURU1TX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCBjbGVhckl0ZW1DYWxsZWRGbGFnKCkgewotCQkJc2V0SXRlbUNhbGxlZCA9IGZhbHNlOwotCQl9Ci0KLQkJU2ltcGxlRGlzcGxheWFibGUgZ2V0SXRlbSgpIHsKLQkJCXJldHVybiBpdGVtOwotCQl9Ci0KLQkJYm9vbGVhbiBpc1NldEl0ZW1DYWxsZWQoKSB7Ci0JCQlyZXR1cm4gc2V0SXRlbUNhbGxlZDsKLQkJfQotCi0JCVNpbXBsZURpc3BsYXlhYmxlIGl0ZW1BdChpbnQgaW5kZXgpIHsKLQkJCXJldHVybiB0aGlzLml0ZW1zLmdldChpbmRleCk7Ci0JCX0KLQotCQlMaXN0SXRlcmF0b3I8U2ltcGxlRGlzcGxheWFibGU+IGl0ZW1zKCkgewotCQkJcmV0dXJuIGl0ZW1zLmxpc3RJdGVyYXRvcigpOwotCQl9Ci0KLQkJaW50IGl0ZW1zU2l6ZSgpIHsKLQkJCXJldHVybiBpdGVtcy5zaXplKCk7Ci0JCX0KLQotCQl2b2lkIHJlbW92ZUl0ZW1zKEl0ZXJhdG9yPFNpbXBsZURpc3BsYXlhYmxlPiBpdGVtcykgewotCQkJcmVtb3ZlSXRlbXNGcm9tTGlzdChpdGVtcywgdGhpcy5pdGVtcywgSVRFTVNfTElTVCk7Ci0JCX0KLQotCQl2b2lkIHNldEl0ZW0oU2ltcGxlRGlzcGxheWFibGUgaXRlbSkgewotCQkJc2V0SXRlbUNhbGxlZCA9IHRydWU7Ci0KLQkJCVNpbXBsZURpc3BsYXlhYmxlIG9sZEl0ZW0gPSB0aGlzLml0ZW07Ci0JCQl0aGlzLml0ZW0gPSBpdGVtOwotCQkJZmlyZVByb3BlcnR5Q2hhbmdlZChJVEVNX1BST1BFUlRZLCBvbGRJdGVtLCBpdGVtKTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lcjxTaW1wbGVEaXNwbGF5YWJsZT4gewotCi0JCXByaXZhdGUgU2ltcGxlRGlzcGxheWFibGUgaXRlbTsKLQkJcHJpdmF0ZSBib29sZWFuIGxpc3RlbmVyTm90aWZpZWQ7Ci0KLQkJdm9pZCBjbGVhckluZm8oKSB7Ci0JCQl0aGlzLmxpc3RlbmVyTm90aWZpZWQgPSBmYWxzZTsKLQkJCXRoaXMuaXRlbSA9IG51bGw7Ci0JCX0KLQotCQlTaW1wbGVEaXNwbGF5YWJsZSBnZXRJdGVtKCkgewotCQkJcmV0dXJuIGl0ZW07Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0xpc3RlbmVyTm90aWZpZWQoKSB7Ci0JCQlyZXR1cm4gbGlzdGVuZXJOb3RpZmllZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlRXZlbnQ8U2ltcGxlRGlzcGxheWFibGU+IGUpIHsKLQkJCWxpc3RlbmVyTm90aWZpZWQgPSB0cnVlOwotCQkJaXRlbSA9IGUuc2VsZWN0ZWRJdGVtKCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L0NDb21ib01vZGVsQWRhcHRlclRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQ0NvbWJvTW9kZWxBZGFwdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2YxNDNlLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQ0NvbWJvTW9kZWxBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC5zd3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuc3d0LkFic3RyYWN0Q29tYm9Nb2RlbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnN3dC5DQ29tYm9Nb2RlbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuc3dpbmcuU2ltcGxlRGlzcGxheWFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNDb21ibzsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBDQ29tYm9Nb2RlbEFkYXB0ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlclRlc3QgewotCi0JcHJpdmF0ZSBDQ29tYm8gY29tYm87Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCkgewotCi0JCWNvbWJvID0gbmV3IENDb21ibyhzaGVsbCgpLCBTV1QuTlVMTCk7Ci0KLQkJcmV0dXJuIENDb21ib01vZGVsQWRhcHRlci5hZGFwdCgKLQkJCWJ1aWxkTGlzdEhvbGRlcigpLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyKCksCi0JCQljb21ibywKLQkJCWJ1aWxkU3RyaW5nQ29udmVydGVyKCkKLQkJKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRSZWFkT25seUNvbWJvTW9kZWxBZGFwdGVyKCkgewotCi0JCWNvbWJvID0gbmV3IENDb21ibyhzaGVsbCgpLCBTV1QuUkVBRF9PTkxZKTsKLQotCQlyZXR1cm4gQ0NvbWJvTW9kZWxBZGFwdGVyLmFkYXB0KAotCQkJYnVpbGRMaXN0SG9sZGVyKCksCi0JCQlzZWxlY3RlZEl0ZW1Ib2xkZXIoKSwKLQkJCWNvbWJvLAotCQkJYnVpbGRTdHJpbmdDb252ZXJ0ZXIoKQotCQkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgY29tYm9TZWxlY3RlZEl0ZW0oKSB7Ci0JCXJldHVybiBjb21iby5nZXRUZXh0KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gZW1wdHlDb21ib0NhbkhhdmVTZWxlY3RlZFZhbHVlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgU3RyaW5nIGl0ZW1BdChpbnQgaW5kZXgpIHsKLQkJcmV0dXJuIHRoaXMuY29tYm8uZ2V0SXRlbShpbmRleCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGludCBpdGVtQ291bnRzKCkgewotCQlyZXR1cm4gY29tYm8uZ2V0SXRlbUNvdW50KCk7Ci0JfQotCi0JQEFmdGVyCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJY29tYm8gPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQ29tYm9Nb2RlbEFkYXB0ZXJUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L0NvbWJvTW9kZWxBZGFwdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmIxNTJhLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvQ29tYm9Nb2RlbEFkYXB0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnN3dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5zd3QuQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuc3d0LkNvbWJvTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLnN3aW5nLlNpbXBsZURpc3BsYXlhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotCi1wdWJsaWMgY2xhc3MgQ29tYm9Nb2RlbEFkYXB0ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlclRlc3QgewotCi0JcHJpdmF0ZSBDb21ibyBjb21ibzsKLQlwcml2YXRlIGJvb2xlYW4gZWRpdGFibGU7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRFZGl0YWJsZUNvbWJvTW9kZWxBZGFwdGVyKCkgewotCi0JCWNvbWJvID0gbmV3IENvbWJvKHNoZWxsKCksIFNXVC5OVUxMKTsKLQkJZWRpdGFibGUgPSB0cnVlOwotCi0JCXJldHVybiBDb21ib01vZGVsQWRhcHRlci5hZGFwdCgKLQkJCWJ1aWxkTGlzdEhvbGRlcigpLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyKCksCi0JCQljb21ibywKLQkJCWJ1aWxkU3RyaW5nQ29udmVydGVyKCkKLQkJKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQWJzdHJhY3RDb21ib01vZGVsQWRhcHRlcjxTaW1wbGVEaXNwbGF5YWJsZT4gYnVpbGRSZWFkT25seUNvbWJvTW9kZWxBZGFwdGVyKCkgewotCi0JCWNvbWJvID0gbmV3IENvbWJvKHNoZWxsKCksIFNXVC5SRUFEX09OTFkpOwotCQllZGl0YWJsZSA9IGZhbHNlOwotCi0JCXJldHVybiBDb21ib01vZGVsQWRhcHRlci5hZGFwdCgKLQkJCWJ1aWxkTGlzdEhvbGRlcigpLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyKCksCi0JCQljb21ibywKLQkJCWJ1aWxkU3RyaW5nQ29udmVydGVyKCkKLQkJKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGNvbWJvU2VsZWN0ZWRJdGVtKCkgewotCQlyZXR1cm4gY29tYm8uZ2V0VGV4dCgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIGVtcHR5Q29tYm9DYW5IYXZlU2VsZWN0ZWRWYWx1ZSgpIHsKLQkJcmV0dXJuIGVkaXRhYmxlOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgaXRlbUF0KGludCBpbmRleCkgewotCQlyZXR1cm4gdGhpcy5jb21iby5nZXRJdGVtKGluZGV4KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgaW50IGl0ZW1Db3VudHMoKSB7Ci0JCXJldHVybiBjb21iby5nZXRJdGVtQ291bnQoKTsKLQl9Ci0KLQlAQWZ0ZXIKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQljb21ibyA9IG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3N3dC9KcHRVaVNXVFRlc3RzLmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L0pwdFVpU1dUVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhOGMyZi4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L0pwdFVpU1dUVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwuc3d0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkpVbml0NFRlc3RBZGFwdGVyOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlN1aXRlOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlN1aXRlLlN1aXRlQ2xhc3NlczsKLQotQFN1aXRlQ2xhc3NlcwotKHsKLQlDQ29tYm9Nb2RlbEFkYXB0ZXJUZXN0LmNsYXNzLAotCUNvbWJvTW9kZWxBZGFwdGVyVGVzdC5jbGFzcywKLQlTcGlubmVyTW9kZWxBZGFwdGVyVGVzdC5jbGFzcywKLQlUYWJsZU1vZGVsQWRhcHRlclRlc3QuY2xhc3MKLX0pCi1AUnVuV2l0aChTdWl0ZS5jbGFzcykKLXB1YmxpYyBmaW5hbCBjbGFzcyBKcHRVaVNXVFRlc3RzIHsKLQotCXByaXZhdGUgSnB0VWlTV1RUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IEpVbml0NFRlc3RBZGFwdGVyKEpwdFVpU1dUVGVzdHMuY2xhc3MpKTsKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvU3Bpbm5lck1vZGVsQWRhcHRlclRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvU3Bpbm5lck1vZGVsQWRhcHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxNjI5Zi4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1NwaW5uZXJNb2RlbEFkYXB0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC5zd3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5zd3QuU3Bpbm5lck1vZGVsQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlByb3BlcnR5QXNwZWN0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNwaW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIFNwaW5uZXJNb2RlbEFkYXB0ZXJUZXN0IHsKLQotCXByaXZhdGUgTW9kZWwgbW9kZWw7Ci0JcHJpdmF0ZSBTaGVsbCBzaGVsbDsKLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPE1vZGVsPiBzdWJqZWN0SG9sZGVyOwotCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxNb2RlbD4gYnVpbGRTdWJqZWN0SG9sZGVyKCkgewotCQlyZXR1cm4gbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxNb2RlbD4oKTsKLQl9Ci0KLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEludGVnZXI+IGJ1aWxkVmFsdWVIb2xkZXIoKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPE1vZGVsLCBJbnRlZ2VyPihzdWJqZWN0SG9sZGVyLCBNb2RlbC5WQUxVRV9QUk9QRVJUWSkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgSW50ZWdlciBidWlsZFZhbHVlXygpIHsKLQkJCQlyZXR1cm4gc3ViamVjdC5nZXRWYWx1ZSgpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhJbnRlZ2VyIHZhbHVlKSB7Ci0JCQkJc3ViamVjdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc2hlbGwgICAgICAgICAgICAgID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJbW9kZWwgICAgICAgICAgICAgID0gbmV3IE1vZGVsKCk7Ci0JCXN1YmplY3RIb2xkZXIgICAgICA9IGJ1aWxkU3ViamVjdEhvbGRlcigpOwotCX0KLQotCUBBZnRlcgotCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJaWYgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCXNoZWxsLmRpc3Bvc2UoKTsKLQkJfQotCi0JCXNoZWxsICAgICAgICAgPSBudWxsOwotCQlzdWJqZWN0SG9sZGVyID0gbnVsbDsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3REaXNwb3NlZCgpIHsKLQotCQlpbnQgdmFsdWUgPSAyOwotCQltb2RlbC5zZXRWYWx1ZSh2YWx1ZSk7Ci0JCW1vZGVsLmNsZWFyU2V0VmFsdWVDYWxsZWRGbGFnKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCVNwaW5uZXIgc3Bpbm5lciA9IG5ldyBTcGlubmVyKHNoZWxsLCBTV1QuTlVMTCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEludGVnZXI+IG51bWJlckhvbGRlciA9IGJ1aWxkVmFsdWVIb2xkZXIoKTsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IDE7Ci0KLQkJU3Bpbm5lck1vZGVsQWRhcHRlci5hZGFwdCgKLQkJCW51bWJlckhvbGRlciwKLQkJCXNwaW5uZXIsCi0JCQlkZWZhdWx0VmFsdWUKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHNwaW5uZXIncyB2YWx1ZSBzaG91bGQgYmUgY29taW5nIGZyb20gdGhlIG1vZGVsIiwKLQkJCXZhbHVlLAotCQkJc3Bpbm5lci5nZXRTZWxlY3Rpb24oKQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgbnVtYmVyIGhvbGRlcidzIHZhbHVlIHNob3VsZCBiZSB0aGUgbW9kZWwncyB2YWx1ZSIsCi0JCQltb2RlbC5nZXRWYWx1ZSgpLAotCQkJbnVtYmVySG9sZGVyLmdldFZhbHVlKCkKLQkJKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgbW9kZWwgc2hvdWxkIG5vdCBoYXZlIHJlY2VpdmVkIHRoZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24iLAotCQkJbW9kZWwuaXNTZXRWYWx1ZUNhbGxlZCgpCi0JCSk7Ci0KLQkJLy8gQ2hhbmdlIHRoZSB2YWx1ZSBpbiB0aGUgbW9kZWwKLQkJc3Bpbm5lci5kaXNwb3NlKCk7Ci0KLQkJdmFsdWUgPSA0OwotCQltb2RlbC5zZXRWYWx1ZSh2YWx1ZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBtb2RlbCdzIHZhbHVlIHdhcyBzb21laG93IGNoYW5nZWQiLAotCQkJSW50ZWdlci52YWx1ZU9mKHZhbHVlKSwKLQkJCW1vZGVsLmdldFZhbHVlKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXphdGlvbl8xKCkgewotCi0JCVNwaW5uZXIgc3Bpbm5lciA9IG5ldyBTcGlubmVyKHNoZWxsLCBTV1QuTlVMTCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEludGVnZXI+IG51bWJlckhvbGRlciA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8SW50ZWdlcj4oKTsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IDE7Ci0KLQkJU3Bpbm5lck1vZGVsQWRhcHRlci5hZGFwdCgKLQkJCW51bWJlckhvbGRlciwKLQkJCXNwaW5uZXIsCi0JCQlkZWZhdWx0VmFsdWUKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHNwaW5uZXIncyB2YWx1ZSBzaG91bGQgYmUgdGhlIGRlZmF1bHQgdmFsdWUiLAotCQkJZGVmYXVsdFZhbHVlLAotCQkJc3Bpbm5lci5nZXRTZWxlY3Rpb24oKQotCQkpOwotCi0JCWFzc2VydE51bGwoCi0JCQkiVGhlIG51bWJlciBob2xkZXIncyB2YWx1ZSBzaG91bGQgYmUgbnVsbCIsCi0JCQludW1iZXJIb2xkZXIuZ2V0VmFsdWUoKQotCQkpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemF0aW9uXzIoKSB7Ci0KLQkJU3Bpbm5lciBzcGlubmVyID0gbmV3IFNwaW5uZXIoc2hlbGwsIFNXVC5OVUxMKTsKLQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8SW50ZWdlcj4gbnVtYmVySG9sZGVyID0gYnVpbGRWYWx1ZUhvbGRlcigpOwotCQlpbnQgZGVmYXVsdFZhbHVlID0gMTsKLQotCQlTcGlubmVyTW9kZWxBZGFwdGVyLmFkYXB0KAotCQkJbnVtYmVySG9sZGVyLAotCQkJc3Bpbm5lciwKLQkJCWRlZmF1bHRWYWx1ZQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgc3Bpbm5lcidzIHZhbHVlIHNob3VsZCBiZSB0aGUgZGVmYXVsdCB2YWx1ZSIsCi0JCQlkZWZhdWx0VmFsdWUsCi0JCQlzcGlubmVyLmdldFNlbGVjdGlvbigpCi0JCSk7Ci0KLQkJYXNzZXJ0TnVsbCgKLQkJCSJUaGUgbnVtYmVyIGhvbGRlcidzIHZhbHVlIHNob3VsZCBiZSBudWxsIiwKLQkJCW51bWJlckhvbGRlci5nZXRWYWx1ZSgpCi0JCSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6YXRpb25fMygpIHsKLQotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1vZGVsKTsKLQotCQlTcGlubmVyIHNwaW5uZXIgPSBuZXcgU3Bpbm5lcihzaGVsbCwgU1dULk5VTEwpOwotCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxJbnRlZ2VyPiBudW1iZXJIb2xkZXIgPSBidWlsZFZhbHVlSG9sZGVyKCk7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAxOwotCi0JCVNwaW5uZXJNb2RlbEFkYXB0ZXIuYWRhcHQoCi0JCQludW1iZXJIb2xkZXIsCi0JCQlzcGlubmVyLAotCQkJZGVmYXVsdFZhbHVlCi0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBzcGlubmVyJ3MgdmFsdWUgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IHZhbHVlIiwKLQkJCWRlZmF1bHRWYWx1ZSwKLQkJCXNwaW5uZXIuZ2V0U2VsZWN0aW9uKCkKLQkJKTsKLQotCQlhc3NlcnROdWxsKAotCQkJIlRoZSBudW1iZXIgaG9sZGVyJ3MgdmFsdWUgc2hvdWxkIGJlIG51bGwiLAotCQkJbnVtYmVySG9sZGVyLmdldFZhbHVlKCkKLQkJKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgbW9kZWwgc2hvdWxkIG5vdCBoYXZlIHJlY2VpdmVkIHRoZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24iLAotCQkJbW9kZWwuaXNTZXRWYWx1ZUNhbGxlZCgpCi0JCSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6YXRpb25fNCgpIHsKLQotCQlpbnQgdmFsdWUgPSAyOwotCQltb2RlbC5zZXRWYWx1ZSh2YWx1ZSk7Ci0JCW1vZGVsLmNsZWFyU2V0VmFsdWVDYWxsZWRGbGFnKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCVNwaW5uZXIgc3Bpbm5lciA9IG5ldyBTcGlubmVyKHNoZWxsLCBTV1QuTlVMTCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEludGVnZXI+IG51bWJlckhvbGRlciA9IGJ1aWxkVmFsdWVIb2xkZXIoKTsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IDE7Ci0KLQkJU3Bpbm5lck1vZGVsQWRhcHRlci5hZGFwdCgKLQkJCW51bWJlckhvbGRlciwKLQkJCXNwaW5uZXIsCi0JCQlkZWZhdWx0VmFsdWUKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHNwaW5uZXIncyB2YWx1ZSBzaG91bGQgYmUgdGhlIHZhbHVlIGNvbWluZyBmcm9tIHRoZSBtb2RlbCIsCi0JCQl2YWx1ZSwKLQkJCXNwaW5uZXIuZ2V0U2VsZWN0aW9uKCkKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIG51bWJlciBob2xkZXIncyB2YWx1ZSBzaG91bGQgYmUgIiArIHZhbHVlLAotCQkJSW50ZWdlci52YWx1ZU9mKHZhbHVlKSwKLQkJCW51bWJlckhvbGRlci5nZXRWYWx1ZSgpCi0JCSk7Ci0KLQkJYXNzZXJ0RmFsc2UoCi0JCQkiVGhlIG1vZGVsIHNob3VsZCBub3QgaGF2ZSByZWNlaXZlZCB0aGUgdmFsdWUgZHVyaW5nIGluaXRpYWxpemF0aW9uIiwKLQkJCW1vZGVsLmlzU2V0VmFsdWVDYWxsZWQoKQotCQkpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFZhbHVlQ2hhbmdlZCgpIHsKLQotCQlpbnQgdmFsdWUgPSAyOwotCQltb2RlbC5zZXRWYWx1ZSh2YWx1ZSk7Ci0JCW1vZGVsLmNsZWFyU2V0VmFsdWVDYWxsZWRGbGFnKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobW9kZWwpOwotCi0JCVNwaW5uZXIgc3Bpbm5lciA9IG5ldyBTcGlubmVyKHNoZWxsLCBTV1QuTlVMTCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEludGVnZXI+IG51bWJlckhvbGRlciA9IGJ1aWxkVmFsdWVIb2xkZXIoKTsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IDE7Ci0KLQkJU3Bpbm5lck1vZGVsQWRhcHRlci5hZGFwdCgKLQkJCW51bWJlckhvbGRlciwKLQkJCXNwaW5uZXIsCi0JCQlkZWZhdWx0VmFsdWUKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHNwaW5uZXIncyB2YWx1ZSBzaG91bGQgYmUgY29taW5nIGZyb20gdGhlIG1vZGVsIiwKLQkJCXZhbHVlLAotCQkJc3Bpbm5lci5nZXRTZWxlY3Rpb24oKQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgbnVtYmVyIGhvbGRlcidzIHZhbHVlIHNob3VsZCBiZSB0aGUgbW9kZWwncyB2YWx1ZSIsCi0JCQltb2RlbC5nZXRWYWx1ZSgpLAotCQkJbnVtYmVySG9sZGVyLmdldFZhbHVlKCkKLQkJKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgbW9kZWwgc2hvdWxkIG5vdCBoYXZlIHJlY2VpdmVkIHRoZSB2YWx1ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24iLAotCQkJbW9kZWwuaXNTZXRWYWx1ZUNhbGxlZCgpCi0JCSk7Ci0KLQkJLy8gQ2hhbmdlIHRoZSB2YWx1ZSBpbiB0aGUgbW9kZWwKLQkJdmFsdWUgPSA0OwotCQltb2RlbC5zZXRWYWx1ZSh2YWx1ZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBzcGlubmVyJ3MgdmFsdWUgc2hvdWxkIGJlIGNvbWluZyBmcm9tIHRoZSBtb2RlbCIsCi0JCQl2YWx1ZSwKLQkJCXNwaW5uZXIuZ2V0U2VsZWN0aW9uKCkKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIG1vZGVsJ3MgdmFsdWUgd2FzIHNvbWVob3cgY2hhbmdlZCIsCi0JCQlJbnRlZ2VyLnZhbHVlT2YodmFsdWUpLAotCQkJbW9kZWwuZ2V0VmFsdWUoKQotCQkpOwotCi0JCS8vIENoYW5nZSB0aGUgdmFsdWUgZnJvbSB0aGUgc3Bpbm5lcgotCQl2YWx1ZSA9IDY7Ci0JCXNwaW5uZXIuc2V0U2VsZWN0aW9uKHZhbHVlKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHNwaW5uZXIncyB2YWx1ZSBzaG91bGQgYmUgdGhlIG5ldyB2YWx1ZSBzZXQiLAotCQkJdmFsdWUsCi0JCQlzcGlubmVyLmdldFNlbGVjdGlvbigpCi0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBtb2RlbCdzIHZhbHVlIHdhcyBzdXBwb3NlZCB0byBiZSB1cGRhdGVkIiwKLQkJCUludGVnZXIudmFsdWVPZih2YWx1ZSksCi0JCQltb2RlbC5nZXRWYWx1ZSgpCi0JCSk7Ci0KLQkJLy8gRGlzY29ubmVjdCBmcm9tIG1vZGVsCi0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobnVsbCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBzcGlubmVyJ3MgdmFsdWUgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IHZhbHVlIiwKLQkJCWRlZmF1bHRWYWx1ZSwKLQkJCXNwaW5uZXIuZ2V0U2VsZWN0aW9uKCkKLQkJKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwgewotCi0JCXByaXZhdGUgYm9vbGVhbiBzZXRWYWx1ZUNhbGxlZDsKLQkJcHJpdmF0ZSBJbnRlZ2VyIHZhbHVlOwotCi0JCXN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfUFJPUEVSVFkgPSAidmFsdWUiOwotCi0JCXZvaWQgY2xlYXJTZXRWYWx1ZUNhbGxlZEZsYWcoKSB7Ci0JCQlzZXRWYWx1ZUNhbGxlZCA9IGZhbHNlOwotCQl9Ci0KLQkJSW50ZWdlciBnZXRWYWx1ZSgpIHsKLQkJCXJldHVybiB2YWx1ZTsKLQkJfQotCi0JCWJvb2xlYW4gaXNTZXRWYWx1ZUNhbGxlZCgpIHsKLQkJCXJldHVybiBzZXRWYWx1ZUNhbGxlZDsKLQkJfQotCi0JCXZvaWQgc2V0VmFsdWUoSW50ZWdlciB2YWx1ZSkgewotCQkJc2V0VmFsdWVDYWxsZWQgPSB0cnVlOwotCi0JCQlJbnRlZ2VyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTsKLQkJCXRoaXMudmFsdWUgPSB2YWx1ZTsKLQkJCWZpcmVQcm9wZXJ0eUNoYW5nZWQoVkFMVUVfUFJPUEVSVFksIG9sZFZhbHVlLCB2YWx1ZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1RhYmxlTW9kZWxBZGFwdGVyVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3N3dC9UYWJsZU1vZGVsQWRhcHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU3YjhiNC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1RhYmxlTW9kZWxBZGFwdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnN3dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5zd3QuQ29sdW1uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwuc3d0LlRhYmxlTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC5zd3QuVGFibGVNb2RlbEFkYXB0ZXIuU2VsZWN0aW9uQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnN3dC5UYWJsZU1vZGVsQWRhcHRlci5TZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5Db2xsZWN0aW9uVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuaXRlcmF0b3JzLkNsb25lTGlzdEl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLkFic3RyYWN0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuTGlzdEFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuUHJvcGVydHlBc3BlY3RBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlByb3BlcnR5Q29sbGVjdGlvblZhbHVlTW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Db2xsZWN0aW9uVmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5MaXN0VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Xcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIFRhYmxlTW9kZWxBZGFwdGVyVGVzdCB7Ci0KLQlwcml2YXRlIFNoZWxsIHNoZWxsOwotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8TWFuYWdlcj4gc3ViamVjdEhvbGRlcjsKLQotCXByaXZhdGUgQ29sdW1uQWRhcHRlcjxFbXBsb3llZT4gYnVpbGRDb2x1bW5BZGFwdGVyKCkgewotCQlyZXR1cm4gbmV3IFRhYmxlQ29sdW1uQWRhcHRlcigpOwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8RW1wbG95ZWU+IGJ1aWxkRW1wbG95ZWVIb2xkZXIoKSB7Ci0JCXJldHVybiBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEVtcGxveWVlPigpOwotCX0KLQotCXByaXZhdGUgU2ltcGxlQ29sbGVjdGlvblZhbHVlTW9kZWw8RW1wbG95ZWU+IGJ1aWxkRW1wbG95ZWVIb2xkZXJzKCkgewotCQlyZXR1cm4gbmV3IFNpbXBsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsPEVtcGxveWVlPigpOwotCX0KLQotCXByaXZhdGUgTGlzdFZhbHVlTW9kZWw8RW1wbG95ZWU+IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCkgewotCQlyZXR1cm4gbmV3IExpc3RBc3BlY3RBZGFwdGVyPE1hbmFnZXIsIEVtcGxveWVlPihzdWJqZWN0SG9sZGVyLCBNYW5hZ2VyLkVNUExPWUVFU19MSVNUKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBMaXN0SXRlcmF0b3I8RW1wbG95ZWU+IGxpc3RJdGVyYXRvcl8oKSB7Ci0JCQkJcmV0dXJuIHN1YmplY3QuZW1wbG95ZWVzKCk7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGludCBzaXplXygpIHsKLQkJCQlyZXR1cm4gc3ViamVjdC5lbXBsb3llZXNTaXplKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBJVGFibGVMYWJlbFByb3ZpZGVyIGJ1aWxkTGFiZWxQcm92aWRlcigpIHsKLQkJcmV0dXJuIG5ldyBUYWJsZUxhYmVsUHJvdmlkZXIoKTsKLQl9Ci0KLQlwcml2YXRlIFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyPEVtcGxveWVlPiBidWlsZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKGZpbmFsIENvbGxlY3Rpb248RW1wbG95ZWU+IGVtcGxveWVlcykgewotCQlyZXR1cm4gbmV3IFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyPEVtcGxveWVlPigpIHsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlRXZlbnQ8RW1wbG95ZWU+IGUpIHsKLQkJCQllbXBsb3llZXMuY2xlYXIoKTsKLQkJCQlDb2xsZWN0aW9uVG9vbHMuYWRkQWxsKGVtcGxveWVlcywgZS5zZWxlY3Rpb24oKSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxNYW5hZ2VyPiBidWlsZFN1YmplY3RIb2xkZXIoKSB7Ci0JCXJldHVybiBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPE1hbmFnZXI+KCk7Ci0JfQotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc2hlbGwgICAgICAgICA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCXN1YmplY3RIb2xkZXIgPSBidWlsZFN1YmplY3RIb2xkZXIoKTsKLQl9Ci0KLQlAQWZ0ZXIKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCi0JCWlmICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7Ci0JCQlzaGVsbC5kaXNwb3NlKCk7Ci0JCX0KLQotCQlzaGVsbCAgICAgICAgID0gbnVsbDsKLQkJc3ViamVjdEhvbGRlciA9IG51bGw7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q2hhbmdlZCgpIHsKLQotCQlUYWJsZSB0YWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJKTsKLQotCQlMaXN0VmFsdWVNb2RlbDxFbXBsb3llZT4gbGlzdEhvbGRlciA9IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1Ib2xkZXIgPSBidWlsZEVtcGxveWVlSG9sZGVyKCk7Ci0KLQkJTWFuYWdlciBtYW5hZ2VyID0gbmV3IE1hbmFnZXIoKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtYW5hZ2VyKTsKLQotCQluZXcgVGFibGVNb2RlbCgKLQkJCWxpc3RIb2xkZXIsCi0JCQlzZWxlY3RlZEl0ZW1Ib2xkZXIsCi0JCQl0YWJsZSwKLQkJCWJ1aWxkQ29sdW1uQWRhcHRlcigpLAotCQkJYnVpbGRMYWJlbFByb3ZpZGVyKCkKLQkJKTsKLQotCQkvLyBDcmVhdGUgRW1wbG95ZWVzCi0JCVN0cmluZyBleHBlY3RlZE5hbWUxICAgID0gIkRhbGlfMSI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIxID0gIldUUF8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUxICAgPSAicGx1Zy1pbl8xIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMiAgICA9ICJEYWxpXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMiA9ICJXVFBfMiI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMiAgID0gInBsdWctaW5fMiI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTMgICAgPSAiRGFsaV8zIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjMgPSAiV1RQXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTMgICA9ICJwbHVnLWluXzMiOwotCi0JCUVtcGxveWVlIGVtcGxveWVlMSA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUxLCBleHBlY3RlZFRpdGxlMSwgZXhwZWN0ZWRNYW5hZ2VyMSk7Ci0JCUVtcGxveWVlIGVtcGxveWVlMiA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUyLCBleHBlY3RlZFRpdGxlMiwgZXhwZWN0ZWRNYW5hZ2VyMik7Ci0JCUVtcGxveWVlIGVtcGxveWVlMyA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUzLCBleHBlY3RlZFRpdGxlMywgZXhwZWN0ZWRNYW5hZ2VyMyk7Ci0KLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTEpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMik7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUzKTsKLQotCQkvLyBNYWtlIHN1cmUgdGhlIFRhYmxlIHdhcyBwb3B1bGF0ZWQKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG51bWJlciBvZiBUYWJsZUl0ZW1zIHNob3VsZCBiZSAzIiwgMywgdGFibGUuZ2V0SXRlbUNvdW50KCkpOwotCi0JCS8vIENoYW5nZSB0aGUgbGlzdCBvZiBFbXBsb3llZXMKLQkJQXJyYXlMaXN0PEVtcGxveWVlPiBlbXBsb3llZXMgPSBuZXcgQXJyYXlMaXN0PEVtcGxveWVlPigzKTsKLQkJZW1wbG95ZWVzLmFkZChlbXBsb3llZTMpOwotCQllbXBsb3llZXMuYWRkKGVtcGxveWVlMik7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUxKTsKLQkJbWFuYWdlci5jaGFuZ2VFbXBsb3llZXMoZW1wbG95ZWVzKTsKLQotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbnVtYmVyIG9mIFRhYmxlSXRlbXMgc2hvdWxkIGJlIDMiLCAzLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIDAsIGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkTWFuYWdlcjMsIGV4cGVjdGVkVGl0bGUzKTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIDEsIGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkTWFuYWdlcjIsIGV4cGVjdGVkVGl0bGUyKTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIDIsIGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkTWFuYWdlcjEsIGV4cGVjdGVkVGl0bGUxKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDbGVhcmVkKCkgewotCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkpOwotCi0JCUxpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyID0gYnVpbGRFbXBsb3llZUxpc3RIb2xkZXIoKTsKLQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8RW1wbG95ZWU+IHNlbGVjdGVkSXRlbUhvbGRlciA9IGJ1aWxkRW1wbG95ZWVIb2xkZXIoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCW5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbUhvbGRlciwKLQkJCXRhYmxlLAotCQkJYnVpbGRDb2x1bW5BZGFwdGVyKCksCi0JCQlidWlsZExhYmVsUHJvdmlkZXIoKQotCQkpOwotCi0JCS8vIENyZWF0ZSBFbXBsb3llZXMKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTEgICAgPSAiRGFsaV8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjEgPSAiV1RQXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTEgICA9ICJwbHVnLWluXzEiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUyICAgID0gIkRhbGlfMiI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIyID0gIldUUF8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUyICAgPSAicGx1Zy1pbl8yIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMyAgICA9ICJEYWxpXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMyA9ICJXVFBfMyI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMyAgID0gInBsdWctaW5fMyI7Ci0KLQkJRW1wbG95ZWUgZW1wbG95ZWUxID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkVGl0bGUxLCBleHBlY3RlZE1hbmFnZXIxKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUyID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkVGl0bGUyLCBleHBlY3RlZE1hbmFnZXIyKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUzID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkVGl0bGUzLCBleHBlY3RlZE1hbmFnZXIzKTsKLQotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMSk7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUyKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTMpOwotCi0JCS8vIE1ha2Ugc3VyZSB0aGUgVGFibGUgd2FzIHBvcHVsYXRlZAotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbnVtYmVyIG9mIFRhYmxlSXRlbXMgc2hvdWxkIGJlIDMiLCAzLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJLy8gVGVzdCByZW1vdmluZyB0aGVtIGFsbAotCQltYW5hZ2VyLnJlbW92ZUFsbEVtcGxveWVlcygpOwotCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBsaXN0IGhvbGRlciBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQiLCAwLCBsaXN0SG9sZGVyLnNpemUoKSk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBUYWJsZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQiLCAwLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0SXRlbUFkZGVkKCkgewotCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkpOwotCi0JCUxpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyID0gYnVpbGRFbXBsb3llZUxpc3RIb2xkZXIoKTsKLQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8RW1wbG95ZWU+IHNlbGVjdGVkSXRlbUhvbGRlciA9IGJ1aWxkRW1wbG95ZWVIb2xkZXIoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCVRhYmxlTW9kZWwgdGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbUhvbGRlciwKLQkJCXRhYmxlLAotCQkJYnVpbGRDb2x1bW5BZGFwdGVyKCksCi0JCQlidWlsZExhYmVsUHJvdmlkZXIoKQotCQkpOwotCi0JCS8vIENyZWF0ZSBhIG5ldyBFbXBsb3llZQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lICAgID0gIkRhbGkiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyID0gIldUUCI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlICAgPSAicGx1Zy1pbiI7Ci0KLQkJRW1wbG95ZWUgZW1wbG95ZWUgPSBtYW5hZ2VyLmFkZEVtcGxveWVlKGV4cGVjdGVkTmFtZSwgZXhwZWN0ZWRUaXRsZSwgZXhwZWN0ZWRNYW5hZ2VyKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBuZXcgRW1wbG95ZWUgd2FzIG5vdCBjcmVhdGVkIiwgZW1wbG95ZWUpOwotCi0JCS8vIFJldHJpZXZlIHRoZSBUYWJsZUl0ZW0gcmVwcmVzZW50aW5nIHRoZSBuZXcgRW1wbG95ZWUKLQkJaW50IGluZGV4ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG5ldyBFbXBsb3llZSB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSBtb2RlbCIsIDAsIGluZGV4KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG51bWJlciBvZiBUYWJsZUl0ZW0gc2hvdWxkIGJlIDEiLCAxLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4LCBleHBlY3RlZE5hbWUsIGV4cGVjdGVkTWFuYWdlciwgZXhwZWN0ZWRUaXRsZSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0SXRlbU1vdmVkKCkgewotCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkpOwotCi0JCUxpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyID0gYnVpbGRFbXBsb3llZUxpc3RIb2xkZXIoKTsKLQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8RW1wbG95ZWU+IHNlbGVjdGVkSXRlbUhvbGRlciA9IGJ1aWxkRW1wbG95ZWVIb2xkZXIoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCVRhYmxlTW9kZWwgdGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbUhvbGRlciwKLQkJCXRhYmxlLAotCQkJYnVpbGRDb2x1bW5BZGFwdGVyKCksCi0JCQlidWlsZExhYmVsUHJvdmlkZXIoKQotCQkpOwotCi0JCS8vIENyZWF0ZSBFbXBsb3llZXMKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTEgICAgPSAiRGFsaV8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjEgPSAiV1RQXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTEgICA9ICJwbHVnLWluXzEiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUyICAgID0gIkRhbGlfMiI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIyID0gIldUUF8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUyICAgPSAicGx1Zy1pbl8yIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMyAgICA9ICJEYWxpXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMyA9ICJXVFBfMyI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMyAgID0gInBsdWctaW5fMyI7Ci0KLQkJRW1wbG95ZWUgZW1wbG95ZWUxID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkVGl0bGUxLCBleHBlY3RlZE1hbmFnZXIxKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUyID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkVGl0bGUyLCBleHBlY3RlZE1hbmFnZXIyKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUzID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkVGl0bGUzLCBleHBlY3RlZE1hbmFnZXIzKTsKLQotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMSk7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUyKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTMpOwotCi0JCS8vIE1ha2Ugc3VyZSB0aGUgRW1wbG95ZWVzIHdlcmUgYWRkZWQgdG8gdGhlIFRhYmxlCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBudW1iZXIgb2YgVGFibGVJdGVtIHNob3VsZCBiZSAzIiwgMywgdGFibGUuZ2V0SXRlbUNvdW50KCkpOwotCi0JCS8vIE1vdmUgYW4gRW1wbG95ZWUgdXAgdGhlIGxpc3QKLQkJbWFuYWdlci5tb3ZlRW1wbG95ZWVVcChlbXBsb3llZTIpOwotCi0JCWludCBpbmRleDEgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUxKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDEgd2FzIG5vdCBtb3ZlZCBpbiB0aGUgdGFibGUgbW9kZWwiLCAxLCBpbmRleDEpOwotCi0JCWludCBpbmRleDIgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUyKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDIgd2FzIG5vdCBtb3ZlZCBpbiB0aGUgdGFibGUgbW9kZWwiLCAwLCBpbmRleDIpOwotCi0JCWludCBpbmRleDMgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUzKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDMgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbW92ZWQgaW4gdGhlIHRhYmxlIG1vZGVsIiwgMiwgaW5kZXgzKTsKLQotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXgxLCBleHBlY3RlZE5hbWUxLCBleHBlY3RlZE1hbmFnZXIxLCBleHBlY3RlZFRpdGxlMSk7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDIsIGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkTWFuYWdlcjIsIGV4cGVjdGVkVGl0bGUyKTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4MywgZXhwZWN0ZWROYW1lMywgZXhwZWN0ZWRNYW5hZ2VyMywgZXhwZWN0ZWRUaXRsZTMpOwotCi0JCS8vIE1vdmUgYW4gRW1wbG95ZWUgZG93biB0aGUgbGlzdAotCQltYW5hZ2VyLm1vdmVFbXBsb3llZURvd24oZW1wbG95ZWUxKTsKLQotCQlpbmRleDEgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUxKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDEgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbW92ZWQgaW4gdGhlIHRhYmxlIG1vZGVsIiwgMiwgaW5kZXgxKTsKLQotCQlpbmRleDIgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUyKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDIgd2FzIG5vdCBtb3ZlZCBpbiB0aGUgdGFibGUgbW9kZWwiLCAwLCBpbmRleDIpOwotCi0JCWluZGV4MyA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMyB3YXMgbm90IG1vdmVkIGluIHRoZSB0YWJsZSBtb2RlbCIsIDEsIGluZGV4Myk7Ci0KLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4MSwgZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRNYW5hZ2VyMSwgZXhwZWN0ZWRUaXRsZTEpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXgyLCBleHBlY3RlZE5hbWUyLCBleHBlY3RlZE1hbmFnZXIyLCBleHBlY3RlZFRpdGxlMik7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDMsIGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkTWFuYWdlcjMsIGV4cGVjdGVkVGl0bGUzKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RJdGVtUmVtb3ZlZCgpIHsKLQotCQlUYWJsZSB0YWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJKTsKLQotCQlMaXN0VmFsdWVNb2RlbDxFbXBsb3llZT4gbGlzdEhvbGRlciA9IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1Ib2xkZXIgPSBidWlsZEVtcGxveWVlSG9sZGVyKCk7Ci0KLQkJTWFuYWdlciBtYW5hZ2VyID0gbmV3IE1hbmFnZXIoKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtYW5hZ2VyKTsKLQotCQlUYWJsZU1vZGVsIHRhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbCgKLQkJCWxpc3RIb2xkZXIsCi0JCQlzZWxlY3RlZEl0ZW1Ib2xkZXIsCi0JCQl0YWJsZSwKLQkJCWJ1aWxkQ29sdW1uQWRhcHRlcigpLAotCQkJYnVpbGRMYWJlbFByb3ZpZGVyKCkKLQkJKTsKLQotCQkvLyBDcmVhdGUgYSBuZXcgRW1wbG95ZWUKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZSAgICA9ICJEYWxpIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlciA9ICJXVFAiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZSAgID0gInBsdWctaW4iOwotCi0JCUVtcGxveWVlIGVtcGxveWVlID0gbWFuYWdlci5hZGRFbXBsb3llZShleHBlY3RlZE5hbWUsIGV4cGVjdGVkVGl0bGUsIGV4cGVjdGVkTWFuYWdlcik7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKCJUaGUgbmV3IEVtcGxveWVlIHdhcyBub3QgY3JlYXRlZCIsIGVtcGxveWVlKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG51bWJlciBvZiBUYWJsZUl0ZW0gc2hvdWxkIGJlIDEiLCAxLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJLy8gTWFrZSBzdXJlIGl0IHdhcyBhZGRlZCB0byB0aGUgbW9kZWwKLQkJaW50IGluZGV4ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG5ldyBFbXBsb3llZSB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSBtb2RlbCIsIDAsIGluZGV4KTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4LCBleHBlY3RlZE5hbWUsIGV4cGVjdGVkTWFuYWdlciwgZXhwZWN0ZWRUaXRsZSk7Ci0KLQkJLy8gUmV0cmlldmUgdGhlIFRhYmxlSXRlbSByZXByZXNlbnRpbmcgdGhlIG5ldyBFbXBsb3llZQotCQlUYWJsZUl0ZW0gdGFibGVJdGVtID0gdGFibGUuZ2V0SXRlbShpbmRleCk7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKCJObyBUYWJsZUl0ZW0gd2FzIGZvdW5kIGZvciB0aGUgbmV3IEVtcGxveWVlIiwgdGFibGVJdGVtKTsKLQotCQkvLyBOb3cgdGVzdCB0aGUgaXRlbSBiZWluZyByZW1vdmVkCi0JCW1hbmFnZXIucmVtb3ZlRW1wbG95ZWUoZW1wbG95ZWUpOwotCQlpbmRleCA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZSk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgdGFibGUgbW9kZWwiLCAtMSwgaW5kZXgpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbnVtYmVyIG9mIFRhYmxlSXRlbSBzaG91bGQgYmUgMCIsIDAsIHRhYmxlLmdldEl0ZW1Db3VudCgpKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RJdGVtUmVwbGFjZWQoKSB7Ci0KLQkJVGFibGUgdGFibGUgPSBuZXcgVGFibGUoc2hlbGwsIFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5NVUxUSSk7Ci0KLQkJTGlzdFZhbHVlTW9kZWw8RW1wbG95ZWU+IGxpc3RIb2xkZXIgPSBidWlsZEVtcGxveWVlTGlzdEhvbGRlcigpOwotCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxFbXBsb3llZT4gc2VsZWN0ZWRJdGVtSG9sZGVyID0gYnVpbGRFbXBsb3llZUhvbGRlcigpOwotCi0JCU1hbmFnZXIgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobWFuYWdlcik7Ci0KLQkJVGFibGVNb2RlbCB0YWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoCi0JCQlsaXN0SG9sZGVyLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyLAotCQkJdGFibGUsCi0JCQlidWlsZENvbHVtbkFkYXB0ZXIoKSwKLQkJCWJ1aWxkTGFiZWxQcm92aWRlcigpCi0JCSk7Ci0KLQkJLy8gQ3JlYXRlIGEgbmV3IEVtcGxveWVlCi0JCVN0cmluZyBleHBlY3RlZE5hbWUxICAgID0gIkRhbGlfMSI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIxID0gIldUUF8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUxICAgPSAicGx1Zy1pbl8xIjsKLQotCQlFbXBsb3llZSBlbXBsb3llZTEgPSBtYW5hZ2VyLmFkZEVtcGxveWVlKGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkVGl0bGUxLCBleHBlY3RlZE1hbmFnZXIxKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBuZXcgRW1wbG95ZWUgd2FzIG5vdCBjcmVhdGVkIiwgZW1wbG95ZWUxKTsKLQotCQkvLyBNYWtlIHN1cmUgaXQgd2FzIGFkZGVkIHRvIHRoZSBtb2RlbAotCQlpbnQgaW5kZXgxID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMSk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBuZXcgRW1wbG95ZWUgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUgbW9kZWwiLCAwLCBpbmRleDEpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbnVtYmVyIG9mIFRhYmxlSXRlbSBzaG91bGQgYmUgMSIsIDEsIHRhYmxlLmdldEl0ZW1Db3VudCgpKTsKLQotCQkvLyBSZXRyaWV2ZSB0aGUgVGFibGVJdGVtIHJlcHJlc2VudGluZyB0aGUgbmV3IEVtcGxveWVlCi0JCVRhYmxlSXRlbSB0YWJsZUl0ZW0gPSB0YWJsZS5nZXRJdGVtKGluZGV4MSk7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKCJObyBUYWJsZUl0ZW0gd2FzIGZvdW5kIGZvciB0aGUgbmV3IEVtcGxveWVlIiwgdGFibGVJdGVtKTsKLQotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXgxLCBleHBlY3RlZE5hbWUxLCBleHBlY3RlZE1hbmFnZXIxLCBleHBlY3RlZFRpdGxlMSk7Ci0KLQkJLy8gUmVwbGFjZSB0aGUgRW1wbG95ZWUKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTIgICAgPSAiRGFsaV8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjIgPSAiV1RQXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTIgICA9ICJwbHVnLWluXzIiOwotCi0JCUVtcGxveWVlIGVtcGxveWVlMiA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUyLCBleHBlY3RlZFRpdGxlMiwgZXhwZWN0ZWRNYW5hZ2VyMik7Ci0JCW1hbmFnZXIucmVwbGFjZShlbXBsb3llZTEsIGVtcGxveWVlMik7Ci0KLQkJaW50IGluZGV4MiA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTIpOwotCQlBc3NlcnQuYXNzZXJ0U2FtZSgiVGhlIEVtcGxveWVlIHRoYXQgZ290IHJlcGxhY2VkIHNob3VsZCBiZSBhdCBpbmRleCAiICsgaW5kZXgxLCBpbmRleDEsIGluZGV4Mik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBudW1iZXIgb2YgVGFibGVJdGVtIHNob3VsZCBiZSAxIiwgMSwgdGFibGUuZ2V0SXRlbUNvdW50KCkpOwotCi0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDIsIGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkTWFuYWdlcjIsIGV4cGVjdGVkVGl0bGUyKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RJdGVtc0FkZGVkKCkgewotCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkpOwotCi0JCUxpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyID0gYnVpbGRFbXBsb3llZUxpc3RIb2xkZXIoKTsKLQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8RW1wbG95ZWU+IHNlbGVjdGVkSXRlbUhvbGRlciA9IGJ1aWxkRW1wbG95ZWVIb2xkZXIoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCVRhYmxlTW9kZWwgdGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbUhvbGRlciwKLQkJCXRhYmxlLAotCQkJYnVpbGRDb2x1bW5BZGFwdGVyKCksCi0JCQlidWlsZExhYmVsUHJvdmlkZXIoKQotCQkpOwotCi0JCS8vIENyZWF0ZSBFbXBsb3llZXMKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTEgICAgPSAiRGFsaV8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjEgPSAiV1RQXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTEgICA9ICJwbHVnLWluXzEiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUyICAgID0gIkRhbGlfMiI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIyID0gIldUUF8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUyICAgPSAicGx1Zy1pbl8yIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMyAgICA9ICJEYWxpXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMyA9ICJXVFBfMyI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMyAgID0gInBsdWctaW5fMyI7Ci0KLQkJRW1wbG95ZWUgZW1wbG95ZWUxID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkVGl0bGUxLCBleHBlY3RlZE1hbmFnZXIxKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUyID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkVGl0bGUyLCBleHBlY3RlZE1hbmFnZXIyKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUzID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkVGl0bGUzLCBleHBlY3RlZE1hbmFnZXIzKTsKLQotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMSk7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUyKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTMpOwotCi0JCS8vIFJldHJpZXZlIHRoZSBUYWJsZUl0ZW1zIHJlcHJlc2VudGluZyB0aGUgZW1wbG95ZWVzCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBudW1iZXIgb2YgVGFibGVJdGVtIHNob3VsZCBiZSAzIiwgMywgdGFibGUuZ2V0SXRlbUNvdW50KCkpOwotCi0JCWludCBpbmRleCA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTEpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMSB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSBtb2RlbCIsIDAsIGluZGV4KTsKLQotCQlpbmRleCA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMiB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSBtb2RlbCIsIDEsIGluZGV4KTsKLQotCQlpbmRleCA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMyB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSBtb2RlbCIsIDIsIGluZGV4KTsKLQotCQkvLyBNYWtlIHN1cmUgdGhlIFRhYmxlSXRlbSB3YXMgY29ycmVjdGx5IHBvcHVsYXRlZAotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgMCwgZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRNYW5hZ2VyMSwgZXhwZWN0ZWRUaXRsZTEpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgMSwgZXhwZWN0ZWROYW1lMiwgZXhwZWN0ZWRNYW5hZ2VyMiwgZXhwZWN0ZWRUaXRsZTIpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgMiwgZXhwZWN0ZWROYW1lMywgZXhwZWN0ZWRNYW5hZ2VyMywgZXhwZWN0ZWRUaXRsZTMpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdEl0ZW1zTW92ZWQoKSB7Ci0KLQkJVGFibGUgdGFibGUgPSBuZXcgVGFibGUoc2hlbGwsIFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5NVUxUSSk7Ci0KLQkJTGlzdFZhbHVlTW9kZWw8RW1wbG95ZWU+IGxpc3RIb2xkZXIgPSBidWlsZEVtcGxveWVlTGlzdEhvbGRlcigpOwotCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxFbXBsb3llZT4gc2VsZWN0ZWRJdGVtSG9sZGVyID0gYnVpbGRFbXBsb3llZUhvbGRlcigpOwotCi0JCU1hbmFnZXIgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobWFuYWdlcik7Ci0KLQkJVGFibGVNb2RlbCB0YWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoCi0JCQlsaXN0SG9sZGVyLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyLAotCQkJdGFibGUsCi0JCQlidWlsZENvbHVtbkFkYXB0ZXIoKSwKLQkJCWJ1aWxkTGFiZWxQcm92aWRlcigpCi0JCSk7Ci0KLQkJLy8gQ3JlYXRlIEVtcGxveWVlcwotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMSAgICA9ICJEYWxpXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMSA9ICJXVFBfMSI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMSAgID0gInBsdWctaW5fMSI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTIgICAgPSAiRGFsaV8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjIgPSAiV1RQXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTIgICA9ICJwbHVnLWluXzIiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUzICAgID0gIkRhbGlfMyI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIzID0gIldUUF8zIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUzICAgPSAicGx1Zy1pbl8zIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lNCAgICA9ICJEYWxpXzQiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyNCA9ICJXVFBfNCI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlNCAgID0gInBsdWctaW5fNCI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTUgICAgPSAiRGFsaV81IjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjUgPSAiV1RQXzUiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTUgICA9ICJwbHVnLWluXzUiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWU2ICAgID0gIkRhbGlfNiI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXI2ID0gIldUUF82IjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGU2ICAgPSAicGx1Zy1pbl82IjsKLQotCQlFbXBsb3llZSBlbXBsb3llZTEgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRUaXRsZTEsIGV4cGVjdGVkTWFuYWdlcjEpOwotCQlFbXBsb3llZSBlbXBsb3llZTIgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMiwgZXhwZWN0ZWRUaXRsZTIsIGV4cGVjdGVkTWFuYWdlcjIpOwotCQlFbXBsb3llZSBlbXBsb3llZTMgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMywgZXhwZWN0ZWRUaXRsZTMsIGV4cGVjdGVkTWFuYWdlcjMpOwotCQlFbXBsb3llZSBlbXBsb3llZTQgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lNCwgZXhwZWN0ZWRUaXRsZTQsIGV4cGVjdGVkTWFuYWdlcjQpOwotCQlFbXBsb3llZSBlbXBsb3llZTUgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lNSwgZXhwZWN0ZWRUaXRsZTUsIGV4cGVjdGVkTWFuYWdlcjUpOwotCQlFbXBsb3llZSBlbXBsb3llZTYgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lNiwgZXhwZWN0ZWRUaXRsZTYsIGV4cGVjdGVkTWFuYWdlcjYpOwotCi0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUxKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTIpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMyk7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWU0KTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTUpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlNik7Ci0KLQkJLy8gTWFrZSBzdXJlIHRoZSBFbXBsb3llZXMgd2VyZSBhZGRlZCB0byB0aGUgVGFibGUKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG51bWJlciBvZiBUYWJsZUl0ZW0gc2hvdWxkIGJlIDYiLCA2LCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJLy8gTW92ZSBhbiBFbXBsb3llZSB1cCB0aGUgbGlzdAotCQlBcnJheUxpc3Q8RW1wbG95ZWU+IGVtcGxveWVlcyA9IG5ldyBBcnJheUxpc3Q8RW1wbG95ZWU+KDMpOwotCQllbXBsb3llZXMuYWRkKGVtcGxveWVlMyk7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWU0KTsKLQkJZW1wbG95ZWVzLmFkZChlbXBsb3llZTUpOwotCQltYW5hZ2VyLm1vdmVFbXBsb3llZXMoZW1wbG95ZWVzLCAwKTsKLQotCQlpbnQgaW5kZXgxID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMSk7Ci0JCWludCBpbmRleDIgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUyKTsKLQkJaW50IGluZGV4MyA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTMpOwotCQlpbnQgaW5kZXg0ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlNCk7Ci0JCWludCBpbmRleDUgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWU1KTsKLQkJaW50IGluZGV4NiA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTYpOwotCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSAxIGlzIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXgiLCAzLCBpbmRleDEpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMiBpcyBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IiwgNCwgaW5kZXgyKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDMgaXMgbm90IGF0IHRoZSByaWdodCBpbmRleCIsIDAsIGluZGV4Myk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSA0IGlzIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXgiLCAxLCBpbmRleDQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgNSBpcyBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IiwgMiwgaW5kZXg1KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDYgaXMgbm90IGF0IHRoZSByaWdodCBpbmRleCIsIDUsIGluZGV4Nik7Ci0KLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4MSwgZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRNYW5hZ2VyMSwgZXhwZWN0ZWRUaXRsZTEpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXgyLCBleHBlY3RlZE5hbWUyLCBleHBlY3RlZE1hbmFnZXIyLCBleHBlY3RlZFRpdGxlMik7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDMsIGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkTWFuYWdlcjMsIGV4cGVjdGVkVGl0bGUzKTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4NCwgZXhwZWN0ZWROYW1lNCwgZXhwZWN0ZWRNYW5hZ2VyNCwgZXhwZWN0ZWRUaXRsZTQpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXg1LCBleHBlY3RlZE5hbWU1LCBleHBlY3RlZE1hbmFnZXI1LCBleHBlY3RlZFRpdGxlNSk7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDYsIGV4cGVjdGVkTmFtZTYsIGV4cGVjdGVkTWFuYWdlcjYsIGV4cGVjdGVkVGl0bGU2KTsKLQotCQkvLyBNb3ZlIGFuIEVtcGxveWVlIGRvd24gdGhlIGxpc3QKLQkJZW1wbG95ZWVzID0gbmV3IEFycmF5TGlzdDxFbXBsb3llZT4oMik7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUxKTsKLQkJZW1wbG95ZWVzLmFkZChlbXBsb3llZTIpOwotCQltYW5hZ2VyLm1vdmVFbXBsb3llZXMoZW1wbG95ZWVzLCA0KTsKLQotCQlpbmRleDEgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUxKTsKLQkJaW5kZXgyID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMik7Ci0JCWluZGV4MyA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTMpOwotCQlpbmRleDQgPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWU0KTsKLQkJaW5kZXg1ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlNSk7Ci0JCWluZGV4NiA9IHRhYmxlTW9kZWwuaW5kZXhPZihlbXBsb3llZTYpOwotCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSAxIGlzIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXgiLCA0LCBpbmRleDEpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgMiBpcyBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IiwgNSwgaW5kZXgyKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDMgaXMgbm90IGF0IHRoZSByaWdodCBpbmRleCIsIDAsIGluZGV4Myk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSA0IGlzIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXgiLCAxLCBpbmRleDQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgRW1wbG95ZWUgNSBpcyBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IiwgMiwgaW5kZXg1KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIEVtcGxveWVlIDYgaXMgbm90IGF0IHRoZSByaWdodCBpbmRleCIsIDMsIGluZGV4Nik7Ci0KLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4MSwgZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRNYW5hZ2VyMSwgZXhwZWN0ZWRUaXRsZTEpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXgyLCBleHBlY3RlZE5hbWUyLCBleHBlY3RlZE1hbmFnZXIyLCBleHBlY3RlZFRpdGxlMik7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDMsIGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkTWFuYWdlcjMsIGV4cGVjdGVkVGl0bGUzKTsKLQkJdGVzdFRhYmxlSXRlbVByb3BlcnRpZXModGFibGUsIGluZGV4NCwgZXhwZWN0ZWROYW1lNCwgZXhwZWN0ZWRNYW5hZ2VyNCwgZXhwZWN0ZWRUaXRsZTQpOwotCQl0ZXN0VGFibGVJdGVtUHJvcGVydGllcyh0YWJsZSwgaW5kZXg1LCBleHBlY3RlZE5hbWU1LCBleHBlY3RlZE1hbmFnZXI1LCBleHBlY3RlZFRpdGxlNSk7Ci0JCXRlc3RUYWJsZUl0ZW1Qcm9wZXJ0aWVzKHRhYmxlLCBpbmRleDYsIGV4cGVjdGVkTmFtZTYsIGV4cGVjdGVkTWFuYWdlcjYsIGV4cGVjdGVkVGl0bGU2KTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RJdGVtc1JlbW92ZWQoKSB7Ci0KLQkJVGFibGUgdGFibGUgPSBuZXcgVGFibGUoc2hlbGwsIFNXVC5WX1NDUk9MTCB8IFNXVC5IX1NDUk9MTCB8IFNXVC5GVUxMX1NFTEVDVElPTiB8IFNXVC5NVUxUSSk7Ci0KLQkJTGlzdFZhbHVlTW9kZWw8RW1wbG95ZWU+IGxpc3RIb2xkZXIgPSBidWlsZEVtcGxveWVlTGlzdEhvbGRlcigpOwotCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxFbXBsb3llZT4gc2VsZWN0ZWRJdGVtSG9sZGVyID0gYnVpbGRFbXBsb3llZUhvbGRlcigpOwotCi0JCU1hbmFnZXIgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobWFuYWdlcik7Ci0KLQkJVGFibGVNb2RlbCB0YWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoCi0JCQlsaXN0SG9sZGVyLAotCQkJc2VsZWN0ZWRJdGVtSG9sZGVyLAotCQkJdGFibGUsCi0JCQlidWlsZENvbHVtbkFkYXB0ZXIoKSwKLQkJCWJ1aWxkTGFiZWxQcm92aWRlcigpCi0JCSk7Ci0KLQkJLy8gQ3JlYXRlIEVtcGxveWVlcwotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMSAgICA9ICJEYWxpXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMSA9ICJXVFBfMSI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMSAgID0gInBsdWctaW5fMSI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTIgICAgPSAiRGFsaV8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjIgPSAiV1RQXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTIgICA9ICJwbHVnLWluXzIiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUzICAgID0gIkRhbGlfMyI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIzID0gIldUUF8zIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUzICAgPSAicGx1Zy1pbl8zIjsKLQotCQlFbXBsb3llZSBlbXBsb3llZTEgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMSwgZXhwZWN0ZWRUaXRsZTEsIGV4cGVjdGVkTWFuYWdlcjEpOwotCQlFbXBsb3llZSBlbXBsb3llZTIgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMiwgZXhwZWN0ZWRUaXRsZTIsIGV4cGVjdGVkTWFuYWdlcjIpOwotCQlFbXBsb3llZSBlbXBsb3llZTMgPSBuZXcgRW1wbG95ZWUoZXhwZWN0ZWROYW1lMywgZXhwZWN0ZWRUaXRsZTMsIGV4cGVjdGVkTWFuYWdlcjMpOwotCi0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUxKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTIpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMyk7Ci0KLQkJLy8gUmV0cmlldmUgdGhlIFRhYmxlSXRlbXMgcmVwcmVzZW50aW5nIHRoZSBlbXBsb3llZXMKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGhlIG51bWJlciBvZiBUYWJsZUl0ZW0gc2hvdWxkIGJlIDMiLCAzLCB0YWJsZS5nZXRJdGVtQ291bnQoKSk7Ci0KLQkJaW50IGluZGV4ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMSk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSAxIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlIG1vZGVsIiwgMCwgaW5kZXgpOwotCi0JCWluZGV4ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSAyIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlIG1vZGVsIiwgMSwgaW5kZXgpOwotCi0JCWluZGV4ID0gdGFibGVNb2RlbC5pbmRleE9mKGVtcGxveWVlMyk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBFbXBsb3llZSAzIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlIG1vZGVsIiwgMiwgaW5kZXgpOwotCi0JCS8vIFJlbW92ZSAyIGl0ZW1zCi0JCUFycmF5TGlzdDxFbXBsb3llZT4gZW1wbG95ZWVzID0gbmV3IEFycmF5TGlzdDxFbXBsb3llZT4oMik7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUxKTsKLQkJZW1wbG95ZWVzLmFkZChlbXBsb3llZTMpOwotCQltYW5hZ2VyLnJlbW92ZUVtcGxveWVlcyhlbXBsb3llZXMpOwotCi0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBudW1iZXIgb2YgVGFibGVJdGVtIHNob3VsZCBiZSAxIiwgMSwgdGFibGUuZ2V0SXRlbUNvdW50KCkpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFByb3BlcnR5Q2hhbmdlZCgpIHsKLQotCQlUYWJsZSB0YWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJKTsKLQotCQlMaXN0VmFsdWVNb2RlbDxFbXBsb3llZT4gbGlzdEhvbGRlciA9IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCk7Ci0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1Ib2xkZXIgPSBidWlsZEVtcGxveWVlSG9sZGVyKCk7Ci0KLQkJTWFuYWdlciBtYW5hZ2VyID0gbmV3IE1hbmFnZXIoKTsKLQkJc3ViamVjdEhvbGRlci5zZXRWYWx1ZShtYW5hZ2VyKTsKLQotCQlUYWJsZU1vZGVsIHRhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbCgKLQkJCWxpc3RIb2xkZXIsCi0JCQlzZWxlY3RlZEl0ZW1Ib2xkZXIsCi0JCQl0YWJsZSwKLQkJCWJ1aWxkQ29sdW1uQWRhcHRlcigpLAotCQkJYnVpbGRMYWJlbFByb3ZpZGVyKCkKLQkJKTsKLQotCQkvLyBDcmVhdGUgYSBuZXcgRW1wbG95ZWUKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZSAgICA9ICJEYWxpIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlciA9ICJXVFAiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZSAgID0gInBsdWctaW4iOwotCi0JCUVtcGxveWVlIGVtcGxveWVlID0gbWFuYWdlci5hZGRFbXBsb3llZShleHBlY3RlZE5hbWUsIGV4cGVjdGVkVGl0bGUsIGV4cGVjdGVkTWFuYWdlcik7Ci0JCUFzc2VydC5hc3NlcnROb3ROdWxsKCJUaGUgbmV3IEVtcGxveWVlIHdhcyBub3QgY3JlYXRlZCIsIGVtcGxveWVlKTsKLQotCQkvLyBNYWtlIHN1cmUgaXQgd2FzIGFkZGVkIHRvIHRoZSBtb2RlbAotCQlpbnQgaW5kZXggPSB0YWJsZU1vZGVsLmluZGV4T2YoZW1wbG95ZWUpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbmV3IEVtcGxveWVlIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlIG1vZGVsIiwgMCwgaW5kZXgpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgbnVtYmVyIG9mIFRhYmxlSXRlbSBzaG91bGQgYmUgMSIsIDEsIHRhYmxlLmdldEl0ZW1Db3VudCgpKTsKLQotCQkvLyBSZXRyaWV2ZSB0aGUgVGFibGVJdGVtIHJlcHJlc2VudGluZyB0aGUgbmV3IEVtcGxveWVlCi0JCVRhYmxlSXRlbSB0YWJsZUl0ZW0gPSB0YWJsZS5nZXRJdGVtKGluZGV4KTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIk5vIFRhYmxlSXRlbSB3YXMgZm91bmQgZm9yIHRoZSBuZXcgRW1wbG95ZWUiLCB0YWJsZUl0ZW0pOwotCi0JCS8vIE5hbWUgcHJvcGVydHkKLQkJU3RyaW5nIGFjdHVhbE5hbWUgPSB0YWJsZUl0ZW0uZ2V0VGV4dChUYWJsZUNvbHVtbkFkYXB0ZXIuTkFNRV9DT0xVTU4pOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUYWJsZUl0ZW1bTkFNRV9DT0xVTU5dIHdhcyBub3Qgc2V0IGNvcnJlY3RseSIsIGV4cGVjdGVkTmFtZSwgYWN0dWFsTmFtZSk7Ci0KLQkJZXhwZWN0ZWROYW1lID0gIkpwdCI7Ci0JCWVtcGxveWVlLnNldE5hbWUoZXhwZWN0ZWROYW1lKTsKLQotCQlhY3R1YWxOYW1lID0gdGFibGVJdGVtLmdldFRleHQoVGFibGVDb2x1bW5BZGFwdGVyLk5BTUVfQ09MVU1OKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGFibGVJdGVtW05BTUVfQ09MVU1OXSB3YXMgbm90IHNldCBjb3JyZWN0bHkiLCBleHBlY3RlZE5hbWUsIGFjdHVhbE5hbWUpOwotCi0JCS8vIE1hbmFnZXIgcHJvcGVydHkKLQkJU3RyaW5nIGFjdHVhbE1hbmFnZXIgPSB0YWJsZUl0ZW0uZ2V0VGV4dChUYWJsZUNvbHVtbkFkYXB0ZXIuTUFOQUdFUl9DT0xVTU4pOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUYWJsZUl0ZW1bTUFOQUdFUl9DT0xVTU5dIHdhcyBub3Qgc2V0IGNvcnJlY3RseSIsIGV4cGVjdGVkTWFuYWdlciwgYWN0dWFsTWFuYWdlcik7Ci0KLQkJZXhwZWN0ZWRNYW5hZ2VyID0gImJvc3MiOwotCQllbXBsb3llZS5zZXRNYW5hZ2VyKGV4cGVjdGVkTWFuYWdlcik7Ci0KLQkJYWN0dWFsTWFuYWdlciA9IHRhYmxlSXRlbS5nZXRUZXh0KFRhYmxlQ29sdW1uQWRhcHRlci5NQU5BR0VSX0NPTFVNTik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRhYmxlSXRlbVtNQU5BR0VSX0NPTFVNTl0gd2FzIG5vdCBzZXQgY29ycmVjdGx5IiwgZXhwZWN0ZWRNYW5hZ2VyLCBhY3R1YWxNYW5hZ2VyKTsKLQotCQkvLyBUaXRsZSBwcm9wZXJ0eQotCQlTdHJpbmcgYWN0dWFsVGl0bGUgPSB0YWJsZUl0ZW0uZ2V0VGV4dChUYWJsZUNvbHVtbkFkYXB0ZXIuVElUTEVfQ09MVU1OKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygiVGFibGVJdGVtW1RJVExFX0NPTFVNTl0gd2FzIG5vdCBzZXQgY29ycmVjdGx5IiwgZXhwZWN0ZWRUaXRsZSwgYWN0dWFsVGl0bGUpOwotCi0JCWV4cGVjdGVkVGl0bGUgPSAiRWNsaXBzZUxpbmsiOwotCQllbXBsb3llZS5zZXRUaXRsZShleHBlY3RlZFRpdGxlKTsKLQotCQlhY3R1YWxUaXRsZSA9IHRhYmxlSXRlbS5nZXRUZXh0KFRhYmxlQ29sdW1uQWRhcHRlci5USVRMRV9DT0xVTU4pOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUYWJsZUl0ZW1bVElUTEVfQ09MVU1OXSB3YXMgbm90IHNldCBjb3JyZWN0bHkiLCBleHBlY3RlZFRpdGxlLCBhY3R1YWxUaXRsZSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0ZWRJdGVtc0FkZGVkUmVtb3ZlZCgpIHsKLQotCQlUYWJsZSB0YWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJKTsKLQotCQlMaXN0VmFsdWVNb2RlbDxFbXBsb3llZT4gbGlzdEhvbGRlciA9IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCk7Ci0JCVNpbXBsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1zSG9sZGVyID0gYnVpbGRFbXBsb3llZUhvbGRlcnMoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCVRhYmxlTW9kZWwgdGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbXNIb2xkZXIsCi0JCQl0YWJsZSwKLQkJCWJ1aWxkQ29sdW1uQWRhcHRlcigpLAotCQkJYnVpbGRMYWJlbFByb3ZpZGVyKCkKLQkJKTsKLQotCQkvLyBDcmVhdGUgRW1wbG95ZWVzCi0JCVN0cmluZyBleHBlY3RlZE5hbWUxICAgID0gIkRhbGlfMSI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIxID0gIldUUF8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUxICAgPSAicGx1Zy1pbl8xIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMiAgICA9ICJEYWxpXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMiA9ICJXVFBfMiI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMiAgID0gInBsdWctaW5fMiI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTMgICAgPSAiRGFsaV8zIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjMgPSAiV1RQXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTMgICA9ICJwbHVnLWluXzMiOwotCi0JCUVtcGxveWVlIGVtcGxveWVlMSA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUxLCBleHBlY3RlZFRpdGxlMSwgZXhwZWN0ZWRNYW5hZ2VyMSk7Ci0JCUVtcGxveWVlIGVtcGxveWVlMiA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUyLCBleHBlY3RlZFRpdGxlMiwgZXhwZWN0ZWRNYW5hZ2VyMik7Ci0JCUVtcGxveWVlIGVtcGxveWVlMyA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUzLCBleHBlY3RlZFRpdGxlMywgZXhwZWN0ZWRNYW5hZ2VyMyk7Ci0KLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTEpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMik7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUzKTsKLQotCQkvLyBUZXN0IGFkZGluZyBzZWxlY3RlZCBpdGVtcwotCQlBcnJheUxpc3Q8RW1wbG95ZWU+IGVtcGxveWVlcyA9IG5ldyBBcnJheUxpc3Q8RW1wbG95ZWU+KDIpOwotCQllbXBsb3llZXMuYWRkKGVtcGxveWVlMSk7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUzKTsKLQkJc2VsZWN0ZWRJdGVtc0hvbGRlci5hZGRBbGwoZW1wbG95ZWVzKTsKLQotCQlDb2xsZWN0aW9uPEVtcGxveWVlPiBhY3R1YWxFbXBsb3llZXMgPSB0YWJsZU1vZGVsLnNlbGVjdGVkSXRlbXMoKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkIGl0ZW1zIGNhbid0IGJlIG51bGwiLCBhY3R1YWxFbXBsb3llZXMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgY291bnQgb2Ygc2VsZWN0ZWQgaXRlbXMgc2hvdWxkIGJlIDIiLCAyLCBhY3R1YWxFbXBsb3llZXMuc2l6ZSgpKTsKLQotCQlhY3R1YWxFbXBsb3llZXMucmVtb3ZlKGVtcGxveWVlMSk7Ci0JCWFjdHVhbEVtcGxveWVlcy5yZW1vdmUoZW1wbG95ZWUzKTsKLQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW1zIHdhcyBub3QgcmV0cmlldmVkIGNvcnJlY3RseSIsIGFjdHVhbEVtcGxveWVlcy5pc0VtcHR5KCkpOwotCi0JCS8vIFRlc3QgcmVtb3Zpbmcgc2VsZWN0ZWQgaXRlbXMKLQkJc2VsZWN0ZWRJdGVtc0hvbGRlci5yZW1vdmUoZW1wbG95ZWUxKTsKLQotCQlhY3R1YWxFbXBsb3llZXMgPSB0YWJsZU1vZGVsLnNlbGVjdGVkSXRlbXMoKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkIGl0ZW1zIGNhbid0IGJlIG51bGwiLCBhY3R1YWxFbXBsb3llZXMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgY291bnQgb2Ygc2VsZWN0ZWQgaXRlbXMgc2hvdWxkIGJlIDEiLCAxLCBhY3R1YWxFbXBsb3llZXMuc2l6ZSgpKTsKLQotCQlhY3R1YWxFbXBsb3llZXMucmVtb3ZlKGVtcGxveWVlMyk7Ci0KLQkJQXNzZXJ0LmFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtcyB3YXMgbm90IHJldHJpZXZlZCBjb3JyZWN0bHkiLCBhY3R1YWxFbXBsb3llZXMuaXNFbXB0eSgpKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RlZEl0ZW1zQ2xlYXJlZCgpIHsKLQotCQlUYWJsZSB0YWJsZSA9IG5ldyBUYWJsZShzaGVsbCwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJKTsKLQotCQlMaXN0VmFsdWVNb2RlbDxFbXBsb3llZT4gbGlzdEhvbGRlciA9IGJ1aWxkRW1wbG95ZWVMaXN0SG9sZGVyKCk7Ci0JCVNpbXBsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1zSG9sZGVyID0gYnVpbGRFbXBsb3llZUhvbGRlcnMoKTsKLQotCQlNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgTWFuYWdlcigpOwotCQlzdWJqZWN0SG9sZGVyLnNldFZhbHVlKG1hbmFnZXIpOwotCi0JCVRhYmxlTW9kZWwgdGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKAotCQkJbGlzdEhvbGRlciwKLQkJCXNlbGVjdGVkSXRlbXNIb2xkZXIsCi0JCQl0YWJsZSwKLQkJCWJ1aWxkQ29sdW1uQWRhcHRlcigpLAotCQkJYnVpbGRMYWJlbFByb3ZpZGVyKCkKLQkJKTsKLQotCQkvLyBDcmVhdGUgRW1wbG95ZWVzCi0JCVN0cmluZyBleHBlY3RlZE5hbWUxICAgID0gIkRhbGlfMSI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIxID0gIldUUF8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUxICAgPSAicGx1Zy1pbl8xIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMiAgICA9ICJEYWxpXzIiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMiA9ICJXVFBfMiI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMiAgID0gInBsdWctaW5fMiI7Ci0KLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTMgICAgPSAiRGFsaV8zIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjMgPSAiV1RQXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTMgICA9ICJwbHVnLWluXzMiOwotCi0JCUVtcGxveWVlIGVtcGxveWVlMSA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUxLCBleHBlY3RlZFRpdGxlMSwgZXhwZWN0ZWRNYW5hZ2VyMSk7Ci0JCUVtcGxveWVlIGVtcGxveWVlMiA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUyLCBleHBlY3RlZFRpdGxlMiwgZXhwZWN0ZWRNYW5hZ2VyMik7Ci0JCUVtcGxveWVlIGVtcGxveWVlMyA9IG5ldyBFbXBsb3llZShleHBlY3RlZE5hbWUzLCBleHBlY3RlZFRpdGxlMywgZXhwZWN0ZWRNYW5hZ2VyMyk7Ci0KLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTEpOwotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMik7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUzKTsKLQotCQkvLyBUZXN0IGFkZGluZyBzZWxlY3RlZCBpdGVtcwotCQlBcnJheUxpc3Q8RW1wbG95ZWU+IGVtcGxveWVlcyA9IG5ldyBBcnJheUxpc3Q8RW1wbG95ZWU+KDIpOwotCQllbXBsb3llZXMuYWRkKGVtcGxveWVlMSk7Ci0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUzKTsKLQkJc2VsZWN0ZWRJdGVtc0hvbGRlci5hZGRBbGwoZW1wbG95ZWVzKTsKLQotCQlDb2xsZWN0aW9uPEVtcGxveWVlPiBhY3R1YWxFbXBsb3llZXMgPSB0YWJsZU1vZGVsLnNlbGVjdGVkSXRlbXMoKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkIGl0ZW1zIGNhbid0IGJlIG51bGwiLCBhY3R1YWxFbXBsb3llZXMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgY291bnQgb2Ygc2VsZWN0ZWQgaXRlbXMgc2hvdWxkIGJlIDIiLCAyLCBhY3R1YWxFbXBsb3llZXMuc2l6ZSgpKTsKLQotCQlhY3R1YWxFbXBsb3llZXMucmVtb3ZlKGVtcGxveWVlMSk7Ci0JCWFjdHVhbEVtcGxveWVlcy5yZW1vdmUoZW1wbG95ZWUzKTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoIlRoZSBzZWxlY3RlZCBpdGVtcyB3YXMgbm90IHJldHJpZXZlZCBjb3JyZWN0bHkiLCBhY3R1YWxFbXBsb3llZXMuaXNFbXB0eSgpKTsKLQotCQkvLyBUZXN0IHJlbW92aW5nIHNlbGVjdGVkIGl0ZW1zCi0JCXNlbGVjdGVkSXRlbXNIb2xkZXIuY2xlYXIoKTsKLQotCQlhY3R1YWxFbXBsb3llZXMgPSB0YWJsZU1vZGVsLnNlbGVjdGVkSXRlbXMoKTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIlRoZSBjb2xsZWN0aW9uIG9mIHNlbGVjdGVkIGl0ZW1zIGNhbid0IGJlIG51bGwiLCBhY3R1YWxFbXBsb3llZXMpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUaGUgY291bnQgb2Ygc2VsZWN0ZWQgaXRlbXMgc2hvdWxkIGJlICIsIDAsIGFjdHVhbEVtcGxveWVlcy5zaXplKCkpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKCkgewotCi0JCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKHNoZWxsLCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkpOwotCi0JCU1hbmFnZXIgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKCk7Ci0JCXN1YmplY3RIb2xkZXIuc2V0VmFsdWUobWFuYWdlcik7Ci0KLQkJVGFibGVNb2RlbCB0YWJsZU1vZGVsID0gbmV3IFRhYmxlTW9kZWwoCi0JCQlidWlsZEVtcGxveWVlTGlzdEhvbGRlcigpLAotCQkJYnVpbGRFbXBsb3llZUhvbGRlcigpLAotCQkJdGFibGUsCi0JCQlidWlsZENvbHVtbkFkYXB0ZXIoKSwKLQkJCWJ1aWxkTGFiZWxQcm92aWRlcigpCi0JCSk7Ci0KLQkJQ29sbGVjdGlvbjxFbXBsb3llZT4gZW1wbG95ZWVzID0gbmV3IEFycmF5TGlzdDxFbXBsb3llZT4oKTsKLQkJdGFibGVNb2RlbC5hZGRTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lcihidWlsZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKGVtcGxveWVlcykpOwotCi0JCS8vIENyZWF0ZSBFbXBsb3llZXMKLQkJU3RyaW5nIGV4cGVjdGVkTmFtZTEgICAgPSAiRGFsaV8xIjsKLQkJU3RyaW5nIGV4cGVjdGVkTWFuYWdlcjEgPSAiV1RQXzEiOwotCQlTdHJpbmcgZXhwZWN0ZWRUaXRsZTEgICA9ICJwbHVnLWluXzEiOwotCi0JCVN0cmluZyBleHBlY3RlZE5hbWUyICAgID0gIkRhbGlfMiI7Ci0JCVN0cmluZyBleHBlY3RlZE1hbmFnZXIyID0gIldUUF8yIjsKLQkJU3RyaW5nIGV4cGVjdGVkVGl0bGUyICAgPSAicGx1Zy1pbl8yIjsKLQotCQlTdHJpbmcgZXhwZWN0ZWROYW1lMyAgICA9ICJEYWxpXzMiOwotCQlTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyMyA9ICJXVFBfMyI7Ci0JCVN0cmluZyBleHBlY3RlZFRpdGxlMyAgID0gInBsdWctaW5fMyI7Ci0KLQkJRW1wbG95ZWUgZW1wbG95ZWUxID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTEsIGV4cGVjdGVkVGl0bGUxLCBleHBlY3RlZE1hbmFnZXIxKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUyID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTIsIGV4cGVjdGVkVGl0bGUyLCBleHBlY3RlZE1hbmFnZXIyKTsKLQkJRW1wbG95ZWUgZW1wbG95ZWUzID0gbmV3IEVtcGxveWVlKGV4cGVjdGVkTmFtZTMsIGV4cGVjdGVkVGl0bGUzLCBleHBlY3RlZE1hbmFnZXIzKTsKLQotCQltYW5hZ2VyLmFkZEVtcGxveWVlKGVtcGxveWVlMSk7Ci0JCW1hbmFnZXIuYWRkRW1wbG95ZWUoZW1wbG95ZWUyKTsKLQkJbWFuYWdlci5hZGRFbXBsb3llZShlbXBsb3llZTMpOwotCi0JCS8vIFRlc3QgYWRkaW5nIHNlbGVjdGVkIGl0ZW1zCi0JCXRhYmxlLnNldFNlbGVjdGlvbihuZXcgaW50W10geyAwLCAyIH0pOwotCi0JCS8vIEl0IHNlZW1zIGEgbWFudWFsIHNlbGVjdGlvbiBkb2Vzbid0IHNlbmQgYW55IHNlbGVjdGlvbiBldmVudAotCQl0YWJsZU1vZGVsLnRhYmxlU2VsZWN0aW9uQ2hhbmdlZChudWxsKTsKLQotCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiVGhlIGNvbGxlY3Rpb24gb2Ygc2VsZWN0ZWQgaXRlbXMgY2FuJ3QgYmUgbnVsbCIsIGVtcGxveWVlcyk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBjb3VudCBvZiBzZWxlY3RlZCBpdGVtcyBzaG91bGQgYmUgMiIsIDIsIGVtcGxveWVlcy5zaXplKCkpOwotCi0JCWVtcGxveWVlcy5yZW1vdmUoZW1wbG95ZWUxKTsKLQkJZW1wbG95ZWVzLnJlbW92ZShlbXBsb3llZTMpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHNlbGVjdGVkIGl0ZW1zIHdhcyBub3QgcmV0cmlldmVkIGNvcnJlY3RseSIsIGVtcGxveWVlcy5pc0VtcHR5KCkpOwotCi0JCS8vIFRlc3QgYWRkaW5nIHNlbGVjdGVkIGl0ZW1zCi0JCWVtcGxveWVlcy5hZGQoZW1wbG95ZWUxKTsKLQkJZW1wbG95ZWVzLmFkZChlbXBsb3llZTMpOwotCQl0YWJsZS5kZXNlbGVjdEFsbCgpOwotCi0JCS8vIEl0IHNlZW1zIGEgbWFudWFsIHNlbGVjdGlvbiBkb2Vzbid0IHNlbmQgYW55IHNlbGVjdGlvbiBldmVudAotCQl0YWJsZU1vZGVsLnRhYmxlU2VsZWN0aW9uQ2hhbmdlZChudWxsKTsKLQotCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiVGhlIGNvbGxlY3Rpb24gb2Ygc2VsZWN0ZWQgaXRlbXMgY2FuJ3QgYmUgbnVsbCIsIGVtcGxveWVlcyk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRoZSBjb3VudCBvZiBzZWxlY3RlZCBpdGVtcyBzaG91bGQgYmUgMCIsIDAsIGVtcGxveWVlcy5zaXplKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0VGFibGVJdGVtUHJvcGVydGllcyhUYWJsZSB0YWJsZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWROYW1lLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNYW5hZ2VyLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRUaXRsZSkKLQl7Ci0JCVRhYmxlSXRlbSB0YWJsZUl0ZW0gPSB0YWJsZS5nZXRJdGVtKGluZGV4KTsKLQkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIk5vIFRhYmxlSXRlbSB3YXMgZm91bmQgZm9yIHRoZSBFbXBsb3llZSIsIHRhYmxlSXRlbSk7Ci0KLQkJU3RyaW5nIGFjdHVhbE5hbWUgPSB0YWJsZUl0ZW0uZ2V0VGV4dChUYWJsZUNvbHVtbkFkYXB0ZXIuTkFNRV9DT0xVTU4pOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKCJUYWJsZUl0ZW1bTkFNRV9DT0xVTU5dIHdhcyBub3Qgc2V0IGNvcnJlY3RseSIsIGV4cGVjdGVkTmFtZSwgYWN0dWFsTmFtZSk7Ci0KLQkJU3RyaW5nIGFjdHVhbFRpdGxlID0gdGFibGVJdGVtLmdldFRleHQoVGFibGVDb2x1bW5BZGFwdGVyLlRJVExFX0NPTFVNTik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRhYmxlSXRlbVtUSVRMRV9DT0xVTU5dIHdhcyBub3Qgc2V0IGNvcnJlY3RseSIsIGV4cGVjdGVkVGl0bGUsIGFjdHVhbFRpdGxlKTsKLQotCQlTdHJpbmcgYWN0dWFsTWFuYWdlciA9IHRhYmxlSXRlbS5nZXRUZXh0KFRhYmxlQ29sdW1uQWRhcHRlci5NQU5BR0VSX0NPTFVNTik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoIlRhYmxlSXRlbVtNQU5BR0VSX0NPTFVNTl0gd2FzIG5vdCBzZXQgY29ycmVjdGx5IiwgZXhwZWN0ZWRNYW5hZ2VyLCBhY3R1YWxNYW5hZ2VyKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIEVtcGxveWVlIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7Ci0KLQkJcHJpdmF0ZSBTdHJpbmcgbWFuYWdlcjsKLQkJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQkJcHJpdmF0ZSBTdHJpbmcgdGl0bGU7Ci0KLQkJc3RhdGljIGZpbmFsIFN0cmluZyBNQU5BR0VSX1BST1BFUlRZID0gIm1hbmFnZXIiOwotCQlzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfUFJPUEVSVFkgPSAibmFtZSI7Ci0JCXN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEVfUFJPUEVSVFkgPSAidGl0bGUiOwotCi0JCUVtcGxveWVlKFN0cmluZyBuYW1lLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBtYW5hZ2VyKSB7Ci0JCQlzdXBlcigpOwotCi0JCQl0aGlzLm5hbWUgICAgPSBuYW1lOwotCQkJdGhpcy50aXRsZSAgID0gdGl0bGU7Ci0JCQl0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyOwotCQl9Ci0KLQkJU3RyaW5nIGdldE1hbmFnZXIoKSB7Ci0JCQlyZXR1cm4gbWFuYWdlcjsKLQkJfQotCi0JCVN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIG5hbWU7Ci0JCX0KLQotCQlTdHJpbmcgZ2V0VGl0bGUoKSB7Ci0JCQlyZXR1cm4gdGl0bGU7Ci0JCX0KLQotCQl2b2lkIHNldE1hbmFnZXIoU3RyaW5nIG1hbmFnZXIpIHsKLQkJCVN0cmluZyBvbGRNYW5hZ2VyID0gdGhpcy5tYW5hZ2VyOwotCQkJdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjsKLQkJCWZpcmVQcm9wZXJ0eUNoYW5nZWQoTUFOQUdFUl9QUk9QRVJUWSwgb2xkTWFuYWdlciwgbWFuYWdlcik7Ci0JCX0KLQotCQl2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCVN0cmluZyBvbGROYW1lID0gdGhpcy5uYW1lOwotCQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJCWZpcmVQcm9wZXJ0eUNoYW5nZWQoTkFNRV9QUk9QRVJUWSwgb2xkTmFtZSwgbmFtZSk7Ci0JCX0KLQotCQl2b2lkIHNldFRpdGxlKFN0cmluZyB0aXRsZSkgewotCQkJU3RyaW5nIG9sZFRpdGxlID0gdGhpcy50aXRsZTsKLQkJCXRoaXMudGl0bGUgPSB0aXRsZTsKLQkJCWZpcmVQcm9wZXJ0eUNoYW5nZWQoVElUTEVfUFJPUEVSVFksIG9sZFRpdGxlLCB0aXRsZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIE1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHsKLQotCQlwcml2YXRlIExpc3Q8RW1wbG95ZWU+IGVtcGxveWVlczsKLQotCQlzdGF0aWMgZmluYWwgU3RyaW5nIEVNUExPWUVFU19MSVNUID0gImVtcGxveWVlcyI7Ci0KLQkJTWFuYWdlcigpIHsKLQkJCXN1cGVyKCk7Ci0JCQllbXBsb3llZXMgPSBuZXcgQXJyYXlMaXN0PEVtcGxveWVlPigpOwotCQl9Ci0KLQkJRW1wbG95ZWUgYWRkRW1wbG95ZWUoRW1wbG95ZWUgZW1wbG95ZWUpIHsKLQkJCWFkZEl0ZW1Ub0xpc3QoZW1wbG95ZWUsIGVtcGxveWVlcywgRU1QTE9ZRUVTX0xJU1QpOwotCQkJcmV0dXJuIGVtcGxveWVlOwotCQl9Ci0KLQkJRW1wbG95ZWUgYWRkRW1wbG95ZWUoU3RyaW5nIG5hbWUsIFN0cmluZyB0aXRsZSwgU3RyaW5nIG1hbmFnZXIpIHsKLQkJCUVtcGxveWVlIGVtcGxveWVlID0gbmV3IEVtcGxveWVlKG5hbWUsIHRpdGxlLCBtYW5hZ2VyKTsKLQkJCXJldHVybiBhZGRFbXBsb3llZShlbXBsb3llZSk7Ci0JCX0KLQotCQl2b2lkIGNoYW5nZUVtcGxveWVlcyhMaXN0PEVtcGxveWVlPiBlbXBsb3llZXMpIHsKLQkJCXRoaXMuZW1wbG95ZWVzLmNsZWFyKCk7Ci0JCQl0aGlzLmVtcGxveWVlcy5hZGRBbGwoZW1wbG95ZWVzKTsKLQkJCWZpcmVMaXN0Q2hhbmdlZChFTVBMT1lFRVNfTElTVCwgZW1wbG95ZWVzKTsKLQkJfQotCi0JCUxpc3RJdGVyYXRvcjxFbXBsb3llZT4gZW1wbG95ZWVzKCkgewotCQkJcmV0dXJuIG5ldyBDbG9uZUxpc3RJdGVyYXRvcjxFbXBsb3llZT4oZW1wbG95ZWVzKTsKLQkJfQotCi0JCWludCBlbXBsb3llZXNTaXplKCkgewotCQkJcmV0dXJuIGVtcGxveWVlcy5zaXplKCk7Ci0JCX0KLQotCQl2b2lkIG1vdmVFbXBsb3llZURvd24oRW1wbG95ZWUgZW1wbG95ZWUpIHsKLQkJCWludCBpbmRleCA9IGVtcGxveWVlcy5pbmRleE9mKGVtcGxveWVlKTsKLQkJCW1vdmVJdGVtSW5MaXN0KGluZGV4ICsgMSwgaW5kZXgsIGVtcGxveWVlcywgRU1QTE9ZRUVTX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCBtb3ZlRW1wbG95ZWVzKENvbGxlY3Rpb248RW1wbG95ZWU+IGVtcGxveWVlcywgaW50IHRhcmdldEluZGV4KSB7Ci0KLQkJCWludCBzb3VyY2VJbmRleCA9IEludGVnZXIuTUFYX1ZBTFVFOwotCi0JCQlmb3IgKEVtcGxveWVlIGVtcGxveWVlIDogZW1wbG95ZWVzKSB7Ci0JCQkJc291cmNlSW5kZXggPSBNYXRoLm1pbihzb3VyY2VJbmRleCwgdGhpcy5lbXBsb3llZXMuaW5kZXhPZihlbXBsb3llZSkpOwotCQkJfQotCi0JCQltb3ZlSXRlbXNJbkxpc3QoCi0JCQkJdGFyZ2V0SW5kZXgsCi0JCQkJc291cmNlSW5kZXgsCi0JCQkJZW1wbG95ZWVzLnNpemUoKSwKLQkJCQl0aGlzLmVtcGxveWVlcywKLQkJCQlFTVBMT1lFRVNfTElTVAotCQkJKTsKLQkJfQotCi0JCXZvaWQgbW92ZUVtcGxveWVlVXAoRW1wbG95ZWUgZW1wbG95ZWUpIHsKLQkJCWludCBpbmRleCA9IGVtcGxveWVlcy5pbmRleE9mKGVtcGxveWVlKTsKLQkJCW1vdmVJdGVtSW5MaXN0KGluZGV4IC0gMSwgaW5kZXgsIGVtcGxveWVlcywgRU1QTE9ZRUVTX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCByZW1vdmVBbGxFbXBsb3llZXMoKSB7Ci0JCQljbGVhckxpc3QoZW1wbG95ZWVzLCBFTVBMT1lFRVNfTElTVCk7Ci0JCX0KLQotCQl2b2lkIHJlbW92ZUVtcGxveWVlKEVtcGxveWVlIGVtcGxveWVlKSB7Ci0JCQlyZW1vdmVJdGVtRnJvbUxpc3QoZW1wbG95ZWUsIGVtcGxveWVlcywgRU1QTE9ZRUVTX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCByZW1vdmVFbXBsb3llZXMoQ29sbGVjdGlvbjxFbXBsb3llZT4gZW1wbG95ZWVzKSB7Ci0JCQlyZW1vdmVJdGVtc0Zyb21MaXN0KGVtcGxveWVlcy5pdGVyYXRvcigpLCB0aGlzLmVtcGxveWVlcywgRU1QTE9ZRUVTX0xJU1QpOwotCQl9Ci0KLQkJdm9pZCByZXBsYWNlKEVtcGxveWVlIG9sZEVtcGxveWVlLCBFbXBsb3llZSBuZXdFbXBsb3llZSkgewotCQkJcmVwbGFjZUl0ZW1Jbkxpc3Qob2xkRW1wbG95ZWUsIG5ld0VtcGxveWVlLCBlbXBsb3llZXMsIEVNUExPWUVFU19MSVNUKTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgVGFibGVDb2x1bW5BZGFwdGVyIGltcGxlbWVudHMgQ29sdW1uQWRhcHRlcjxFbXBsb3llZT4gewotCi0JCXN0YXRpYyBmaW5hbCBpbnQgQ09MVU1OX0NPVU5UID0gMzsKLQkJc3RhdGljIGZpbmFsIGludCBNQU5BR0VSX0NPTFVNTiA9IDI7Ci0JCXN0YXRpYyBmaW5hbCBpbnQgTkFNRV9DT0xVTU4gPSAwOwotCQlzdGF0aWMgZmluYWwgaW50IFRJVExFX0NPTFVNTiA9IDE7Ci0KLQkJcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkTWFuYWdlckhvbGRlcihFbXBsb3llZSBzdWJqZWN0KSB7Ci0JCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxFbXBsb3llZSwgU3RyaW5nPihFbXBsb3llZS5NQU5BR0VSX1BST1BFUlRZLCBzdWJqZWN0KSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHJvdGVjdGVkIFN0cmluZyBidWlsZFZhbHVlXygpIHsKLQkJCQkJcmV0dXJuIHN1YmplY3QuZ2V0TWFuYWdlcigpOwotCQkJCX0KLQotCQkJCUBPdmVycmlkZQotCQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhTdHJpbmcgdmFsdWUpIHsKLQkJCQkJc3ViamVjdC5zZXRNYW5hZ2VyKHZhbHVlKTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0KLQkJcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkTmFtZUhvbGRlcihFbXBsb3llZSBzdWJqZWN0KSB7Ci0JCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxFbXBsb3llZSwgU3RyaW5nPihFbXBsb3llZS5OQU1FX1BST1BFUlRZLCBzdWJqZWN0KSB7Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHJvdGVjdGVkIFN0cmluZyBidWlsZFZhbHVlXygpIHsKLQkJCQkJcmV0dXJuIHN1YmplY3QuZ2V0TmFtZSgpOwotCQkJCX0KLQotCQkJCUBPdmVycmlkZQotCQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhTdHJpbmcgdmFsdWUpIHsKLQkJCQkJc3ViamVjdC5zZXROYW1lKHZhbHVlKTsKLQkJCQl9Ci0JCQl9OwotCQl9Ci0KLQkJcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkVGl0bGVIb2xkZXIoRW1wbG95ZWUgc3ViamVjdCkgewotCQkJcmV0dXJuIG5ldyBQcm9wZXJ0eUFzcGVjdEFkYXB0ZXI8RW1wbG95ZWUsIFN0cmluZz4oRW1wbG95ZWUuVElUTEVfUFJPUEVSVFksIHN1YmplY3QpIHsKLQkJCQlAT3ZlcnJpZGUKLQkJCQlwcm90ZWN0ZWQgU3RyaW5nIGJ1aWxkVmFsdWVfKCkgewotCQkJCQlyZXR1cm4gc3ViamVjdC5nZXRUaXRsZSgpOwotCQkJCX0KLQotCQkJCUBPdmVycmlkZQotCQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhTdHJpbmcgdmFsdWUpIHsKLQkJCQkJc3ViamVjdC5zZXRUaXRsZSh2YWx1ZSk7Ci0JCQkJfQotCQkJfTsKLQkJfQotCi0JCXB1YmxpYyBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDw/PltdIGNlbGxNb2RlbHMoRW1wbG95ZWUgc3ViamVjdCkgewotCQkJV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Pz5bXSBob2xkZXJzID0gbmV3IFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPD8+WzNdOwotCQkJaG9sZGVyc1tOQU1FX0NPTFVNTl0gPSBidWlsZE5hbWVIb2xkZXIoc3ViamVjdCk7Ci0JCQlob2xkZXJzW1RJVExFX0NPTFVNTl0gPSBidWlsZFRpdGxlSG9sZGVyKHN1YmplY3QpOwotCQkJaG9sZGVyc1tNQU5BR0VSX0NPTFVNTl0gPSBidWlsZE1hbmFnZXJIb2xkZXIoc3ViamVjdCk7Ci0JCQlyZXR1cm4gaG9sZGVyczsKLQkJfQotCi0JCXB1YmxpYyBpbnQgY29sdW1uQ291bnQoKSB7Ci0JCQlyZXR1cm4gQ09MVU1OX0NPVU5UOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBjb2x1bW5OYW1lKGludCBjb2x1bW5JbmRleCkgewotCQkJcmV0dXJuIFN0cmluZy52YWx1ZU9mKGNvbHVtbkluZGV4KTsKLQkJfQotCX0KLQotCXByaXZhdGUgY2xhc3MgVGFibGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMgTGFiZWxQcm92aWRlcgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHMgSVRhYmxlTGFiZWxQcm92aWRlciB7Ci0KLQotCQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJRW1wbG95ZWUgZW1wbG95ZWUgPSAoRW1wbG95ZWUpIGVsZW1lbnQ7Ci0KLQkJCWlmIChjb2x1bW5JbmRleCA9PSBUYWJsZUNvbHVtbkFkYXB0ZXIuTkFNRV9DT0xVTU4pIHsKLQkJCQlyZXR1cm4gZW1wbG95ZWUuZ2V0TmFtZSgpOwotCQkJfQotCi0JCQlpZiAoY29sdW1uSW5kZXggPT0gVGFibGVDb2x1bW5BZGFwdGVyLlRJVExFX0NPTFVNTikgewotCQkJCXJldHVybiBlbXBsb3llZS5nZXRUaXRsZSgpOwotCQkJfQotCi0JCQlyZXR1cm4gZW1wbG95ZWUuZ2V0TWFuYWdlcigpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBUYWJsZU1vZGVsIGV4dGVuZHMgVGFibGVNb2RlbEFkYXB0ZXI8RW1wbG95ZWU+IHsKLQotCQlUYWJsZU1vZGVsKExpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyLAotCQkgICAgICAgICAgIENvbGxlY3Rpb25WYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1zSG9sZGVyLAotCQkgICAgICAgICAgIFRhYmxlIHRhYmxlLAotCQkgICAgICAgICAgIENvbHVtbkFkYXB0ZXI8RW1wbG95ZWU+IGNvbHVtbkFkYXB0ZXIsCi0JCSAgICAgICAgICAgSVRhYmxlTGFiZWxQcm92aWRlciBsYWJlbFByb3ZpZGVyKSB7Ci0KLQkJCXN1cGVyKGxpc3RIb2xkZXIsCi0JCQkgICAgICBzZWxlY3RlZEl0ZW1zSG9sZGVyLAotCQkJICAgICAgdGFibGUsCi0JCQkgICAgICBjb2x1bW5BZGFwdGVyLAotCQkJICAgICAgbGFiZWxQcm92aWRlcik7Ci0JCX0KLQotCQlUYWJsZU1vZGVsKExpc3RWYWx1ZU1vZGVsPEVtcGxveWVlPiBsaXN0SG9sZGVyLAotCQkgICAgICAgICAgIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1Ib2xkZXIsCi0JCSAgICAgICAgICAgVGFibGUgdGFibGUsCi0JCSAgICAgICAgICAgQ29sdW1uQWRhcHRlcjxFbXBsb3llZT4gY29sdW1uQWRhcHRlciwKLQkJICAgICAgICAgICBJVGFibGVMYWJlbFByb3ZpZGVyIGxhYmVsUHJvdmlkZXIpIHsKLQotCQkJc3VwZXIobGlzdEhvbGRlciwKLQkJCQkJbmV3IFByb3BlcnR5Q29sbGVjdGlvblZhbHVlTW9kZWxBZGFwdGVyPEVtcGxveWVlPihzZWxlY3RlZEl0ZW1Ib2xkZXIpLAotCQkJICAgICAgdGFibGUsCi0JCQkgICAgICBjb2x1bW5BZGFwdGVyLAotCQkJICAgICAgbGFiZWxQcm92aWRlcik7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIGludCBpbmRleE9mKEVtcGxveWVlIGl0ZW0pIHsKLQkJCXJldHVybiBzdXBlci5pbmRleE9mKGl0ZW0pOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCBDb2xsZWN0aW9uPEVtcGxveWVlPiBzZWxlY3RlZEl0ZW1zKCkgewotCQkJcmV0dXJuIHN1cGVyLnNlbGVjdGVkSXRlbXMoKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCB0YWJsZVNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKLQkJCXN1cGVyLnRhYmxlU2VsZWN0aW9uQ2hhbmdlZChldmVudCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1RleHRGaWVsZE1vZGVsQWRhcHRlclVJVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3N3dC9UZXh0RmllbGRNb2RlbEFkYXB0ZXJVSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4MTI4MC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1RleHRGaWVsZE1vZGVsQWRhcHRlclVJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnN3dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkFwcGxpY2F0aW9uV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnN3dC5UZXh0RmllbGRNb2RlbEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlByb3BlcnR5QXNwZWN0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIFBsYXkgYXJvdW5kIHdpdGggYSBzZXQgb2YgZW50cnkgZmllbGRzLgotICovCi1wdWJsaWMgY2xhc3MgVGV4dEZpZWxkTW9kZWxBZGFwdGVyVUlUZXN0Ci0JZXh0ZW5kcyBBcHBsaWNhdGlvbldpbmRvdwotewotCXByaXZhdGUgZmluYWwgVGVzdE1vZGVsIHRlc3RNb2RlbDsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTkFNRSA9ICJTY29vYnkgRG9vIjsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFRlc3RNb2RlbD4gdGVzdE1vZGVsSG9sZGVyOwotCXByaXZhdGUgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8U3RyaW5nPiBuYW1lSG9sZGVyOwotCXByaXZhdGUgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8U3RyaW5nPiBhbGxDYXBzTmFtZUhvbGRlcjsKLQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVdpbmRvdyB3aW5kb3cgPSBuZXcgVGV4dEZpZWxkTW9kZWxBZGFwdGVyVUlUZXN0KGFyZ3MpOwotCQl3aW5kb3cuc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0JCXdpbmRvdy5vcGVuKCk7Ci0JCURpc3BsYXkuZ2V0Q3VycmVudCgpLmRpc3Bvc2UoKTsKLQkJU3lzdGVtLmV4aXQoMCk7Ci0JfQotCi0JcHJpdmF0ZSBUZXh0RmllbGRNb2RlbEFkYXB0ZXJVSVRlc3QoU3RyaW5nW10gYXJncykgewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy50ZXN0TW9kZWwgPSBuZXcgVGVzdE1vZGVsKERFRkFVTFRfTkFNRSk7Ci0JCXRoaXMudGVzdE1vZGVsSG9sZGVyID0gbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxUZXN0TW9kZWw+KHRoaXMudGVzdE1vZGVsKTsKLQkJdGhpcy5uYW1lSG9sZGVyID0gdGhpcy5idWlsZE5hbWVIb2xkZXIodGhpcy50ZXN0TW9kZWxIb2xkZXIpOwotCQl0aGlzLmFsbENhcHNOYW1lSG9sZGVyID0gdGhpcy5idWlsZEFsbENhcHNOYW1lSG9sZGVyKHRoaXMudGVzdE1vZGVsSG9sZGVyKTsKLQl9Ci0KLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4gYnVpbGROYW1lSG9sZGVyKFByb3BlcnR5VmFsdWVNb2RlbDxUZXN0TW9kZWw+IHZtKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPFRlc3RNb2RlbCwgU3RyaW5nPih2bSwgVGVzdE1vZGVsLk5BTUVfUFJPUEVSVFkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIFN0cmluZyBidWlsZFZhbHVlXygpIHsKLQkJCQlyZXR1cm4gdGhpcy5zdWJqZWN0Lm5hbWUoKTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgc2V0VmFsdWVfKFN0cmluZyB2YWx1ZSkgewotCQkJCXRoaXMuc3ViamVjdC5zZXROYW1lKHZhbHVlKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4gYnVpbGRBbGxDYXBzTmFtZUhvbGRlcihQcm9wZXJ0eVZhbHVlTW9kZWw8VGVzdE1vZGVsPiB2bSkgewotCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxUZXN0TW9kZWwsIFN0cmluZz4odm0sIFRlc3RNb2RlbC5OQU1FX1BST1BFUlRZKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBTdHJpbmcgYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIHRoaXMuc3ViamVjdC5uYW1lKCkudG9VcHBlckNhc2UoKTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgc2V0VmFsdWVfKFN0cmluZyB2YWx1ZSkgewotCQkJCS8vIGRvIG5vdGhpbmcKLQkJCX0KLQkJfTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCSgoU2hlbGwpIHBhcmVudCkuc2V0VGV4dChDbGFzc1Rvb2xzLnNob3J0Q2xhc3NOYW1lRm9yT2JqZWN0KHRoaXMpKTsKLQkJcGFyZW50LnNldFNpemUoNDAwLCAxMDApOwotCQlDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJbWFpblBhbmVsLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKLQkJQ29udHJvbCB0ZXh0RmllbGRQYW5lbCA9IHRoaXMuYnVpbGRUZXh0RmllbGRQYW5lbChtYWluUGFuZWwpOwotCQl0aGlzLmJ1aWxkQ29udHJvbFBhbmVsKG1haW5QYW5lbCwgdGV4dEZpZWxkUGFuZWwpOwotCQlyZXR1cm4gbWFpblBhbmVsOwotCX0KLQotCXByaXZhdGUgQ29udHJvbCBidWlsZFRleHRGaWVsZFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLTM1KTsKLQkJCWZkLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEZpbGxMYXlvdXQoKSk7Ci0JCXRoaXMuYnVpbGROYW1lVGV4dEZpZWxkKHBhbmVsKTsKLQkJdGhpcy5idWlsZFJlYWRPbmx5TmFtZVRleHRGaWVsZChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRBbGxDYXBzTmFtZVRleHRGaWVsZChwYW5lbCk7Ci0KLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE5hbWVUZXh0RmllbGQoQ29tcG9zaXRlIHBhcmVudCkgewotCQlUZXh0IHRleHRGaWVsZCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSk7Ci0JCVRleHRGaWVsZE1vZGVsQWRhcHRlci5hZGFwdCh0aGlzLm5hbWVIb2xkZXIsIHRleHRGaWVsZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUmVhZE9ubHlOYW1lVGV4dEZpZWxkKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJVGV4dCB0ZXh0RmllbGQgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5TSU5HTEUpOwotCQl0ZXh0RmllbGQuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCVRleHRGaWVsZE1vZGVsQWRhcHRlci5hZGFwdCh0aGlzLm5hbWVIb2xkZXIsIHRleHRGaWVsZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQWxsQ2Fwc05hbWVUZXh0RmllbGQoQ29tcG9zaXRlIHBhcmVudCkgewotCQlUZXh0IHRleHRGaWVsZCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULlNJTkdMRSk7Ci0JCXRleHRGaWVsZC5zZXRFbmFibGVkKGZhbHNlKTsKLQkJVGV4dEZpZWxkTW9kZWxBZGFwdGVyLmFkYXB0KHRoaXMuYWxsQ2Fwc05hbWVIb2xkZXIsIHRleHRGaWVsZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQ29udHJvbFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIENvbnRyb2wgY2hlY2tCb3hQYW5lbCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNoZWNrQm94UGFuZWwpOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkUmVzZXROYW1lQnV0dG9uKHBhbmVsKTsKLQkJdGhpcy5idWlsZENsZWFyTW9kZWxCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkUmVzdG9yZU1vZGVsQnV0dG9uKHBhbmVsKTsKLQkJdGhpcy5idWlsZFByaW50TW9kZWxCdXR0b24ocGFuZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFJlc2V0TmFtZUJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRSZXNldE5hbWVBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkUmVzZXROYW1lQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigicmVzZXQgbmFtZSIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCVRleHRGaWVsZE1vZGVsQWRhcHRlclVJVGVzdC50aGlzLnJlc2V0TmFtZSgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoInJlc2V0IG5hbWUiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCByZXNldE5hbWUoKSB7Ci0JCXRoaXMudGVzdE1vZGVsLnNldE5hbWUoREVGQVVMVF9OQU1FKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDbGVhck1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZENsZWFyTW9kZWxBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkQ2xlYXJNb2RlbEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJVGV4dEZpZWxkTW9kZWxBZGFwdGVyVUlUZXN0LnRoaXMuY2xlYXJNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNsZWFyIG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgY2xlYXJNb2RlbCgpIHsKLQkJdGhpcy50ZXN0TW9kZWxIb2xkZXIuc2V0VmFsdWUobnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUmVzdG9yZU1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZFJlc3RvcmVNb2RlbEFDSSgpLmZpbGwocGFyZW50KTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZXN0b3JlTW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJyZXN0b3JlIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJVGV4dEZpZWxkTW9kZWxBZGFwdGVyVUlUZXN0LnRoaXMucmVzdG9yZU1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicmVzdG9yZSBtb2RlbCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQl2b2lkIHJlc3RvcmVNb2RlbCgpIHsKLQkJdGhpcy50ZXN0TW9kZWxIb2xkZXIuc2V0VmFsdWUodGhpcy50ZXN0TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFByaW50TW9kZWxCdXR0b24oQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkUHJpbnRNb2RlbEFDSSgpLmZpbGwocGFyZW50KTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRQcmludE1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigicHJpbnQgbW9kZWwiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlUZXh0RmllbGRNb2RlbEFkYXB0ZXJVSVRlc3QudGhpcy5wcmludE1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicHJpbnQgbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBwcmludE1vZGVsKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5hbWU6ICIgKyB0aGlzLnRlc3RNb2RlbC5uYW1lKCkpOwotCX0KLQotCi0JLy8gKioqKioqKioqKiBtb2RlbCBjbGFzcyAqKioqKioqKioqCi0KLQljbGFzcyBUZXN0TW9kZWwgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIHsKLQkJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfUFJPUEVSVFkgPSAibmFtZSI7Ci0KLQkJcHVibGljIFRlc3RNb2RlbChTdHJpbmcgbmFtZSkgewotCQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJfQotCQlwdWJsaWMgU3RyaW5nIG5hbWUoKSB7Ci0JCQlyZXR1cm4gdGhpcy5uYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCU9iamVjdCBvbGQgPSB0aGlzLm5hbWU7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKE5BTUVfUFJPUEVSVFksIG9sZCwgbmFtZSk7Ci0JCX0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlyZXR1cm4gIlRlc3RNb2RlbCgiICsgdGhpcy5uYW1lICsgIikiOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvc3d0L1RyaVN0YXRlQ2hlY2tCb3hNb2RlbEFkYXB0ZXJVSVRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGI4ODQwLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC9zd3QvVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnN3dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkFwcGxpY2F0aW9uV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnN3dC5UcmlTdGF0ZUNoZWNrQm94TW9kZWxBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC53aWRnZXRzLkRlZmF1bHRXaWRnZXRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC53aWRnZXRzLlRyaVN0YXRlQ2hlY2tCb3g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlByb3BlcnR5QXNwZWN0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkubW9kZWwudmFsdWUuUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLS8qKgotICogUGxheSBhcm91bmQgd2l0aCBhIHNldCBvZiB0cmktc3RhdGUgY2hlY2sgYm94ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmlTdGF0ZUNoZWNrQm94TW9kZWxBZGFwdGVyVUlUZXN0Ci0JZXh0ZW5kcyBBcHBsaWNhdGlvbldpbmRvdwotewotCXByaXZhdGUgZmluYWwgVGVzdE1vZGVsIHRlc3RNb2RlbDsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFRlc3RNb2RlbD4gdGVzdE1vZGVsSG9sZGVyOwotCXByaXZhdGUgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gZmxhZzFIb2xkZXI7Ci0JcHJpdmF0ZSBmaW5hbCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBmbGFnMkhvbGRlcjsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+IG5vdEZsYWcySG9sZGVyOwotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVdpbmRvdyB3aW5kb3cgPSBuZXcgVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdChhcmdzKTsKLQkJd2luZG93LnNldEJsb2NrT25PcGVuKHRydWUpOwotCQl3aW5kb3cub3BlbigpOwotCQlEaXNwbGF5LmdldEN1cnJlbnQoKS5kaXNwb3NlKCk7Ci0JCVN5c3RlbS5leGl0KDApOwotCX0KLQotCXByaXZhdGUgVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0JCXN1cGVyKG51bGwpOwotCQl0aGlzLnRlc3RNb2RlbCA9IG5ldyBUZXN0TW9kZWwoQm9vbGVhbi5UUlVFLCBCb29sZWFuLkZBTFNFKTsKLQkJdGhpcy50ZXN0TW9kZWxIb2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPFRlc3RNb2RlbD4odGhpcy50ZXN0TW9kZWwpOwotCQl0aGlzLmZsYWcxSG9sZGVyID0gdGhpcy5idWlsZEZsYWcxSG9sZGVyKHRoaXMudGVzdE1vZGVsSG9sZGVyKTsKLQkJdGhpcy5mbGFnMkhvbGRlciA9IHRoaXMuYnVpbGRGbGFnMkhvbGRlcih0aGlzLnRlc3RNb2RlbEhvbGRlcik7Ci0JCXRoaXMubm90RmxhZzJIb2xkZXIgPSB0aGlzLmJ1aWxkTm90RmxhZzJIb2xkZXIodGhpcy50ZXN0TW9kZWxIb2xkZXIpOwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gYnVpbGRGbGFnMUhvbGRlcihQcm9wZXJ0eVZhbHVlTW9kZWw8VGVzdE1vZGVsPiBzdWJqZWN0SG9sZGVyKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPFRlc3RNb2RlbCwgQm9vbGVhbj4oc3ViamVjdEhvbGRlciwgVGVzdE1vZGVsLkZMQUcxX1BST1BFUlRZKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBCb29sZWFuIGJ1aWxkVmFsdWVfKCkgewotCQkJCXJldHVybiB0aGlzLnN1YmplY3QuaXNGbGFnMSgpOwotCQkJfQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBzZXRWYWx1ZV8oQm9vbGVhbiB2YWx1ZSkgewotCQkJCXRoaXMuc3ViamVjdC5zZXRGbGFnMSh2YWx1ZSk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBidWlsZEZsYWcySG9sZGVyKFByb3BlcnR5VmFsdWVNb2RlbDxUZXN0TW9kZWw+IHN1YmplY3RIb2xkZXIpIHsKLQkJcmV0dXJuIG5ldyBQcm9wZXJ0eUFzcGVjdEFkYXB0ZXI8VGVzdE1vZGVsLCBCb29sZWFuPihzdWJqZWN0SG9sZGVyLCBUZXN0TW9kZWwuRkxBRzJfUFJPUEVSVFkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIEJvb2xlYW4gYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIHRoaXMuc3ViamVjdC5pc0ZsYWcyKCk7Ci0JCQl9Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhCb29sZWFuIHZhbHVlKSB7Ci0JCQkJdGhpcy5zdWJqZWN0LnNldEZsYWcyKHZhbHVlKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+IGJ1aWxkTm90RmxhZzJIb2xkZXIoUHJvcGVydHlWYWx1ZU1vZGVsPFRlc3RNb2RlbD4gc3ViamVjdEhvbGRlcikgewotCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxUZXN0TW9kZWwsIEJvb2xlYW4+KHN1YmplY3RIb2xkZXIsIFRlc3RNb2RlbC5OT1RfRkxBRzJfUFJPUEVSVFkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIEJvb2xlYW4gYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIHRoaXMuc3ViamVjdC5pc05vdEZsYWcyKCk7Ci0JCQl9Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhCb29sZWFuIHZhbHVlKSB7Ci0JCQkJdGhpcy5zdWJqZWN0LnNldE5vdEZsYWcyKHZhbHVlKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCSgoU2hlbGwpIHBhcmVudCkuc2V0VGV4dChDbGFzc1Rvb2xzLnNob3J0Q2xhc3NOYW1lRm9yT2JqZWN0KHRoaXMpKTsKLQkJcGFyZW50LnNldFNpemUoNDAwLCAxMDApOwotCQlDb21wb3NpdGUgbWFpblBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJbWFpblBhbmVsLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKLQkJQ29udHJvbCBjaGVja0JveFBhbmVsID0gdGhpcy5idWlsZENoZWNrQm94UGFuZWwobWFpblBhbmVsKTsKLQkJdGhpcy5idWlsZENvbnRyb2xQYW5lbChtYWluUGFuZWwsIGNoZWNrQm94UGFuZWwpOwotCQlyZXR1cm4gbWFpblBhbmVsOwotCX0KLQotCXByaXZhdGUgQ29udHJvbCBidWlsZENoZWNrQm94UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCi0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtMzUpOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQkJdGhpcy5idWlsZEZsYWcxQ2hlY2tCb3gocGFuZWwpOwotCQl0aGlzLmJ1aWxkRmxhZzJDaGVja0JveChwYW5lbCk7Ci0JCXRoaXMuYnVpbGROb3RGbGFnMkNoZWNrQm94KHBhbmVsKTsKLQkJdGhpcy5idWlsZFVuYXR0YWNoZWRDaGVja0JveChwYW5lbCk7Ci0KLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZEZsYWcxQ2hlY2tCb3goQ29tcG9zaXRlIHBhcmVudCkgewotCQlUcmlTdGF0ZUNoZWNrQm94IGNoZWNrQm94ID0gbmV3IFRyaVN0YXRlQ2hlY2tCb3gocGFyZW50LCAiZmxhZyAxIiwgRGVmYXVsdFdpZGdldEZhY3RvcnkuaW5zdGFuY2UoKSk7Ci0JCVRyaVN0YXRlQ2hlY2tCb3hNb2RlbEFkYXB0ZXIuYWRhcHQodGhpcy5mbGFnMUhvbGRlciwgY2hlY2tCb3gpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZEZsYWcyQ2hlY2tCb3goQ29tcG9zaXRlIHBhcmVudCkgewotCQlUcmlTdGF0ZUNoZWNrQm94IGNoZWNrQm94ID0gbmV3IFRyaVN0YXRlQ2hlY2tCb3gocGFyZW50LCAiZmxhZyAyIiwgRGVmYXVsdFdpZGdldEZhY3RvcnkuaW5zdGFuY2UoKSk7Ci0JCVRyaVN0YXRlQ2hlY2tCb3hNb2RlbEFkYXB0ZXIuYWRhcHQodGhpcy5mbGFnMkhvbGRlciwgY2hlY2tCb3gpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE5vdEZsYWcyQ2hlY2tCb3goQ29tcG9zaXRlIHBhcmVudCkgewotCQlUcmlTdGF0ZUNoZWNrQm94IGNoZWNrQm94ID0gbmV3IFRyaVN0YXRlQ2hlY2tCb3gocGFyZW50LCAibmV4dCBmbGFnIDIiLCBEZWZhdWx0V2lkZ2V0RmFjdG9yeS5pbnN0YW5jZSgpKTsKLQkJVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlci5hZGFwdCh0aGlzLm5vdEZsYWcySG9sZGVyLCBjaGVja0JveCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkVW5hdHRhY2hlZENoZWNrQm94KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJVHJpU3RhdGVDaGVja0JveCBjaGVja0JveCA9IG5ldyBUcmlTdGF0ZUNoZWNrQm94KHBhcmVudCwgInVuYXR0YWNoZWQiLCBEZWZhdWx0V2lkZ2V0RmFjdG9yeS5pbnN0YW5jZSgpKTsKLQkJY2hlY2tCb3guYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcy5idWlsZFVuYXR0YWNoZWRTZWxlY3Rpb25MaXN0ZW5lcigpKTsKLQl9Ci0KLQlwcml2YXRlIFNlbGVjdGlvbkxpc3RlbmVyIGJ1aWxkVW5hdHRhY2hlZFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlyZXR1cm4gbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInVuYXR0YWNoZWQgZGVmYXVsdCBzZWxlY3RlZDogIiArIGUpOwotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigidW5hdHRhY2hlZCBzZWxlY3RlZDogIiArIGUpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENvbnRyb2xQYW5lbChDb21wb3NpdGUgcGFyZW50LCBDb250cm9sIGNoZWNrQm94UGFuZWwpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjaGVja0JveFBhbmVsKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQkJdGhpcy5idWlsZEZsaXBGbGFnMUJ1dHRvbihwYW5lbCk7Ci0JCXRoaXMuYnVpbGRDbGVhck1vZGVsQnV0dG9uKHBhbmVsKTsKLQkJdGhpcy5idWlsZFJlc3RvcmVNb2RlbEJ1dHRvbihwYW5lbCk7Ci0JCXRoaXMuYnVpbGRQcmludE1vZGVsQnV0dG9uKHBhbmVsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRGbGlwRmxhZzFCdXR0b24oQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkRmxpcEZsYWcxQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZEZsaXBGbGFnMUFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oIm5leHQgZmxhZyAxIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdC50aGlzLm5leHRGbGFnMSgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoIm5leHQgZmxhZyAxIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgbmV4dEZsYWcxKCkgewotCQl0aGlzLnRlc3RNb2RlbC5uZXh0RmxhZzEoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDbGVhck1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZENsZWFyTW9kZWxBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkQ2xlYXJNb2RlbEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJVHJpU3RhdGVDaGVja0JveE1vZGVsQWRhcHRlclVJVGVzdC50aGlzLmNsZWFyTW9kZWwoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJjbGVhciBtb2RlbCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQl2b2lkIGNsZWFyTW9kZWwoKSB7Ci0JCXRoaXMudGVzdE1vZGVsSG9sZGVyLnNldFZhbHVlKG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFJlc3RvcmVNb2RlbEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRSZXN0b3JlTW9kZWxBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkUmVzdG9yZU1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigicmVzdG9yZSBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCVRyaVN0YXRlQ2hlY2tCb3hNb2RlbEFkYXB0ZXJVSVRlc3QudGhpcy5yZXN0b3JlTW9kZWwoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJyZXN0b3JlIG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgcmVzdG9yZU1vZGVsKCkgewotCQl0aGlzLnRlc3RNb2RlbEhvbGRlci5zZXRWYWx1ZSh0aGlzLnRlc3RNb2RlbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUHJpbnRNb2RlbEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRQcmludE1vZGVsQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZFByaW50TW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJwcmludCBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCVRyaVN0YXRlQ2hlY2tCb3hNb2RlbEFkYXB0ZXJVSVRlc3QudGhpcy5wcmludE1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicHJpbnQgbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBwcmludE1vZGVsKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZsYWcgMTogIiArIHRoaXMudGVzdE1vZGVsLmlzRmxhZzEoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmxhZyAyOiAiICsgdGhpcy50ZXN0TW9kZWwuaXNGbGFnMigpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJub3QgZmxhZyAyOiAiICsgdGhpcy50ZXN0TW9kZWwuaXNOb3RGbGFnMigpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioiKTsKLQl9Ci0KLQotCXByaXZhdGUgY2xhc3MgVGVzdE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7Ci0JCXByaXZhdGUgQm9vbGVhbiBmbGFnMTsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUcxX1BST1BFUlRZID0gImZsYWcxIjsKLQkJcHJpdmF0ZSBCb29sZWFuIGZsYWcyOwotCQkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxBRzJfUFJPUEVSVFkgPSAiZmxhZzIiOwotCQlwcml2YXRlIEJvb2xlYW4gbm90RmxhZzI7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOT1RfRkxBRzJfUFJPUEVSVFkgPSAibm90RmxhZzIiOwotCQotCQlwdWJsaWMgVGVzdE1vZGVsKEJvb2xlYW4gZmxhZzEsIEJvb2xlYW4gZmxhZzIpIHsKLQkJCXRoaXMuZmxhZzEgPSBmbGFnMTsKLQkJCXRoaXMuZmxhZzIgPSBmbGFnMjsKLQkJCXRoaXMubm90RmxhZzIgPSB0aGlzLm5leHQoZmxhZzIpOwotCQl9Ci0JCXByaXZhdGUgQm9vbGVhbiBuZXh0KEJvb2xlYW4gYikgewotCQkJcmV0dXJuIChiID09IG51bGwpID8gQm9vbGVhbi5UUlVFIDogYi5ib29sZWFuVmFsdWUoKSA/IEJvb2xlYW4uRkFMU0UgOiBudWxsOwotCQl9Ci0JCXB1YmxpYyBCb29sZWFuIGlzRmxhZzEoKSB7Ci0JCQlyZXR1cm4gdGhpcy5mbGFnMTsKLQkJfQotCQlwdWJsaWMgdm9pZCBzZXRGbGFnMShCb29sZWFuIGZsYWcxKSB7Ci0JCQlCb29sZWFuIG9sZCA9IHRoaXMuZmxhZzE7Ci0JCQl0aGlzLmZsYWcxID0gZmxhZzE7Ci0JCQl0aGlzLmZpcmVQcm9wZXJ0eUNoYW5nZWQoRkxBRzFfUFJPUEVSVFksIG9sZCwgZmxhZzEpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIG5leHRGbGFnMSgpIHsKLQkJCXRoaXMuc2V0RmxhZzEodGhpcy5uZXh0KHRoaXMuZmxhZzEpKTsKLQkJfQotCQlwdWJsaWMgQm9vbGVhbiBpc0ZsYWcyKCkgewotCQkJcmV0dXJuIHRoaXMuZmxhZzI7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0RmxhZzIoQm9vbGVhbiBmbGFnMikgewotCQkJQm9vbGVhbiBvbGQgPSB0aGlzLmZsYWcyOwotCQkJdGhpcy5mbGFnMiA9IGZsYWcyOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKEZMQUcyX1BST1BFUlRZLCBvbGQsIGZsYWcyKTsKLQotCQkJb2xkID0gdGhpcy5ub3RGbGFnMjsKLQkJCXRoaXMubm90RmxhZzIgPSB0aGlzLm5leHQoZmxhZzIpOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKE5PVF9GTEFHMl9QUk9QRVJUWSwgb2xkLCB0aGlzLm5vdEZsYWcyKTsKLQkJfQotCQlwdWJsaWMgdm9pZCBuZXh0RmxhZzIoKSB7Ci0JCQl0aGlzLnNldEZsYWcyKHRoaXMubmV4dCh0aGlzLmZsYWcyKSk7Ci0JCX0KLQkJcHVibGljIEJvb2xlYW4gaXNOb3RGbGFnMigpIHsKLQkJCXJldHVybiB0aGlzLm5vdEZsYWcyOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldE5vdEZsYWcyKEJvb2xlYW4gbm90RmxhZzIpIHsKLQkJCXRoaXMuc2V0RmxhZzIodGhpcy5uZXh0KGZsYWcyKSk7Ci0JCX0KLQkJcHVibGljIHZvaWQgbmV4dE5vdEZsYWcyKCkgewotCQkJdGhpcy5zZXROb3RGbGFnMih0aGlzLm5leHQodGhpcy5ub3RGbGFnMikpOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkJcmV0dXJuICJUZXN0TW9kZWwoIiArIHRoaXMuaXNGbGFnMSgpICsgIiAtICIgKyB0aGlzLmlzRmxhZzIoKSArICIpIjsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvQ29udHJvbEFsaWduZXJUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sQWxpZ25lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNjZDQ0ZS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sQWxpZ25lclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuVGl0bGVBcmVhRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLkNvbnRyb2xBbGlnbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLlNXVFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGZpbmFsIGNsYXNzIENvbnRyb2xBbGlnbmVyVGVzdCB7Ci0KLQlwcml2YXRlIENvbnRyb2xBbGlnbmVyIGNvbnRyb2xBbGlnbmVyOwotCXByaXZhdGUgQ29tcG9zaXRlIHBhcmVudDsKLQlwcml2YXRlIFNoZWxsIHNoZWxsOwotCi0JcHJpdmF0ZSBMYXlvdXQgYnVpbGRTcGFjZXJMYXlvdXQoKSB7Ci0JCXJldHVybiBuZXcgTGF5b3V0KCkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgUG9pbnQgY29tcHV0ZVNpemUoQ29tcG9zaXRlIGNvbXBvc2l0ZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGhIaW50LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHRIaW50LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZmx1c2hDYWNoZSkgewotCi0JCQkJcmV0dXJuIG5ldyBQb2ludCh3aWR0aEhpbnQsIGhlaWdodEhpbnQpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIGxheW91dChDb21wb3NpdGUgY29tcG9zaXRlLCBib29sZWFuIGZsdXNoQ2FjaGUpIHsKLQkJCQlHcmlkRGF0YSBkYXRhID0gKEdyaWREYXRhKSBjb21wb3NpdGUuZ2V0TGF5b3V0RGF0YSgpOwotCQkJCWNvbXBvc2l0ZS5zZXRCb3VuZHMoMCwgMCwgZGF0YS53aWR0aEhpbnQsIGRhdGEuaGVpZ2h0SGludCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCi0JCWNvbnRyb2xBbGlnbmVyID0gbmV3IENvbnRyb2xBbGlnbmVyKCk7Ci0KLQkJc2hlbGwgID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJc2hlbGwuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKSk7Ci0KLQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCQlwYXJlbnQuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKSk7Ci0JCXBhcmVudC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORykpOwotCX0KLQotCUBBZnRlcgotCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCi0JCWlmIChjb250cm9sQWxpZ25lciAhPSBudWxsKSB7Ci0JCQljb250cm9sQWxpZ25lci5kaXNwb3NlKCk7Ci0JCQljb250cm9sQWxpZ25lciA9IG51bGw7Ci0JCX0KLQotCQlpZiAoc2hlbGwgIT0gbnVsbCkgewotCQkJc2hlbGwuZGlzcG9zZSgpOwotCQkJc2hlbGwgPSBudWxsOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQ29udHJvbDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlDb21wb3NpdGUgcGFuZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCXBhbmUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKSk7Ci0JCXBhbmUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFuZSwgU1dULk5VTEwpOwotCQl1cGRhdGVHcmlkRGF0YShsYWJlbCk7Ci0KLQkJY29udHJvbEFsaWduZXIuYWRkKGxhYmVsKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIG1heGltdW0gd2lkdGggc2hvdWxkIGJlIDAsIiwKLQkJCTAsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCWxhYmVsLnNldFRleHQoIlRoaXMgaXMgYSBDb250cm9sQWxpZ25lciIpOwotLy8JCXBhcmVudC5sYXlvdXQodHJ1ZSwgdHJ1ZSk7Ci0KLQkJUG9pbnQgc2l6ZSA9IGxhYmVsLmdldFNpemUoKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgc2l6ZS54ICsgIiwiLAotCQkJc2l6ZS54LAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RBZGRDb250cm9sMigpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUNvbXBvc2l0ZSBwYW5lID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLQkJcGFuZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJcGFuZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihwYW5lLCBTV1QuTlVMTCk7Ci0JCWJ1dHRvbi5zZXRUZXh0KCJUaGlzIGlzIGEgQ29udHJvbEFsaWduZXIiKTsKLQkJdXBkYXRlR3JpZERhdGEoYnV0dG9uKTsKLQotCQljb250cm9sQWxpZ25lci5hZGQoYnV0dG9uKTsKLQkJcGFyZW50LmxheW91dCh0cnVlLCB0cnVlKTsKLQotCQlQb2ludCBzaXplID0gYnV0dG9uLmdldFNpemUoKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgc2l6ZS54ICsgIiwiLAotCQkJc2l6ZS54LAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RBZGRDb250cm9sMygpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUNvbXBvc2l0ZSBwYW5lID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLQkJcGFuZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJcGFuZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lLCBTV1QuTlVMTCk7Ci0JCWxhYmVsLnNldFRleHQoIlRoaXMgaXMgdmVyeSBsb25nIHRleHQiKTsKLQkJdXBkYXRlR3JpZERhdGEobGFiZWwpOwotCi0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhbmUsIFNXVC5OVUxMKTsKLQkJYnV0dG9uLnNldFRleHQoIlNob3J0IHRleHQiKTsKLQkJdXBkYXRlR3JpZERhdGEoYnV0dG9uKTsKLQotLy8JCXBhcmVudC5sYXlvdXQodHJ1ZSwgdHJ1ZSk7Ci0KLQkJY29udHJvbEFsaWduZXIuYWRkKGxhYmVsKTsKLQkJY29udHJvbEFsaWduZXIuYWRkKGJ1dHRvbik7Ci0KLQkJUG9pbnQgbGFiZWxTaXplICA9IGxhYmVsLmdldFNpemUoKTsKLQkJUG9pbnQgYnV0dG9uU2l6ZSA9IGJ1dHRvbi5nZXRTaXplKCk7Ci0JCWludCBtYXggPSBNYXRoLm1heChsYWJlbFNpemUueCwgYnV0dG9uU2l6ZS54KTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgbWF4ICsgIiwiLAotCQkJbWF4LAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RBZGRDb250cm9sQWxpZ25lcjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlMYWJlbCBsYWJlbDEgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCUxhYmVsIGxhYmVsMiA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDEpOwotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDIpOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbDEpOwotCi0JCUNvbnRyb2xBbGlnbmVyIGNvbnRyb2xBbGlnbmVyMiA9IG5ldyBDb250cm9sQWxpZ25lcigpOwotCQljb250cm9sQWxpZ25lci5hZGQoY29udHJvbEFsaWduZXIyKTsKLQkJY29udHJvbEFsaWduZXIyLmFkZChsYWJlbDIpOwotCi0JCWxhYmVsMS5zZXRUZXh0KCJUaGlzIGlzIGEgQ29udHJvbEFsaWduZXIiKTsKLQkJbGFiZWwyLnNldFRleHQoIlRoaXMgaXMgYSB2ZXJ5IGxvbmcgQ29udHJvbEFsaWduZXIiKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUsIHRydWUpOwotCi0JCVBvaW50IHNpemUxID0gbGFiZWwxLmdldFNpemUoKTsKLQkJUG9pbnQgc2l6ZTIgPSBsYWJlbDIuZ2V0U2l6ZSgpOwotCQlpbnQgd2lkdGggPSBNYXRoLm1heChzaXplMS54LCBzaXplMi54KTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgd2lkdGggKyAiLCIsCi0JCQl3aWR0aCwKLQkJCWNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIHdpZHRoICsgIiwiLAotCQkJd2lkdGgsCi0JCQljb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RBZGRDb250cm9sQWxpZ25lcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlMYWJlbCBsYWJlbDEgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCUxhYmVsIGxhYmVsMiA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDEpOwotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDIpOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbDEpOwotCi0JCUNvbnRyb2xBbGlnbmVyIGNvbnRyb2xBbGlnbmVyMiA9IG5ldyBDb250cm9sQWxpZ25lcigpOwotCQljb250cm9sQWxpZ25lcjIuYWRkKGxhYmVsMik7Ci0KLQkJbGFiZWwxLnNldFRleHQoIlRoaXMgaXMgYSBDb250cm9sQWxpZ25lciIpOwotCQlsYWJlbDIuc2V0VGV4dCgiVGhpcyBpcyBhIHZlcnkgbG9uZyBDb250cm9sQWxpZ25lciIpOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChjb250cm9sQWxpZ25lcjIpOwotLy8JCXBhcmVudC5sYXlvdXQodHJ1ZSwgdHJ1ZSk7Ci0KLQkJUG9pbnQgc2l6ZTEgPSBsYWJlbDEuZ2V0U2l6ZSgpOwotCQlQb2ludCBzaXplMiA9IGxhYmVsMi5nZXRTaXplKCk7Ci0JCWludCB3aWR0aCA9IE1hdGgubWF4KHNpemUxLngsIHNpemUyLngpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyB3aWR0aCArICIsIiwKLQkJCXdpZHRoLAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgd2lkdGggKyAiLCIsCi0JCQl3aWR0aCwKLQkJCWNvbnRyb2xBbGlnbmVyMi5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCX0KLQotCUBUZXN0KGV4cGVjdGVkPUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKLQlwdWJsaWMgdm9pZCB0ZXN0QWRkQ29udHJvbEFsaWduZXJUb0l0c2VsZigpIHRocm93cyBFeGNlcHRpb24gewotCQljb250cm9sQWxpZ25lci5hZGQoY29udHJvbEFsaWduZXIpOwotCQlmYWlsKCJBIENvbnRyb2xBbGlnbmVyIGNhbid0IGJlIGFkZGVkIHRvIGl0c2VsZiIpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdERpYWxvZ19BZGRDb250cm9sMSgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCWZpbmFsIGludFtdIG1heGltdW1XaWR0aCA9IG5ldyBpbnRbMV07Ci0JCWZpbmFsIGludFtdIHNpemUgPSBuZXcgaW50WzFdOwotCi0JCVRpdGxlQXJlYURpYWxvZyBkaWFsb2cgPSBuZXcgVGl0bGVBcmVhRGlhbG9nKFNXVFV0aWwuZ2V0U2hlbGwoKSkgewotCi0JCQlwcml2YXRlIExhYmVsIGxhYmVsOwotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCi0JCQkJQ29tcG9zaXRlIHBhbmUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCQkJCXBhbmUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKSk7Ci0JCQkJcGFuZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQkJCWxhYmVsID0gbmV3IExhYmVsKHBhbmUsIFNXVC5MRUZUKTsKLQkJCQlsYWJlbC5zZXRUZXh0KCJUaGlzIGlzIGEgQ29udHJvbEFsaWduZXIiKTsKLQkJCQl1cGRhdGVHcmlkRGF0YShsYWJlbCk7Ci0KLQkJCQljb250cm9sQWxpZ25lci5hZGQobGFiZWwpOwotCi0JCQkJcmV0dXJuIHBhcmVudDsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplQm91bmRzKCkgewotCQkJCXN1cGVyLmluaXRpYWxpemVCb3VuZHMoKTsKLQkJCQlzaXplWzBdID0gbGFiZWwuZ2V0U2l6ZSgpLng7Ci0JCQkJbWF4aW11bVdpZHRoWzBdID0gY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCk7Ci0JCQl9Ci0JCX07Ci0KLQkJZGlhbG9nLmNyZWF0ZSgpOwotCQlkaWFsb2cuY2xvc2UoKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgc2l6ZVswXSArICIsIiwKLQkJCXNpemVbMF0sCi0JCQltYXhpbXVtV2lkdGhbMF0KLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3REaWFsb2dfQWRkQ29udHJvbDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlmaW5hbCBpbnRbXSBtYXhpbXVtV2lkdGggPSBuZXcgaW50WzFdOwotCQlmaW5hbCBpbnRbXSBzaXplcyA9IG5ldyBpbnRbMl07Ci0KLQkJVGl0bGVBcmVhRGlhbG9nIGRpYWxvZyA9IG5ldyBUaXRsZUFyZWFEaWFsb2coU1dUVXRpbC5nZXRTaGVsbCgpKSB7Ci0KLQkJCXByaXZhdGUgQnV0dG9uIGJ1dHRvbjsKLQkJCXByaXZhdGUgTGFiZWwgbGFiZWw7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0KLQkJCQlDb21wb3NpdGUgcGFuZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCQkJcGFuZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJCQlwYW5lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0JCQkJbGFiZWwgPSBuZXcgTGFiZWwocGFuZSwgU1dULk5VTEwpOwotCQkJCWxhYmVsLnNldFRleHQoIlRoaXMgaXMgYSBDb250cm9sQWxpZ25lciIpOwotCQkJCXVwZGF0ZUdyaWREYXRhKGxhYmVsKTsKLQotCQkJCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbCk7Ci0KLQkJCQlidXR0b24gPSBuZXcgQnV0dG9uKHBhbmUsIFNXVC5OVUxMKTsKLQkJCQlidXR0b24uc2V0VGV4dCgiU2hvcnQgdGV4dCIpOwotCQkJCXVwZGF0ZUdyaWREYXRhKGJ1dHRvbik7Ci0KLQkJCQljb250cm9sQWxpZ25lci5hZGQoYnV0dG9uKTsKLQotCQkJCXJldHVybiBwYXJlbnQ7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUJvdW5kcygpIHsKLQkJCQlzdXBlci5pbml0aWFsaXplQm91bmRzKCk7Ci0JCQkJc2l6ZXNbMF0gPSBsYWJlbC5nZXRTaXplKCkueDsKLQkJCQlzaXplc1sxXSA9IGJ1dHRvbi5nZXRTaXplKCkueDsKLQkJCQltYXhpbXVtV2lkdGhbMF0gPSBjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKTsKLQkJCX0KLQkJfTsKLQotCQlkaWFsb2cuY3JlYXRlKCk7Ci0JCWRpYWxvZy5jbG9zZSgpOwotCi0JCWludCBsYWJlbFNpemUgID0gc2l6ZXNbMF07Ci0JCWludCBidXR0b25TaXplID0gc2l6ZXNbMV07Ci0JCWludCBtYXggPSBNYXRoLm1heChsYWJlbFNpemUsIGJ1dHRvblNpemUpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyBtYXggKyAiLCIsCi0JCQltYXgsCi0JCQltYXhpbXVtV2lkdGhbMF0KLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3REaXNwb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJQ29tcG9zaXRlIHBhbmUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCQlwYW5lLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCBmYWxzZSkpOwotCQlwYW5lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhbmUsIFNXVC5OVUxMKTsKLQkJbGFiZWwuc2V0VGV4dCgiVGhpcyBpcyB2ZXJ5IGxvbmcgdGV4dCIpOwotCQl1cGRhdGVHcmlkRGF0YShsYWJlbCk7Ci0KLQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFuZSwgU1dULk5VTEwpOwotCQlidXR0b24uc2V0VGV4dCgiU2hvcnQgdGV4dCIpOwotCQl1cGRhdGVHcmlkRGF0YShidXR0b24pOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbCk7Ci0JCWNvbnRyb2xBbGlnbmVyLmFkZChidXR0b24pOwotCi0JCVBvaW50IGxhYmVsU2l6ZSAgPSBsYWJlbC5nZXRTaXplKCk7Ci0JCVBvaW50IGJ1dHRvblNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCQlpbnQgbWF4ID0gTWF0aC5tYXgobGFiZWxTaXplLngsIGJ1dHRvblNpemUueCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIG1heCArICIsIiwKLQkJCW1heCwKLQkJCWNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJbGFiZWwuZGlzcG9zZSgpOwotCi0JCVBvaW50IG5ld0J1dHRvblNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCi0JCWFzc2VydE5vdFNhbWUoCi0JCQkiVGhlIG9sZCBtYXggYW5kIG5ldyBtYXggc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSIsCi0JCQltYXgsCi0JCQluZXdCdXR0b25TaXplLngKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIENvbnRyb2xBbGlnbmVyIGRvZXNuJ3QgaGF2ZSB0aGUgcmlnaHQgbWF4aW11bSB3aWR0aCIsCi0JCQluZXdCdXR0b25TaXplLngsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdEhpZXJhcmNoeU9mQ29udHJvbEFsaWduZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gQWxpZ25lcjEKLQkJLy8gIF4KLQkJLy8gIHwtQWxpZ25lcjIKLQkJLy8gICAgIF4KLQkJLy8gICAgIHwtQWxpZ25lcjMKLQkJQ29udHJvbEFsaWduZXIgY29udHJvbEFsaWduZXIyID0gbmV3IENvbnRyb2xBbGlnbmVyKCk7Ci0JCWNvbnRyb2xBbGlnbmVyLmFkZChjb250cm9sQWxpZ25lcjIpOwotCi0JCUNvbnRyb2xBbGlnbmVyIGNvbnRyb2xBbGlnbmVyMyA9IG5ldyBDb250cm9sQWxpZ25lcigpOwotCQljb250cm9sQWxpZ25lcjIuYWRkKGNvbnRyb2xBbGlnbmVyMyk7Ci0KLQkJLy8gVGVzdCAxCi0JCUxhYmVsIGxhYmVsMSA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQkJbGFiZWwxLnNldFRleHQoIlRoaXMgaXMgYSBsYWJlbCB3aWRnZXQiKTsKLQkJcGFyZW50LmxheW91dCh0cnVlLCB0cnVlKTsKLQotCQlpbnQgbGFiZWxXaWR0aDEgPSBsYWJlbDEuZ2V0U2l6ZSgpLng7Ci0JCWNvbnRyb2xBbGlnbmVyMy5hZGQobGFiZWwxKTsKLQotCQlhc3NlcnRFcXVhbHMoY29udHJvbEFsaWduZXIzLmdldE1heGltdW1XaWR0aCgpLCBsYWJlbFdpZHRoMSk7Ci0JCWFzc2VydEVxdWFscyhjb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCksIGxhYmVsV2lkdGgxKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpLCBsYWJlbFdpZHRoMSk7Ci0KLQkJLy8gVGVzdCAyCi0JCUxhYmVsIGxhYmVsMiA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQkJbGFiZWwyLnNldFRleHQoIlNob3J0TGFiZWwiKTsKLQkJY29udHJvbEFsaWduZXIyLmFkZChsYWJlbDIpOwotCQlwYXJlbnQubGF5b3V0KHRydWUpOwotCi0JCWludCBuZXdMYWJlbFdpZHRoMSA9IGxhYmVsMS5nZXRTaXplKCkueDsKLQkJaW50IG5ld0xhYmVsV2lkdGgyID0gbGFiZWwyLmdldFNpemUoKS54OwotCi0JCWFzc2VydEVxdWFscyhjb250cm9sQWxpZ25lcjMuZ2V0TWF4aW11bVdpZHRoKCksIGNvbnRyb2xBbGlnbmVyMi5nZXRNYXhpbXVtV2lkdGgoKSk7Ci0JCWFzc2VydEVxdWFscyhjb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCksIGNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKG5ld0xhYmVsV2lkdGgxLCBuZXdMYWJlbFdpZHRoMik7Ci0JCWFzc2VydEVxdWFscyhuZXdMYWJlbFdpZHRoMSwgY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCi0JCS8vIFRlc3QgMwotCQlMYWJlbCBsYWJlbDMgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCWxhYmVsMy5zZXRUZXh0KCJBIHZlcnkgbG9uZyBsYWJlbCB0aGF0IHRha2VzIGEgbG90IG9mIGhvcml6b250YWwgc3BhY2UiKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUpOwotCQljb250cm9sQWxpZ25lci5hZGQobGFiZWwzKTsKLQotCQluZXdMYWJlbFdpZHRoMSA9IGxhYmVsMS5nZXRTaXplKCkueDsKLQkJbmV3TGFiZWxXaWR0aDIgPSBsYWJlbDIuZ2V0U2l6ZSgpLng7Ci0JCWludCBuZXdMYWJlbFdpZHRoMyA9IGxhYmVsMy5nZXRTaXplKCkueDsKLQotCQlhc3NlcnRFcXVhbHMoY29udHJvbEFsaWduZXIzLmdldE1heGltdW1XaWR0aCgpLCBjb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCQlhc3NlcnRFcXVhbHMoY29udHJvbEFsaWduZXIyLmdldE1heGltdW1XaWR0aCgpLCBjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKSk7Ci0JCWFzc2VydEVxdWFscyhuZXdMYWJlbFdpZHRoMSwgbmV3TGFiZWxXaWR0aDIpOwotCQlhc3NlcnRFcXVhbHMobmV3TGFiZWxXaWR0aDIsIG5ld0xhYmVsV2lkdGgzKTsKLQkJYXNzZXJ0RXF1YWxzKG5ld0xhYmVsV2lkdGgxLCBjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKSk7Ci0KLQkJLy8gTWFrZSBzdXJlIGFsbCB0aGUgbG9ja2VkIGFyZSByZW1vdmVkCi0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIsICJsb2NrZWQiKSwgQm9vbGVhbi5GQUxTRSk7Ci0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIyLCAibG9ja2VkIiksIEJvb2xlYW4uRkFMU0UpOwotCQlhc3NlcnRFcXVhbHMoQ2xhc3NUb29scy5hdHRlbXB0VG9HZXRGaWVsZFZhbHVlKGNvbnRyb2xBbGlnbmVyMywgImxvY2tlZCIpLCBCb29sZWFuLkZBTFNFKTsKLQotCQkvLyBDaGFuZ2UgdGhlIHRleHQgb2YgbGFiZWwyCi0JCWxhYmVsMi5zZXRUZXh0KCJtbSIpOwotLy8JCXBhcmVudC5sYXlvdXQodHJ1ZSk7Ci0KLQkJbmV3TGFiZWxXaWR0aDEgPSBsYWJlbDEuZ2V0U2l6ZSgpLng7Ci0JCW5ld0xhYmVsV2lkdGgyID0gbGFiZWwyLmdldFNpemUoKS54OwotCQluZXdMYWJlbFdpZHRoMyA9IGxhYmVsMy5nZXRTaXplKCkueDsKLQotCQlhc3NlcnRFcXVhbHMoY29udHJvbEFsaWduZXIzLmdldE1heGltdW1XaWR0aCgpLCBjb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCQlhc3NlcnRFcXVhbHMoY29udHJvbEFsaWduZXIyLmdldE1heGltdW1XaWR0aCgpLCBjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKSk7Ci0JCWFzc2VydEVxdWFscyhuZXdMYWJlbFdpZHRoMSwgbmV3TGFiZWxXaWR0aDIpOwotCQlhc3NlcnRFcXVhbHMobmV3TGFiZWxXaWR0aDIsIG5ld0xhYmVsV2lkdGgzKTsKLQkJYXNzZXJ0RXF1YWxzKG5ld0xhYmVsV2lkdGgxLCBjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKENsYXNzVG9vbHMuYXR0ZW1wdFRvR2V0RmllbGRWYWx1ZShjb250cm9sQWxpZ25lciwgImxvY2tlZCIpLCBCb29sZWFuLkZBTFNFKTsKLQkJYXNzZXJ0RXF1YWxzKENsYXNzVG9vbHMuYXR0ZW1wdFRvR2V0RmllbGRWYWx1ZShjb250cm9sQWxpZ25lcjIsICJsb2NrZWQiKSwgQm9vbGVhbi5GQUxTRSk7Ci0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIzLCAibG9ja2VkIiksIEJvb2xlYW4uRkFMU0UpOwotCi0JCS8vIENoYW5nZSB0aGUgdGV4dCBvZiBsYWJlbDEKLQkJbGFiZWwxLnNldFRleHQoImEiKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUpOwotCi0JCUNvbXBvc2l0ZSBwYXJlbnQxID0gbmV3IENvbXBvc2l0ZShTV1RVdGlsLmdldFNoZWxsKCksIFNXVC5OVUxMKTsKLQkJcGFyZW50MS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0KLQkJTGFiZWwgdGVtcExhYmVsID0gbmV3IExhYmVsKHBhcmVudDEsIFNXVC5OVUxMKTsKLQkJdGVtcExhYmVsLnNldFRleHQoImEiKTsKLS8vCQlwYXJlbnQxLmxheW91dCh0cnVlKTsKLQotCQlpbnQgcmVhbFdpZHRoID0gdGVtcExhYmVsLmdldFNpemUoKS54OwotCi0JCW5ld0xhYmVsV2lkdGgxID0gbGFiZWwxLmdldFNpemUoKS54OwotCQluZXdMYWJlbFdpZHRoMiA9IGxhYmVsMi5nZXRTaXplKCkueDsKLQkJbmV3TGFiZWxXaWR0aDMgPSBsYWJlbDMuZ2V0U2l6ZSgpLng7Ci0KLQkJYXNzZXJ0RXF1YWxzKGNvbnRyb2xBbGlnbmVyMy5nZXRNYXhpbXVtV2lkdGgoKSwgY29udHJvbEFsaWduZXIyLmdldE1heGltdW1XaWR0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbnRyb2xBbGlnbmVyMi5nZXRNYXhpbXVtV2lkdGgoKSwgY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCQlhc3NlcnRFcXVhbHMobmV3TGFiZWxXaWR0aDEsIG5ld0xhYmVsV2lkdGgyKTsKLQkJYXNzZXJ0RXF1YWxzKG5ld0xhYmVsV2lkdGgyLCBuZXdMYWJlbFdpZHRoMyk7Ci0JCWFzc2VydEVxdWFscyhuZXdMYWJlbFdpZHRoMSwgY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCQlhc3NlcnRGYWxzZShuZXdMYWJlbFdpZHRoMSA9PSByZWFsV2lkdGgpOwotCi0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIsICJsb2NrZWQiKSwgQm9vbGVhbi5GQUxTRSk7Ci0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIyLCAibG9ja2VkIiksIEJvb2xlYW4uRkFMU0UpOwotCQlhc3NlcnRFcXVhbHMoQ2xhc3NUb29scy5hdHRlbXB0VG9HZXRGaWVsZFZhbHVlKGNvbnRyb2xBbGlnbmVyMywgImxvY2tlZCIpLCBCb29sZWFuLkZBTFNFKTsKLQotCQkvLyBDaGFuZ2UgdGhlIHRleHQgb2YgbGFiZWwxCi0JCWxhYmVsMS5zZXRUZXh0KCJZZXMgYW5vdGhlciBiaWcgbG9uZyBsb25nIHRleHQgc28gdGhhdCBhbGwgdGhlIGxhYmVscyB3aWxsIGhhdmUgdG8gdGFrZSB0aGUgc2l6ZSBvZiB0aGlzIGxhYmVsIHRvIG1ha2Ugc3VyZSBDb250cm9sQWxpZ25lciB3b3JrcyBjb3JyZWN0bHkiKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUpOwotCi0JCS8vIFdlaXJkOiBJdCBzZWVtcyBubyBub3RpZmljYXRpb24gaXMgc2VudCwgZmlyZSBvbmUgbWFudWFsbHkKLQkJRXZlbnQgZXZlbnQgID0gbmV3IEV2ZW50KCk7Ci0JCWV2ZW50LndpZGdldCA9IGxhYmVsMTsKLQkJZXZlbnQudHlwZSAgID0gU1dULlJlc2l6ZTsKLQkJbGFiZWwxLm5vdGlmeUxpc3RlbmVycyhTV1QuUmVzaXplLCBldmVudCk7Ci0KLQkJQ29tcG9zaXRlIHBhcmVudDIgPSBuZXcgQ29tcG9zaXRlKFNXVFV0aWwuZ2V0U2hlbGwoKSwgU1dULk5VTEwpOwotCQlwYXJlbnQyLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQotCQl0ZW1wTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50MiwgU1dULk5VTEwpOwotCQl0ZW1wTGFiZWwuc2V0VGV4dChsYWJlbDEuZ2V0VGV4dCgpKTsKLQkJcGFyZW50Mi5sYXlvdXQodHJ1ZSk7Ci0KLQkJcmVhbFdpZHRoID0gdGVtcExhYmVsLmdldFNpemUoKS54OwotCi0JCW5ld0xhYmVsV2lkdGgxID0gbGFiZWwxLmdldFNpemUoKS54OwotCQluZXdMYWJlbFdpZHRoMiA9IGxhYmVsMi5nZXRTaXplKCkueDsKLQkJbmV3TGFiZWxXaWR0aDMgPSBsYWJlbDMuZ2V0U2l6ZSgpLng7Ci0KLQkJYXNzZXJ0RXF1YWxzKGNvbnRyb2xBbGlnbmVyMy5nZXRNYXhpbXVtV2lkdGgoKSwgY29udHJvbEFsaWduZXIyLmdldE1heGltdW1XaWR0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbnRyb2xBbGlnbmVyMi5nZXRNYXhpbXVtV2lkdGgoKSwgY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkpOwotCQlhc3NlcnRFcXVhbHMobmV3TGFiZWxXaWR0aDEsIG5ld0xhYmVsV2lkdGgyKTsKLQkJYXNzZXJ0RXF1YWxzKG5ld0xhYmVsV2lkdGgyLCBuZXdMYWJlbFdpZHRoMyk7Ci0JCWFzc2VydEVxdWFscyhjb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKSwgbmV3TGFiZWxXaWR0aDEpOwotCQlhc3NlcnRFcXVhbHMocmVhbFdpZHRoLCBuZXdMYWJlbFdpZHRoMSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKENsYXNzVG9vbHMuYXR0ZW1wdFRvR2V0RmllbGRWYWx1ZShjb250cm9sQWxpZ25lciwgImxvY2tlZCIpLCBCb29sZWFuLkZBTFNFKTsKLQkJYXNzZXJ0RXF1YWxzKENsYXNzVG9vbHMuYXR0ZW1wdFRvR2V0RmllbGRWYWx1ZShjb250cm9sQWxpZ25lcjIsICJsb2NrZWQiKSwgQm9vbGVhbi5GQUxTRSk7Ci0JCWFzc2VydEVxdWFscyhDbGFzc1Rvb2xzLmF0dGVtcHRUb0dldEZpZWxkVmFsdWUoY29udHJvbEFsaWduZXIzLCAibG9ja2VkIiksIEJvb2xlYW4uRkFMU0UpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUNvbnRyb2wxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJQ29tcG9zaXRlIHBhbmUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5VTEwpOwotCQlwYW5lLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCBmYWxzZSkpOwotCQlwYW5lLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOwotCi0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhbmUsIFNXVC5OVUxMKTsKLQkJYnV0dG9uLnNldFRleHQoIlRoaXMgaXMgYSBDb250cm9sQWxpZ25lciIpOwotCQl1cGRhdGVHcmlkRGF0YShidXR0b24pOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChidXR0b24pOwotCQlwYXJlbnQubGF5b3V0KHRydWUsIHRydWUpOwotCi0JCVBvaW50IHNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyBzaXplLnggKyAiLCIsCi0JCQlzaXplLngsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCWNvbnRyb2xBbGlnbmVyLnJlbW92ZShidXR0b24pOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlIDAsICIsCi0JCQkwLAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVDb250cm9sMigpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUNvbXBvc2l0ZSBwYW5lID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLQkJcGFuZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJcGFuZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lLCBTV1QuTlVMTCk7Ci0JCWxhYmVsLnNldFRleHQoIlRoaXMgaXMgdmVyeSBsb25nIHRleHQiKTsKLQkJdXBkYXRlR3JpZERhdGEobGFiZWwpOwotCi0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhbmUsIFNXVC5OVUxMKTsKLQkJYnV0dG9uLnNldFRleHQoIlNob3J0IHRleHQiKTsKLQkJdXBkYXRlR3JpZERhdGEoYnV0dG9uKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUsIHRydWUpOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbCk7Ci0JCWNvbnRyb2xBbGlnbmVyLmFkZChidXR0b24pOwotCi0JCVBvaW50IGxhYmVsU2l6ZSAgPSBsYWJlbC5nZXRTaXplKCk7Ci0JCVBvaW50IGJ1dHRvblNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCQlpbnQgbWF4ID0gTWF0aC5tYXgobGFiZWxTaXplLngsIGJ1dHRvblNpemUueCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIG1heCArICIsIiwKLQkJCW1heCwKLQkJCWNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJY29udHJvbEFsaWduZXIucmVtb3ZlKGxhYmVsKTsKLQotCQlQb2ludCBuZXdCdXR0b25TaXplID0gYnV0dG9uLmdldFNpemUoKTsKLQotCQlhc3NlcnROb3RTYW1lKAotCQkJIlRoZSBvbGQgbWF4IGFuZCBuZXcgbWF4IHNob3VsZCBub3QgYmUgdGhlIHNhbWUiLAotCQkJbWF4LAotCQkJbmV3QnV0dG9uU2l6ZS54Ci0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBDb250cm9sQWxpZ25lciBkb2Vzbid0IGhhdmUgdGhlIHJpZ2h0IG1heGltdW0gd2lkdGgiLAotCQkJbmV3QnV0dG9uU2l6ZS54LAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVDb250cm9sNCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCUNvbXBvc2l0ZSBwYW5lID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKLQkJcGFuZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKLQkJcGFuZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQotCQkvLyBXaWRnZXQgMQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYW5lLCBTV1QuTlVMTCk7Ci0JCWxhYmVsLnNldFRleHQoIlRoaXMgaXMgdmVyeSBsb25nIHRleHQiKTsKLQkJdXBkYXRlR3JpZERhdGEobGFiZWwpOwotCQljb250cm9sQWxpZ25lci5hZGQobGFiZWwpOwotCi0JCS8vIFdpZGdldCAyCi0JCUNvbXBvc2l0ZSBzcGFjZXIgPSBuZXcgQ29tcG9zaXRlKHBhbmUsIFNXVC5OVUxMKTsKLQkJc3BhY2VyLnNldExheW91dChidWlsZFNwYWNlckxheW91dCgpKTsKLQkJdXBkYXRlR3JpZERhdGEoc3BhY2VyKTsKLQkJY29udHJvbEFsaWduZXIuYWRkKHNwYWNlcik7Ci0KLQkJLy8gV2lkZ2V0IDMKLQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFuZSwgU1dULk5VTEwpOwotCQlidXR0b24uc2V0VGV4dCgiU2hvcnQgdGV4dCIpOwotCQl1cGRhdGVHcmlkRGF0YShidXR0b24pOwotCQljb250cm9sQWxpZ25lci5hZGQoYnV0dG9uKTsKLQotLy8JCXBhcmVudC5sYXlvdXQodHJ1ZSwgdHJ1ZSk7Ci0KLQkJLy8gTWFrZSBzdXJlIHRoZSAzIHdpZGdldHMgaGF2ZSB0aGUgc2FtZSB3aWR0aAotCQlQb2ludCBsYWJlbFNpemUgID0gbGFiZWwuZ2V0U2l6ZSgpOwotCQlQb2ludCBzcGFjZXJTaXplID0gc3BhY2VyLmdldFNpemUoKTsKLQkJUG9pbnQgYnV0dG9uU2l6ZSA9IGJ1dHRvbi5nZXRTaXplKCk7Ci0JCWludCBtYXggPSBNYXRoLm1heChsYWJlbFNpemUueCwgYnV0dG9uU2l6ZS54KTsKLQkJbWF4ID0gTWF0aC5tYXgobWF4LCBzcGFjZXJTaXplLngpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyBtYXggKyAiLCIsCi0JCQltYXgsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgc3BhY2VyJ3Mgd2lkdGggc2hvdWxkIGJlICIgKyBtYXggKyAiLCIsCi0JCQltYXgsCi0JCQlzcGFjZXJTaXplLngKLQkJKTsKLQotCQkvLyBSZW1vdmUgdGhlIGxhYmVsICh0aGUgd2lkZXN0IHdpZGdldCkgYW5kIG1ha2Ugc3VyZSB0aGUgd2lkdGggd2FzCi0JCS8vIGNvcnJlY3RseSBjYWxjdWxhdGVkCi0JCWNvbnRyb2xBbGlnbmVyLnJlbW92ZShsYWJlbCk7Ci0KLQkJc3BhY2VyU2l6ZSA9IHNwYWNlci5nZXRTaXplKCk7Ci0JCWJ1dHRvblNpemUgPSBidXR0b24uZ2V0U2l6ZSgpOwotCQlpbnQgbWF4MiA9IE1hdGgubWF4KHNwYWNlclNpemUueCwgYnV0dG9uU2l6ZS54KTsKLQotCQlhc3NlcnROb3RTYW1lKAotCQkJIlRoZSBvbGQgbWF4IGFuZCBuZXcgbWF4IHNob3VsZCBub3QgYmUgdGhlIHNhbWUiLAotCQkJbWF4LAotCQkJbWF4MgotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgQ29udHJvbEFsaWduZXIgZG9lc24ndCBoYXZlIHRoZSByaWdodCBtYXhpbXVtIHdpZHRoIiwKLQkJCW1heDIsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgc3BhY2VyJ3Mgd2lkdGggc2hvdWxkIGhhdmUgYmVlbiBhZGp1c3RlZCIsCi0JCQltYXgyLAotCQkJc3BhY2VyU2l6ZS54Ci0JCSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlQ29udHJvbEFsaWduZXIxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJTGFiZWwgbGFiZWwxID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5VTEwpOwotCQlMYWJlbCBsYWJlbDIgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0KLQkJdXBkYXRlR3JpZERhdGEobGFiZWwxKTsKLQkJdXBkYXRlR3JpZERhdGEobGFiZWwyKTsKLQotCQljb250cm9sQWxpZ25lci5hZGQobGFiZWwxKTsKLQotCQlDb250cm9sQWxpZ25lciBjb250cm9sQWxpZ25lcjIgPSBuZXcgQ29udHJvbEFsaWduZXIoKTsKLQkJY29udHJvbEFsaWduZXIuYWRkKGNvbnRyb2xBbGlnbmVyMik7Ci0JCWNvbnRyb2xBbGlnbmVyMi5hZGQobGFiZWwyKTsKLQotCQlsYWJlbDEuc2V0VGV4dCgiVGhpcyBpcyBhIENvbnRyb2xBbGlnbmVyIik7Ci0JCWxhYmVsMi5zZXRUZXh0KCJUaGlzIGlzIGEgdmVyeSBsb25nIENvbnRyb2xBbGlnbmVyIik7Ci0vLwkJcGFyZW50LmxheW91dCh0cnVlLCB0cnVlKTsKLQotCQlQb2ludCBzaXplMSA9IGxhYmVsMS5nZXRTaXplKCk7Ci0JCVBvaW50IHNpemUyID0gbGFiZWwyLmdldFNpemUoKTsKLQkJaW50IHdpZHRoID0gTWF0aC5tYXgoc2l6ZTEueCwgc2l6ZTIueCk7Ci0KLQkJLy8gVGVzdCAxCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyB3aWR0aCArICIsIiwKLQkJCXdpZHRoLAotCQkJY29udHJvbEFsaWduZXIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgd2lkdGggKyAiLCIsCi0JCQl3aWR0aCwKLQkJCWNvbnRyb2xBbGlnbmVyMi5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCS8vIFRlc3QgMgotCQljb250cm9sQWxpZ25lci5yZW1vdmUobGFiZWwxKTsKLQotCQl3aWR0aCA9IGxhYmVsMi5nZXRTaXplKCkueDsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgd2lkdGggKyAiLCIsCi0JCQl3aWR0aCwKLQkJCWNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIHdpZHRoICsgIiwiLAotCQkJd2lkdGgsCi0JCQljb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVDb250cm9sQWxpZ25lcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlMYWJlbCBsYWJlbDEgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCUxhYmVsIGxhYmVsMiA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDEpOwotCQl1cGRhdGVHcmlkRGF0YShsYWJlbDIpOwotCi0JCWNvbnRyb2xBbGlnbmVyLmFkZChsYWJlbDEpOwotCi0JCUNvbnRyb2xBbGlnbmVyIGNvbnRyb2xBbGlnbmVyMiA9IG5ldyBDb250cm9sQWxpZ25lcigpOwotCQljb250cm9sQWxpZ25lci5hZGQoY29udHJvbEFsaWduZXIyKTsKLQkJY29udHJvbEFsaWduZXIyLmFkZChsYWJlbDIpOwotCi0JCWxhYmVsMS5zZXRUZXh0KCJUaGlzIGlzIGEgQ29udHJvbEFsaWduZXIiKTsKLQkJbGFiZWwyLnNldFRleHQoIlRoaXMgaXMgYSB2ZXJ5IGxvbmcgQ29udHJvbEFsaWduZXIiKTsKLS8vCQlwYXJlbnQubGF5b3V0KHRydWUsIHRydWUpOwotCi0JCVBvaW50IHNpemUxID0gbGFiZWwxLmdldFNpemUoKTsKLQkJUG9pbnQgc2l6ZTIgPSBsYWJlbDIuZ2V0U2l6ZSgpOwotCQlpbnQgd2lkdGggPSBNYXRoLm1heChzaXplMS54LCBzaXplMi54KTsKLQotCQkvLyBUZXN0IDEKLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIHdpZHRoICsgIiwiLAotCQkJd2lkdGgsCi0JCQljb250cm9sQWxpZ25lci5nZXRNYXhpbXVtV2lkdGgoKQotCQkpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgd2lkdGggc2hvdWxkIGJlICIgKyB3aWR0aCArICIsIiwKLQkJCXdpZHRoLAotCQkJY29udHJvbEFsaWduZXIyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJLy8gVGVzdCAyCi0JCWNvbnRyb2xBbGlnbmVyMi5yZW1vdmUobGFiZWwyKTsKLQotCQl3aWR0aCA9IGxhYmVsMS5nZXRTaXplKCkueDsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIHNob3VsZCBiZSAiICsgd2lkdGggKyAiLCIsCi0JCQl3aWR0aCwKLQkJCWNvbnRyb2xBbGlnbmVyLmdldE1heGltdW1XaWR0aCgpCi0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBzaG91bGQgYmUgIiArIHdpZHRoICsgIiwiLAotCQkJd2lkdGgsCi0JCQljb250cm9sQWxpZ25lcjIuZ2V0TWF4aW11bVdpZHRoKCkKLQkJKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlR3JpZERhdGEoQ29udHJvbCBjb250cm9sKSB7Ci0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ICAgICAgID0gR3JpZERhdGEuRklMTDsKLQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7Ci0JCWNvbnRyb2wuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvQ29udHJvbEVuYWJsZXJUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sRW5hYmxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhjYjdmMi4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sRW5hYmxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuU1dUVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwudXRpbGl0eS5zd3QuU1dUVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29udHJvbEVuYWJsZXJUZXN0IHsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnQ7Ci0KLQlAQmVmb3JlCi0JcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0JCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoU1dUVXRpbC5nZXRTaGVsbCgpLCBTV1QuTk9ORSk7Ci0JCXBhcmVudC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JfQotCi0JQEFmdGVyCi0JcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JCWlmIChwYXJlbnQgIT0gbnVsbCkgewotCQkJcGFyZW50LmRpc3Bvc2UoKTsKLQkJfQotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFN3aXRjaFN0YXRlKCkgewotCi0JCVNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBib29sZWFuSG9sZGVyID0KLQkJCW5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4odHJ1ZSk7Ci0KLQkJQ29tYm8gY29tYm8gPSBuZXcgQ29tYm8ocGFyZW50LCBTV1QuQk9SREVSKTsKLQotCQlTV1RUb29scy5jb250cm9sRW5hYmxlZFN0YXRlKGJvb2xlYW5Ib2xkZXIsIGNvbWJvKTsKLQotCQlhc3NlcnRUcnVlKAotCQkJIlRoZSBDb21ibyBzaG91bGQgYmUgZW5hYmxlZCIsCi0JCQljb21iby5pc0VuYWJsZWQoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAobnVsbCkKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgQ29tYm8gc2hvdWxkIG5vdCBiZSBlbmFibGVkIiwKLQkJCWNvbWJvLmlzRW5hYmxlZCgpCi0JCSk7Ci0KLQkJLy8gQ2hhbmdlIHN0YXRlICh0cnVlKQotCQlib29sZWFuSG9sZGVyLnNldFZhbHVlKHRydWUpOwotCi0JCWFzc2VydFRydWUoCi0JCQkiVGhlIENvbWJvIHNob3VsZCBiZSBlbmFibGVkIiwKLQkJCWNvbWJvLmlzRW5hYmxlZCgpCi0JCSk7Ci0KLQkJLy8gQ2hhbmdlIHN0YXRlIChmYWxzZSkKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZShmYWxzZSk7Ci0KLQkJYXNzZXJ0RmFsc2UoCi0JCQkiVGhlIENvbWJvIHNob3VsZCBub3QgYmUgZW5hYmxlZCIsCi0JCQljb21iby5pc0VuYWJsZWQoKQotCQkpOwotCi0JCS8vIERpc3Bvc2UKLQkJY29tYm8uZGlzcG9zZSgpOwotCQlib29sZWFuSG9sZGVyLnNldFZhbHVlKHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0NvbnRyb2xTd2l0Y2hlclRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0NvbnRyb2xTd2l0Y2hlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU4Y2UwYi4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sU3dpdGNoZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwudXRpbC5Db250cm9sU3dpdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuU1dUVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5DbGFzc1Rvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLlRyYW5zZm9ybWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuUGFnZUJvb2s7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGZpbmFsIGNsYXNzIENvbnRyb2xTd2l0Y2hlclRlc3QgewotCi0JcHJpdmF0ZSBQYWdlQm9vayBwYWdlQm9vazsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYW5lMTsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYW5lMjsKLQlwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnQ7Ci0KLQlwcml2YXRlIENvbXBvc2l0ZSBidWlsZFBhbmUxKCkgewotCi0JCWlmIChwYW5lMSA9PSBudWxsKSB7Ci0KLQkJCXBhbmUxID0gbmV3IENvbXBvc2l0ZShwYWdlQm9vaywgU1dULk5VTEwpOwotCQkJcGFuZTEuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIGZhbHNlKSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhbmUxLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCImVGVzdDI6Iik7Ci0KLQkJCVRleHQgdGV4dCA9IG5ldyBUZXh0KHBhbmUxLCBTV1QuQk9SREVSKTsKLQkJCXRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0KLQkJCUNvbWJvIGNvbWJvID0gbmV3IENvbWJvKHBhbmUxLCBTV1QuQk9SREVSKTsKLQotCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCQljb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQl9Ci0KLQkJcmV0dXJuIHBhbmUxOwotCX0KLQotCXByaXZhdGUgQ29tcG9zaXRlIGJ1aWxkUGFuZTIoKSB7Ci0KLQkJaWYgKHBhbmUyID09IG51bGwpIHsKLQotCQkJcGFuZTIgPSBuZXcgQ29tcG9zaXRlKHBhZ2VCb29rLCBTV1QuTlVMTCk7Ci0JCQlwYW5lMi5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFuZTIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIiZUZXN0MToiKTsKLQotCQkJVGV4dCB0ZXh0ID0gbmV3IFRleHQocGFuZTIsIFNXVC5CT1JERVIpOwotCQkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJfQotCi0JCXJldHVybiBwYW5lMjsKLQl9Ci0KLQlwcml2YXRlIFRyYW5zZm9ybWVyPEJvb2xlYW4sIENvbnRyb2w+IGJ1aWxkVHJhbnNmb3JtZXIoKSB7Ci0JCXJldHVybiBuZXcgVHJhbnNmb3JtZXI8Qm9vbGVhbiwgQ29udHJvbD4oKSB7Ci0JCQlwdWJsaWMgQ29udHJvbCB0cmFuc2Zvcm0oQm9vbGVhbiB2YWx1ZSkgewotCQkJCXJldHVybiAodmFsdWUgPT0gbnVsbCkgPyBudWxsIDogKHZhbHVlID8gcGFuZTEgOiBwYW5lMik7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKFNXVFV0aWwuZ2V0U2hlbGwoKSwgU1dULk5PTkUpOwotCQlwYXJlbnQuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCi0JCXBhZ2VCb29rID0gbmV3IFBhZ2VCb29rKHBhcmVudCwgU1dULk5VTEwpOwotCQlwYWdlQm9vay5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKLQl9Ci0KLQlAQWZ0ZXIKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLQotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQotCQkJcGFyZW50LmRpc3Bvc2UoKTsKLQotCQkJcGFyZW50ICAgPSBudWxsOwotCQkJcGFnZUJvb2sgPSBudWxsOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoKCkgewotCi0JCVNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBzd2l0Y2hIb2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+KCk7Ci0JCVRyYW5zZm9ybWVyPEJvb2xlYW4sIENvbnRyb2w+IHRyYW5zZm9ybWVyID0gYnVpbGRUcmFuc2Zvcm1lcigpOwotCi0JCXBhbmUxID0gYnVpbGRQYW5lMSgpOwotCQlwYW5lMS5zZXRWaXNpYmxlKGZhbHNlKTsKLQotCQlwYW5lMiA9IGJ1aWxkUGFuZTIoKTsKLQkJcGFuZTIuc2V0VmlzaWJsZShmYWxzZSk7Ci0KLQkJbmV3IENvbnRyb2xTd2l0Y2hlcigKLQkJCXN3aXRjaEhvbGRlciwKLQkJCXRyYW5zZm9ybWVyLAotCQkJcGFnZUJvb2sKLQkJKTsKLQotCQkvLyBUZXN0IDEKLQkJc3dpdGNoSG9sZGVyLnNldFZhbHVlKHRydWUpOwotCQlDb250cm9sIGNvbnRyb2wgPSAoQ29udHJvbCkgQ2xhc3NUb29scy5maWVsZFZhbHVlKHBhZ2VCb29rLCAiY3VycmVudFBhZ2UiKTsKLQotCQlhc3NlcnROb3ROdWxsKAotCQkJIlRoZSBwYWdlIGJvb2sncyBwYWdlIHNob3VsZG4ndCBiZSBudWxsIiwKLQkJCWNvbnRyb2wKLQkJKTsKLQotCQlhc3NlcnRTYW1lKAotCQkJIlRoZSBjdXJyZW50IHBhbmUgc2hvdWxkIGJlIHBhbmUxIiwKLQkJCXBhbmUxLAotCQkJY29udHJvbAotCQkpOwotCi0JCVBvaW50IHBhbmUxU2l6ZSA9IHBhbmUxLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0JCVBvaW50IHBhZ2VCb29rU2l6ZSA9IHBhZ2VCb29rLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSB3aWR0aCBvZiB0aGUgUGFnZUJvb2sgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSB3aWR0aCBvZiBwYW5lMSIsCi0JCQlwYW5lMVNpemUueCwKLQkJCXBhZ2VCb29rU2l6ZS54Ci0JCSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBoZWlnaHQgb2YgdGhlIFBhZ2VCb29rIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgaGVpZ2h0IG9mIHBhbmUxIiwKLQkJCXBhbmUxU2l6ZS55LAotCQkJcGFnZUJvb2tTaXplLnkKLQkJKTsKLQotCQkvLyBUZXN0IDIKLQkJc3dpdGNoSG9sZGVyLnNldFZhbHVlKGZhbHNlKTsKLQkJY29udHJvbCA9IChDb250cm9sKSBDbGFzc1Rvb2xzLmZpZWxkVmFsdWUocGFnZUJvb2ssICJjdXJyZW50UGFnZSIpOwotCi0JCWFzc2VydE5vdE51bGwoCi0JCQkiVGhlIHBhZ2UgYm9vaydzIHBhZ2Ugc2hvdWxkbid0IGJlIG51bGwiLAotCQkJY29udHJvbAotCQkpOwotCi0JCWFzc2VydFNhbWUoCi0JCQkiVGhlIGN1cnJlbnQgcGFuZSBzaG91bGQgYmUgcGFuZTIiLAotCQkJcGFuZTIsCi0JCQljb250cm9sCi0JCSk7Ci0KLQkJUG9pbnQgcGFuZTJTaXplID0gcGFuZTIuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQkJcGFnZUJvb2tTaXplID0gcGFnZUJvb2suY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIHdpZHRoIG9mIHRoZSBQYWdlQm9vayBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHdpZHRoIG9mIHBhbmUyIiwKLQkJCXBhbmUyU2l6ZS54LAotCQkJcGFnZUJvb2tTaXplLngKLQkJKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIGhlaWdodCBvZiB0aGUgUGFnZUJvb2sgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBoZWlnaHQgb2YgcGFuZTIiLAotCQkJcGFuZTJTaXplLnksCi0JCQlwYWdlQm9va1NpemUueQotCQkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0NvbnRyb2xWaXNpYmlsaXR5RW5hYmxlclRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0NvbnRyb2xWaXNpYmlsaXR5RW5hYmxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E3MDJkNS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9Db250cm9sVmlzaWJpbGl0eUVuYWJsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuU1dUVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwudXRpbGl0eS5zd3QuU1dUVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgZmluYWwgY2xhc3MgQ29udHJvbFZpc2liaWxpdHlFbmFibGVyVGVzdCB7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50OwotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKFNXVFV0aWwuZ2V0U2hlbGwoKSwgU1dULk5PTkUpOwotCQlwYXJlbnQuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCX0KLQotCUBBZnRlcgotCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudC5kaXNwb3NlKCk7Ci0JCX0KLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hTdGF0ZSgpIHsKLQotCQlTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gYm9vbGVhbkhvbGRlciA9Ci0JCQluZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+KHRydWUpOwotCi0JCUNvbWJvIGNvbWJvID0gbmV3IENvbWJvKHBhcmVudCwgU1dULkJPUkRFUik7Ci0KLQkJU1dUVG9vbHMuY29udHJvbFZpc2libGVTdGF0ZShib29sZWFuSG9sZGVyLCBjb21ibyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgKLQkJCSJUaGUgQ29tYm8gc2hvdWxkIGJlIHZpc2libGUiLAotCQkJY29tYm8uaXNWaXNpYmxlKCkKLQkJKTsKLQotCQkvLyBDaGFuZ2Ugc3RhdGUgKG51bGwpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUobnVsbCk7Ci0KLQkJYXNzZXJ0RmFsc2UoCi0JCQkiVGhlIENvbWJvIHNob3VsZCBub3QgYmUgdmlzaWJsZSIsCi0JCQljb21iby5pc1Zpc2libGUoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAodHJ1ZSkKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZSh0cnVlKTsKLQotCQlhc3NlcnRUcnVlKAotCQkJIlRoZSBDb21ibyBzaG91bGQgYmUgdmlzaWJsZSIsCi0JCQljb21iby5pc1Zpc2libGUoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAoZmFsc2UpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUoZmFsc2UpOwotCi0JCWFzc2VydEZhbHNlKAotCQkJIlRoZSBDb21ibyBzaG91bGQgbm90IGJlIHZpc2libGUiLAotCQkJY29tYm8uaXNWaXNpYmxlKCkKLQkJKTsKLQotCQkvLyBEaXNwb3NlCi0JCWNvbWJvLmRpc3Bvc2UoKTsKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZSh0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9KcHRVaVV0aWxUZXN0cy5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvSnB0VWlVdGlsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFjZmIwOC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9KcHRVaVV0aWxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkpVbml0NFRlc3RBZGFwdGVyOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlN1aXRlOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlN1aXRlLlN1aXRlQ2xhc3NlczsKLQotQFN1aXRlQ2xhc3NlcwotKHsKLQlDb250cm9sQWxpZ25lclRlc3QuY2xhc3MsCi0JQ29udHJvbFN3aXRjaGVyVGVzdC5jbGFzcywKLQlDb250cm9sRW5hYmxlclRlc3QuY2xhc3MsCi0JQ29udHJvbFZpc2liaWxpdHlFbmFibGVyVGVzdC5jbGFzcywKLQlMYWJlbGVkQnV0dG9uVGVzdC5jbGFzcywKLQlMYWJlbGVkTGFiZWxUZXN0LmNsYXNzLAotCUxhYmVsZWRDb250cm9sVXBkYXRlclRlc3QuY2xhc3MsCi0JUGFuZUVuYWJsZXJUZXN0LmNsYXNzLAotCVBhbmVWaXNpYmlsaXR5RW5hYmxlclRlc3QuY2xhc3MsCi19KQotQFJ1bldpdGgoU3VpdGUuY2xhc3MpCi1wdWJsaWMgZmluYWwgY2xhc3MgSnB0VWlVdGlsVGVzdHMgewotCi0JcHJpdmF0ZSBKcHRVaVV0aWxUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCXN1aXRlLmFkZFRlc3QobmV3IEpVbml0NFRlc3RBZGFwdGVyKEpwdFVpVXRpbFRlc3RzLmNsYXNzKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9MYWJlbGVkQnV0dG9uVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvTGFiZWxlZEJ1dHRvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRlMzAzMS4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9MYWJlbGVkQnV0dG9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLkxhYmVsZWRCdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuU1dUVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgZmluYWwgY2xhc3MgTGFiZWxlZEJ1dHRvblRlc3QgewotCi0JcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50OwotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKFNXVFV0aWwuZ2V0U2hlbGwoKSwgU1dULk5PTkUpOwotCQlwYXJlbnQuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCX0KLQotCUBBZnRlcgotCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudC5kaXNwb3NlKCk7Ci0JCQlwYXJlbnQgPSBudWxsOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0TGFiZWxlZEJ1dHRvbjEoKSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5VTEwpOwotCQluZXcgTGFiZWxlZEJ1dHRvbihidXR0b24pOwotCX0KLQotCUBUZXN0KGV4cGVjdGVkPUFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbi5jbGFzcykKLQlwdWJsaWMgdm9pZCB0ZXN0TGFiZWxlZEJ1dHRvbjIoKSB7Ci0JCW5ldyBMYWJlbGVkQnV0dG9uKG51bGwpOwotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNldEltYWdlKCkgewotCi0JCUltYWdlIGV4cGVjdGVkID0gbmV3IEltYWdlKHBhcmVudC5nZXREaXNwbGF5KCksIDE2LCAxNik7Ci0KLQkJdHJ5IHsKLQkJCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5VTEwpOwotCQkJTGFiZWxlZEJ1dHRvbiBsYWJlbGVkQnV0dG9uID0gbmV3IExhYmVsZWRCdXR0b24oYnV0dG9uKTsKLQotCQkJbGFiZWxlZEJ1dHRvbi5zZXRJbWFnZShleHBlY3RlZCk7Ci0KLQkJCWFzc2VydEVxdWFscygKLQkJCQkiVGhlIEJ1dHRvbiBkaWRuJ3QgcmVjZWl2ZSB0aGUgSW1hZ2UiLAotCQkJCWV4cGVjdGVkLAotCQkJCWJ1dHRvbi5nZXRJbWFnZSgpCi0JCQkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZXhwZWN0ZWQuZGlzcG9zZSgpOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0SW1hZ2VEaXNwb3NlKCkgewotCi0JCUltYWdlIGV4cGVjdGVkID0gbmV3IEltYWdlKHBhcmVudC5nZXREaXNwbGF5KCksIDE2LCAxNik7Ci0KLQkJdHJ5IHsKLQkJCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5VTEwpOwotCQkJTGFiZWxlZEJ1dHRvbiBsYWJlbGVkQnV0dG9uID0gbmV3IExhYmVsZWRCdXR0b24oYnV0dG9uKTsKLQotCQkJYnV0dG9uLmRpc3Bvc2UoKTsKLQotCQkJLy8gVGhpcyBzaG91bGQgbm90IGZhaWwgYnV0IHNpbXBseSBkbyBub3RoaW5nCi0JCQlsYWJlbGVkQnV0dG9uLnNldEltYWdlKGV4cGVjdGVkKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWV4cGVjdGVkLmRpc3Bvc2UoKTsKLQkJfQotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNldFRleHQoKSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5VTEwpOwotCQlMYWJlbGVkQnV0dG9uIGxhYmVsZWRCdXR0b24gPSBuZXcgTGFiZWxlZEJ1dHRvbihidXR0b24pOwotCi0JCVN0cmluZyBleHBlY3RlZCA9ICJUaGlzIGlzIGEgdGVzdCI7Ci0JCWxhYmVsZWRCdXR0b24uc2V0VGV4dChleHBlY3RlZCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKAotCQkJIlRoZSBCdXR0b24gZGlkbid0IHJlY2VpdmUgdGhlIHRleHQiLAotCQkJZXhwZWN0ZWQsCi0JCQlidXR0b24uZ2V0VGV4dCgpCi0JCSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VGV4dERpc3Bvc2UoKSB7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULk5VTEwpOwotCQlMYWJlbGVkQnV0dG9uIGxhYmVsZWRCdXR0b24gPSBuZXcgTGFiZWxlZEJ1dHRvbihidXR0b24pOwotCi0JCWJ1dHRvbi5kaXNwb3NlKCk7Ci0KLQkJLy8gVGhpcyBzaG91bGQgbm90IGZhaWwgYnV0IHNpbXBseSBkbyBub3RoaW5nCi0JCVN0cmluZyBleHBlY3RlZCA9ICJUaGlzIGlzIGEgdGVzdCI7Ci0JCWxhYmVsZWRCdXR0b24uc2V0VGV4dChleHBlY3RlZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvTGFiZWxlZENvbnRyb2xVcGRhdGVyVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvTGFiZWxlZENvbnRyb2xVcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDJjZTUwLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0xhYmVsZWRDb250cm9sVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIE9yYWNsZSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzLmludGVybmFsLnV0aWw7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuTGFiZWxlZENvbnRyb2xVcGRhdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLkxhYmVsZWRMYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwudXRpbC5TV1RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Xcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBmaW5hbCBjbGFzcyBMYWJlbGVkQ29udHJvbFVwZGF0ZXJUZXN0IHsKLQotCXByaXZhdGUgQ29tcG9zaXRlIHBhcmVudDsKLQotCUBCZWZvcmUKLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShTV1RVdGlsLmdldFNoZWxsKCksIFNXVC5OT05FKTsKLQkJcGFyZW50LnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQl9Ci0KLQlAQWZ0ZXIKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLQkJaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0JCQlwYXJlbnQuZGlzcG9zZSgpOwotCQkJcGFyZW50ID0gbnVsbDsKLQkJfQotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNldEltYWdlKCkgewotCi0JCUltYWdlIGV4cGVjdGVkID0gbmV3IEltYWdlKHBhcmVudC5nZXREaXNwbGF5KCksIDE2LCAxNik7Ci0KLQkJdHJ5IHsKLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5VTEwpOwotCQkJTGFiZWxlZExhYmVsIGxhYmVsZWRMYWJlbCA9IG5ldyBMYWJlbGVkTGFiZWwobGFiZWwpOwotCi0JCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxJbWFnZT4gaW1hZ2VIb2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEltYWdlPigpOwotCQkJbmV3IExhYmVsZWRDb250cm9sVXBkYXRlcihsYWJlbGVkTGFiZWwsIG51bGwsIGltYWdlSG9sZGVyKTsKLQotCQkJbGFiZWxlZExhYmVsLnNldEltYWdlKGV4cGVjdGVkKTsKLQotCQkJYXNzZXJ0RXF1YWxzKAotCQkJCSJUaGUgTGFiZWwgZGlkbid0IHJlY2VpdmUgdGhlIEltYWdlIiwKLQkJCQlleHBlY3RlZCwKLQkJCQlsYWJlbC5nZXRJbWFnZSgpCi0JCQkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJZXhwZWN0ZWQuZGlzcG9zZSgpOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0SW1hZ2VEaXNwb3NlKCkgewotCi0JCUltYWdlIGV4cGVjdGVkID0gbmV3IEltYWdlKHBhcmVudC5nZXREaXNwbGF5KCksIDE2LCAxNik7Ci0KLQkJdHJ5IHsKLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5VTEwpOwotCQkJTGFiZWxlZExhYmVsIGxhYmVsZWRMYWJlbCA9IG5ldyBMYWJlbGVkTGFiZWwobGFiZWwpOwotCi0JCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxJbWFnZT4gaW1hZ2VIb2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEltYWdlPigpOwotCQkJbmV3IExhYmVsZWRDb250cm9sVXBkYXRlcihsYWJlbGVkTGFiZWwsIG51bGwsIGltYWdlSG9sZGVyKTsKLQotCQkJbGFiZWwuZGlzcG9zZSgpOwotCQkJbGFiZWxlZExhYmVsLnNldEltYWdlKGV4cGVjdGVkKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWV4cGVjdGVkLmRpc3Bvc2UoKTsKLQkJfQotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNldFRleHQoKSB7Ci0KLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCUxhYmVsZWRMYWJlbCBsYWJlbGVkTGFiZWwgPSBuZXcgTGFiZWxlZExhYmVsKGxhYmVsKTsKLQotCQlXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxTdHJpbmc+IHRleHRIb2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4oKTsKLQkJbmV3IExhYmVsZWRDb250cm9sVXBkYXRlcihsYWJlbGVkTGFiZWwsIHRleHRIb2xkZXIpOwotCi0JCVN0cmluZyBleHBlY3RlZCA9ICJUaGlzIGlzIGEgdGVzdCI7Ci0JCXRleHRIb2xkZXIuc2V0VmFsdWUoZXhwZWN0ZWQpOwotCi0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgTGFiZWwgZGlkbid0IHJlY2VpdmUgdGhlIHRleHQiLAotCQkJZXhwZWN0ZWQsCi0JCQlsYWJlbC5nZXRUZXh0KCkKLQkJKTsKLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0RGlzcG9zZSgpIHsKLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQkJTGFiZWxlZExhYmVsIGxhYmVsZWRMYWJlbCA9IG5ldyBMYWJlbGVkTGFiZWwobGFiZWwpOwotCi0JCVdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4gdGV4dEhvbGRlciA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8U3RyaW5nPigpOwotCQluZXcgTGFiZWxlZENvbnRyb2xVcGRhdGVyKGxhYmVsZWRMYWJlbCwgdGV4dEhvbGRlcik7Ci0KLQkJbGFiZWwuZGlzcG9zZSgpOwotCi0JCVN0cmluZyBleHBlY3RlZCA9ICJUaGlzIGlzIGEgdGVzdCI7Ci0JCXRleHRIb2xkZXIuc2V0VmFsdWUoZXhwZWN0ZWQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0xhYmVsZWRMYWJlbFRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL0xhYmVsZWRMYWJlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk2MjI4NC4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9MYWJlbGVkTGFiZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnRpb25GYWlsZWRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuTGFiZWxlZExhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLlNXVFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgZmluYWwgY2xhc3MgTGFiZWxlZExhYmVsVGVzdCB7Ci0KLQlwcml2YXRlIENvbXBvc2l0ZSBwYXJlbnQ7Ci0KLQlAQmVmb3JlCi0JcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0JCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoU1dUVXRpbC5nZXRTaGVsbCgpLCBTV1QuTk9ORSk7Ci0JCXBhcmVudC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JfQotCi0JQEFmdGVyCi0JcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0JCWlmIChwYXJlbnQgIT0gbnVsbCkgewotCQkJcGFyZW50LmRpc3Bvc2UoKTsKLQkJCXBhcmVudCA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RMYWJlbGVkQnV0dG9uMSgpIHsKLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCW5ldyBMYWJlbGVkTGFiZWwobGFiZWwpOwotCX0KLQotCUBUZXN0KGV4cGVjdGVkPUFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbi5jbGFzcykKLQlwdWJsaWMgdm9pZCB0ZXN0TGFiZWxlZEJ1dHRvbjIoKSB7Ci0JCW5ldyBMYWJlbGVkTGFiZWwobnVsbCk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0SW1hZ2UoKSB7Ci0KLQkJSW1hZ2UgZXhwZWN0ZWQgPSBuZXcgSW1hZ2UocGFyZW50LmdldERpc3BsYXkoKSwgMTYsIDE2KTsKLQotCQl0cnkgewotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTlVMTCk7Ci0JCQlMYWJlbGVkTGFiZWwgbGFiZWxlZExhYmVsID0gbmV3IExhYmVsZWRMYWJlbChsYWJlbCk7Ci0KLQkJCWxhYmVsZWRMYWJlbC5zZXRJbWFnZShleHBlY3RlZCk7Ci0KLQkJCWFzc2VydEVxdWFscygKLQkJCQkiVGhlIExhYmVsIGRpZG4ndCByZWNlaXZlIHRoZSBJbWFnZSIsCi0JCQkJZXhwZWN0ZWQsCi0JCQkJbGFiZWwuZ2V0SW1hZ2UoKQotCQkJKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWV4cGVjdGVkLmRpc3Bvc2UoKTsKLQkJfQotCX0KLQotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFNldEltYWdlRGlzcG9zZSgpIHsKLQotCQlJbWFnZSBleHBlY3RlZCA9IG5ldyBJbWFnZShwYXJlbnQuZ2V0RGlzcGxheSgpLCAxNiwgMTYpOwotCi0JCXRyeSB7Ci0JCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQkJCUxhYmVsZWRMYWJlbCBsYWJlbGVkTGFiZWwgPSBuZXcgTGFiZWxlZExhYmVsKGxhYmVsKTsKLQotCQkJbGFiZWwuZGlzcG9zZSgpOwotCi0JCQkvLyBUaGlzIHNob3VsZCBub3QgZmFpbCBidXQgc2ltcGx5IGRvIG5vdGhpbmcKLQkJCWxhYmVsZWRMYWJlbC5zZXRJbWFnZShleHBlY3RlZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlleHBlY3RlZC5kaXNwb3NlKCk7Ci0JCX0KLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0KCkgewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OVUxMKTsKLQkJTGFiZWxlZExhYmVsIGxhYmVsZWRMYWJlbCA9IG5ldyBMYWJlbGVkTGFiZWwobGFiZWwpOwotCi0JCVN0cmluZyBleHBlY3RlZCA9ICJUaGlzIGlzIGEgdGVzdCI7Ci0JCWxhYmVsZWRMYWJlbC5zZXRUZXh0KGV4cGVjdGVkKTsKLQotCQlhc3NlcnRFcXVhbHMoCi0JCQkiVGhlIExhYmVsIGRpZG4ndCByZWNlaXZlIHRoZSB0ZXh0IiwKLQkJCWV4cGVjdGVkLAotCQkJbGFiZWwuZ2V0VGV4dCgpCi0JCSk7Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VGV4dERpc3Bvc2UoKSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5VTEwpOwotCQlMYWJlbGVkTGFiZWwgbGFiZWxlZExhYmVsID0gbmV3IExhYmVsZWRMYWJlbChsYWJlbCk7Ci0KLQkJbGFiZWwuZGlzcG9zZSgpOwotCi0JCS8vIFRoaXMgc2hvdWxkIG5vdCBmYWlsIGJ1dCBzaW1wbHkgZG8gbm90aGluZwotCQlTdHJpbmcgZXhwZWN0ZWQgPSAiVGhpcyBpcyBhIHRlc3QiOwotCQlsYWJlbGVkTGFiZWwuc2V0VGV4dChleHBlY3RlZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvUGFuZUVuYWJsZXJUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9QYW5lRW5hYmxlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc1ZDA4Ni4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbC9QYW5lRW5hYmxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuUGFuZUVuYWJsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuU1dUVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwud2lkZ2V0cy5EaWFsb2dQYW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBmaW5hbCBjbGFzcyBQYW5lRW5hYmxlclRlc3QgewotCXByaXZhdGUgQ29tcG9zaXRlIHBhcmVudDsKLQotCUBCZWZvcmUKLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShTV1RVdGlsLmdldFNoZWxsKCksIFNXVC5OT05FKTsKLQkJcGFyZW50LnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKLQl9Ci0KLQlAQWZ0ZXIKLQlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLQkJaWYgKHBhcmVudCAhPSBudWxsKSB7Ci0JCQlwYXJlbnQuZGlzcG9zZSgpOwotCQl9Ci0JfQotCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoU3RhdGUoKSB7Ci0KLQkJU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+IGJvb2xlYW5Ib2xkZXIgPQotCQkJbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPih0cnVlKTsKLQotCQlEaWFsb2dQYW5lPE5vZGU+IHBhbmUgPSBuZXcgRGlhbG9nUGFuZTxOb2RlPigKLQkJCW5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8Tm9kZT4oKSwKLQkJCXBhcmVudCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplTGF5b3V0KENvbXBvc2l0ZSBjb250YWluZXIpIHsKLQkJCX0KLQkJfTsKLQotCQluZXcgUGFuZUVuYWJsZXIoYm9vbGVhbkhvbGRlciwgcGFuZSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgYmUgZW5hYmxlZCIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc0VuYWJsZWQoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAobnVsbCkKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgbm90IGJlIGVuYWJsZWQiLAotCQkJcGFuZS5nZXRDb250cm9sKCkuaXNFbmFibGVkKCkKLQkJKTsKLQotCQkvLyBDaGFuZ2Ugc3RhdGUgKHRydWUpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUodHJ1ZSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgYmUgZW5hYmxlZCIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc0VuYWJsZWQoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAoZmFsc2UpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUoZmFsc2UpOwotCi0JCWFzc2VydEZhbHNlKAotCQkJIlRoZSBwYW5lIHNob3VsZCBub3QgYmUgZW5hYmxlZCIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc0VuYWJsZWQoKQotCQkpOwotCi0JCS8vIERpc3Bvc2UKLQkJcGFuZS5kaXNwb3NlKCk7Ci0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUodHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvUGFuZVZpc2liaWxpdHlFbmFibGVyVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWwvUGFuZVZpc2liaWxpdHlFbmFibGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWNkMmQ5Li4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsL1BhbmVWaXNpYmlsaXR5RW5hYmxlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggT3JhY2xlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCi0gKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wLCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbgotICogYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC4KLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWwuUGFuZVZpc2liaWxpdHlFbmFibGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51aS5pbnRlcm5hbC51dGlsLlNXVFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLndpZGdldHMuRGlhbG9nUGFuZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFuZVZpc2liaWxpdHlFbmFibGVyVGVzdCB7Ci0JcHJpdmF0ZSBDb21wb3NpdGUgcGFyZW50OwotCi0JQEJlZm9yZQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKFNXVFV0aWwuZ2V0U2hlbGwoKSwgU1dULk5PTkUpOwotCQlwYXJlbnQuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOwotCX0KLQotCUBBZnRlcgotCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotCQlpZiAocGFyZW50ICE9IG51bGwpIHsKLQkJCXBhcmVudC5kaXNwb3NlKCk7Ci0JCX0KLQl9Ci0KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hTdGF0ZSgpIHsKLQotCQlTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gYm9vbGVhbkhvbGRlciA9Ci0JCQluZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+KHRydWUpOwotCi0JCURpYWxvZ1BhbmU8Tm9kZT4gcGFuZSA9IG5ldyBEaWFsb2dQYW5lPE5vZGU+KAotCQkJbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxOb2RlPigpLAotCQkJcGFyZW50KQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVMYXlvdXQoQ29tcG9zaXRlIGNvbnRhaW5lcikgewotCQkJfQotCQl9OwotCi0JCW5ldyBQYW5lVmlzaWJpbGl0eUVuYWJsZXIoYm9vbGVhbkhvbGRlciwgcGFuZSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgYmUgdmlzaWJsZSIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc1Zpc2libGUoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAobnVsbCkKLQkJYm9vbGVhbkhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQotCQlhc3NlcnRGYWxzZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgbm90IGJlIHZpc2libGUiLAotCQkJcGFuZS5nZXRDb250cm9sKCkuaXNWaXNpYmxlKCkKLQkJKTsKLQotCQkvLyBDaGFuZ2Ugc3RhdGUgKHRydWUpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUodHJ1ZSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgKLQkJCSJUaGUgcGFuZSBzaG91bGQgYmUgdmlzaWJsZSIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc1Zpc2libGUoKQotCQkpOwotCi0JCS8vIENoYW5nZSBzdGF0ZSAoZmFsc2UpCi0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUoZmFsc2UpOwotCi0JCWFzc2VydEZhbHNlKAotCQkJIlRoZSBwYW5lIHNob3VsZCBub3QgYmUgdmlzaWJsZSIsCi0JCQlwYW5lLmdldENvbnRyb2woKS5pc1Zpc2libGUoKQotCQkpOwotCi0JCS8vIERpc3Bvc2UKLQkJcGFuZS5kaXNwb3NlKCk7Ci0JCWJvb2xlYW5Ib2xkZXIuc2V0VmFsdWUodHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWxpdHkvc3d0L0Jvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QuamF2YSBiL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsaXR5L3N3dC9Cb29sZWFuU3RhdGVDb250cm9sbGVyVUlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMWVkNDYuLjAwMDAwMDAKLS0tIGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWxpdHkvc3d0L0Jvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsaXR5LnN3dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkFwcGxpY2F0aW9uV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWxpdHkuc3d0LlNXVFRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkNsYXNzVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlTGlzdFZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci0KLS8qKgotICogUGxheSBhcm91bmQgd2l0aCBib29sZWFuIHN0YXRlIGNvbnRyb2xsZXJzICgnZW5hYmxlZCcgYW5kICd2aXNpYmxlJykuCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQotcHVibGljIGNsYXNzIEJvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QKLQlleHRlbmRzIEFwcGxpY2F0aW9uV2luZG93Ci17Ci0JcHJpdmF0ZSBmaW5hbCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBlbmFibGVkSG9sZGVyOwotCXByaXZhdGUgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gdmlzaWJsZUhvbGRlcjsKLQlwcml2YXRlIGZpbmFsIFNpbXBsZUxpc3RWYWx1ZU1vZGVsPFN0cmluZz4gbGlzdEhvbGRlcjsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4gbGlzdFNlbGVjdGlvbkhvbGRlcjsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCQlXaW5kb3cgd2luZG93ID0gbmV3IEJvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QoYXJncyk7Ci0JCXdpbmRvdy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLQkJd2luZG93Lm9wZW4oKTsKLQkJRGlzcGxheS5nZXRDdXJyZW50KCkuZGlzcG9zZSgpOwotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci0KLQlwcml2YXRlIEJvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFN0cmluZ1tdIGFyZ3MpIHsKLQkJc3VwZXIobnVsbCk7Ci0JCXRoaXMuZW5hYmxlZEhvbGRlciA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4oQm9vbGVhbi5UUlVFKTsKLQkJdGhpcy52aXNpYmxlSG9sZGVyID0gbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPihCb29sZWFuLlRSVUUpOwotCQl0aGlzLmxpc3RIb2xkZXIgPSB0aGlzLmJ1aWxkTGlzdEhvbGRlcigpOwotCQl0aGlzLmxpc3RTZWxlY3Rpb25Ib2xkZXIgPSBuZXcgU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsPFN0cmluZz4obnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSBTaW1wbGVMaXN0VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkTGlzdEhvbGRlcigpIHsKLQkJU2ltcGxlTGlzdFZhbHVlTW9kZWw8U3RyaW5nPiByZXN1bHQgPSBuZXcgU2ltcGxlTGlzdFZhbHVlTW9kZWw8U3RyaW5nPigpOwotCQlyZXN1bHQuYWRkKCJ6ZXJvIik7Ci0JCXJlc3VsdC5hZGQoIm9uZSIpOwotCQlyZXN1bHQuYWRkKCJ0d28iKTsKLQkJcmVzdWx0LmFkZCgidGhyZWUiKTsKLQkJcmVzdWx0LmFkZCgiZm91ciIpOwotCQlyZXN1bHQuYWRkKCJmaXZlIik7Ci0JCXJlc3VsdC5hZGQoInNpeCIpOwotCQlyZXN1bHQuYWRkKCJzZXZlbiIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJKChTaGVsbCkgcGFyZW50KS5zZXRUZXh0KENsYXNzVG9vbHMuc2hvcnRDbGFzc05hbWVGb3JPYmplY3QodGhpcykpOwotCQlwYXJlbnQuc2V0U2l6ZSg1MDAsIDEwMCk7Ci0JCUNvbXBvc2l0ZSBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQltYWluUGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQlDb250cm9sIHdpZGdldFBhbmVsID0gdGhpcy5idWlsZFdpZGdldFBhbmVsKG1haW5QYW5lbCk7Ci0JCXRoaXMuYnVpbGRDb250cm9sUGFuZWwobWFpblBhbmVsLCB3aWRnZXRQYW5lbCk7Ci0JCXJldHVybiBtYWluUGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkV2lkZ2V0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCi0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtMzUpOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQotCQlCdXR0b24gZW5hYmxlZENvbWJvQm94Q2hlY2tCb3ggPSB0aGlzLmJ1aWxkRW5hYmxlZENvbWJvQm94Q2hlY2tCb3gocGFuZWwpOwotCQlTV1RUb29scy5iaW5kKHRoaXMuZW5hYmxlZEhvbGRlciwgZW5hYmxlZENvbWJvQm94Q2hlY2tCb3gpOwotCi0JCUJ1dHRvbiB2aXNpYmxlQ29tYm9Cb3hDaGVja0JveCA9IHRoaXMuYnVpbGRWaXNpYmxlQ29tYm9Cb3hDaGVja0JveChwYW5lbCk7Ci0JCVNXVFRvb2xzLmJpbmQodGhpcy52aXNpYmxlSG9sZGVyLCB2aXNpYmxlQ29tYm9Cb3hDaGVja0JveCk7Ci0KLQkJTGFiZWwgY29tYm9Cb3hMYWJlbCA9IHRoaXMuYnVpbGRDb21ib0JveExhYmVsKHBhbmVsKTsKLQkJQ29tYm8gY29tYm9Cb3ggPSB0aGlzLmJ1aWxkQ29tYm9Cb3gocGFuZWwpOwotCQlTV1RUb29scy5iaW5kKHRoaXMubGlzdEhvbGRlciwgdGhpcy5saXN0U2VsZWN0aW9uSG9sZGVyLCBjb21ib0JveCk7Ci0JCVNXVFRvb2xzLmNvbnRyb2xFbmFibGVkU3RhdGUodGhpcy5lbmFibGVkSG9sZGVyLCBjb21ib0JveExhYmVsLCBjb21ib0JveCk7Ci0JCVNXVFRvb2xzLmNvbnRyb2xWaXNpYmxlU3RhdGUodGhpcy52aXNpYmxlSG9sZGVyLCBjb21ib0JveExhYmVsLCBjb21ib0JveCk7Ci0KLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgQnV0dG9uIGJ1aWxkRW5hYmxlZENvbWJvQm94Q2hlY2tCb3goQ29tcG9zaXRlIHBhcmVudCkgewotCQlCdXR0b24gY2hlY2tCb3ggPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULkNIRUNLKTsKLQkJY2hlY2tCb3guc2V0VGV4dCgiZW5hYmxlZCIpOwotCQlyZXR1cm4gY2hlY2tCb3g7Ci0JfQotCi0JcHJpdmF0ZSBCdXR0b24gYnVpbGRWaXNpYmxlQ29tYm9Cb3hDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQljaGVja0JveC5zZXRUZXh0KCJ2aXNpYmxlIik7Ci0JCXJldHVybiBjaGVja0JveDsKLQl9Ci0KLQlwcml2YXRlIExhYmVsIGJ1aWxkQ29tYm9Cb3hMYWJlbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOwotCQlsYWJlbC5zZXRUZXh0KCJsaXN0OiIpOwotCQlyZXR1cm4gbGFiZWw7Ci0JfQotCi0JcHJpdmF0ZSBDb21ibyBidWlsZENvbWJvQm94KENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJcmV0dXJuIG5ldyBDb21ibyhwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENvbnRyb2xQYW5lbChDb21wb3NpdGUgcGFyZW50LCBDb250cm9sIHdpZGdldFBhbmVsKSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQod2lkZ2V0UGFuZWwpOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkQ2xlYXJFbmFibGVkTW9kZWxCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkQ2xlYXJWaXNpYmxlTW9kZWxCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkTnVsbFNlbGVjdGlvbk1vZGVsQnV0dG9uKHBhbmVsKTsKLQkJdGhpcy5idWlsZE5leHRCdXR0b24ocGFuZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENsZWFyRW5hYmxlZE1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZENsZWFyRW5hYmxlZE1vZGVsQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENsZWFyRW5hYmxlZE1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiY2xlYXIgZW5hYmxlZCBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUJvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QudGhpcy5jbGVhckVuYWJsZWRNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNsZWFyIGVuYWJsZWQgbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBjbGVhckVuYWJsZWRNb2RlbCgpIHsKLQkJdGhpcy5lbmFibGVkSG9sZGVyLnNldFZhbHVlKG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENsZWFyVmlzaWJsZU1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZENsZWFyVmlzaWJsZU1vZGVsQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENsZWFyVmlzaWJsZU1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiY2xlYXIgdmlzaWJsZSBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUJvb2xlYW5TdGF0ZUNvbnRyb2xsZXJVSVRlc3QudGhpcy5jbGVhclZpc2libGVNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNsZWFyIHZpc2libGUgbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBjbGVhclZpc2libGVNb2RlbCgpIHsKLQkJdGhpcy52aXNpYmxlSG9sZGVyLnNldFZhbHVlKG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZE51bGxTZWxlY3Rpb25Nb2RlbEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGROdWxsU2VsZWN0aW9uTW9kZWxBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkTnVsbFNlbGVjdGlvbk1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigibnVsbCBzZWxlY3Rpb24gbW9kZWwiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlCb29sZWFuU3RhdGVDb250cm9sbGVyVUlUZXN0LnRoaXMuc2V0U2VsZWN0aW9uTW9kZWxOdWxsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgibnVsbCBzZWxlY3Rpb24gbW9kZWwiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBzZXRTZWxlY3Rpb25Nb2RlbE51bGwoKSB7Ci0JCXRoaXMubGlzdFNlbGVjdGlvbkhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGROZXh0QnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZE5leHRBQ0koKS5maWxsKHBhcmVudCk7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkTmV4dEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oIm5leHQiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlCb29sZWFuU3RhdGVDb250cm9sbGVyVUlUZXN0LnRoaXMubmV4dCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoIm5leHQiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBuZXh0KCkgewotCQl0aGlzLmxpc3RTZWxlY3Rpb25Ib2xkZXIuc2V0VmFsdWUodGhpcy5nZXROZXh0TGlzdFNlbGVjdGlvbigpKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXROZXh0TGlzdFNlbGVjdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMubGlzdEhvbGRlci5nZXQodGhpcy5nZXROZXh0TGlzdFNlbGVjdGlvbkluZGV4KCkpOwotCX0KLQotCXByaXZhdGUgaW50IGdldE5leHRMaXN0U2VsZWN0aW9uSW5kZXgoKSB7Ci0JCWludCBpbmRleCA9IHRoaXMuZ2V0TGlzdFNlbGVjdGlvbkluZGV4KCk7Ci0JCWlmIChpbmRleCA9PSAtMSkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJaW5kZXgrKzsKLQkJcmV0dXJuIChpbmRleCA9PSB0aGlzLmxpc3RIb2xkZXIuc2l6ZSgpKSA/IDAgOiBpbmRleDsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRMaXN0U2VsZWN0aW9uSW5kZXgoKSB7Ci0JCXJldHVybiB0aGlzLmxpc3RIb2xkZXIuaW5kZXhPZih0aGlzLmdldExpc3RTZWxlY3Rpb24oKSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0TGlzdFNlbGVjdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMubGlzdFNlbGVjdGlvbkhvbGRlci5nZXRWYWx1ZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWxpdHkvc3d0L0NoZWNrQm94TW9kZWxCaW5kaW5nVUlUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbGl0eS9zd3QvQ2hlY2tCb3hNb2RlbEJpbmRpbmdVSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxOWI2Ny4uMDAwMDAwMAotLS0gYS9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbGl0eS9zd3QvQ2hlY2tCb3hNb2RlbEJpbmRpbmdVSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsaXR5LnN3dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkFwcGxpY2F0aW9uV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWxpdHkuc3d0LlNXVFRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkNsYXNzVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwuQWJzdHJhY3RNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5Qcm9wZXJ0eUFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLlByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Xcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotLyoqCi0gKiBQbGF5IGFyb3VuZCB3aXRoIGEgc2V0IG9mIGNoZWNrIGJveGVzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBjbGFzcyBDaGVja0JveE1vZGVsQmluZGluZ1VJVGVzdAotCWV4dGVuZHMgQXBwbGljYXRpb25XaW5kb3cKLXsKLQlwcml2YXRlIGZpbmFsIFRlc3RNb2RlbCB0ZXN0TW9kZWw7Ci0JcHJpdmF0ZSBmaW5hbCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxUZXN0TW9kZWw+IHRlc3RNb2RlbEhvbGRlcjsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+IGZsYWcxSG9sZGVyOwotCXByaXZhdGUgZmluYWwgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gZmxhZzJIb2xkZXI7Ci0JcHJpdmF0ZSBmaW5hbCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBub3RGbGFnMkhvbGRlcjsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCQlXaW5kb3cgd2luZG93ID0gbmV3IENoZWNrQm94TW9kZWxCaW5kaW5nVUlUZXN0KGFyZ3MpOwotCQl3aW5kb3cuc2V0QmxvY2tPbk9wZW4odHJ1ZSk7Ci0JCXdpbmRvdy5vcGVuKCk7Ci0JCURpc3BsYXkuZ2V0Q3VycmVudCgpLmRpc3Bvc2UoKTsKLQkJU3lzdGVtLmV4aXQoMCk7Ci0JfQotCi0JcHJpdmF0ZSBDaGVja0JveE1vZGVsQmluZGluZ1VJVGVzdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU3RyaW5nW10gYXJncykgewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy50ZXN0TW9kZWwgPSBuZXcgVGVzdE1vZGVsKHRydWUsIHRydWUpOwotCQl0aGlzLnRlc3RNb2RlbEhvbGRlciA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8VGVzdE1vZGVsPih0aGlzLnRlc3RNb2RlbCk7Ci0JCXRoaXMuZmxhZzFIb2xkZXIgPSB0aGlzLmJ1aWxkRmxhZzFIb2xkZXIodGhpcy50ZXN0TW9kZWxIb2xkZXIpOwotCQl0aGlzLmZsYWcySG9sZGVyID0gdGhpcy5idWlsZEZsYWcySG9sZGVyKHRoaXMudGVzdE1vZGVsSG9sZGVyKTsKLQkJdGhpcy5ub3RGbGFnMkhvbGRlciA9IHRoaXMuYnVpbGROb3RGbGFnMkhvbGRlcih0aGlzLnRlc3RNb2RlbEhvbGRlcik7Ci0JfQotCi0JcHJpdmF0ZSBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxCb29sZWFuPiBidWlsZEZsYWcxSG9sZGVyKFByb3BlcnR5VmFsdWVNb2RlbDxUZXN0TW9kZWw+IHN1YmplY3RIb2xkZXIpIHsKLQkJcmV0dXJuIG5ldyBQcm9wZXJ0eUFzcGVjdEFkYXB0ZXI8VGVzdE1vZGVsLCBCb29sZWFuPihzdWJqZWN0SG9sZGVyLCBUZXN0TW9kZWwuRkxBRzFfUFJPUEVSVFkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIEJvb2xlYW4gYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIEJvb2xlYW4udmFsdWVPZih0aGlzLnN1YmplY3QuaXNGbGFnMSgpKTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgc2V0VmFsdWVfKEJvb2xlYW4gdmFsdWUpIHsKLQkJCQl0aGlzLnN1YmplY3Quc2V0RmxhZzEodmFsdWUuYm9vbGVhblZhbHVlKCkpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8Qm9vbGVhbj4gYnVpbGRGbGFnMkhvbGRlcihQcm9wZXJ0eVZhbHVlTW9kZWw8VGVzdE1vZGVsPiBzdWJqZWN0SG9sZGVyKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydHlBc3BlY3RBZGFwdGVyPFRlc3RNb2RlbCwgQm9vbGVhbj4oc3ViamVjdEhvbGRlciwgVGVzdE1vZGVsLkZMQUcyX1BST1BFUlRZKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBCb29sZWFuIGJ1aWxkVmFsdWVfKCkgewotCQkJCXJldHVybiBCb29sZWFuLnZhbHVlT2YodGhpcy5zdWJqZWN0LmlzRmxhZzIoKSk7Ci0JCQl9Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhCb29sZWFuIHZhbHVlKSB7Ci0JCQkJdGhpcy5zdWJqZWN0LnNldEZsYWcyKHZhbHVlLmJvb2xlYW5WYWx1ZSgpKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPEJvb2xlYW4+IGJ1aWxkTm90RmxhZzJIb2xkZXIoUHJvcGVydHlWYWx1ZU1vZGVsPFRlc3RNb2RlbD4gc3ViamVjdEhvbGRlcikgewotCQlyZXR1cm4gbmV3IFByb3BlcnR5QXNwZWN0QWRhcHRlcjxUZXN0TW9kZWwsIEJvb2xlYW4+KHN1YmplY3RIb2xkZXIsIFRlc3RNb2RlbC5OT1RfRkxBRzJfUFJPUEVSVFkpIHsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIEJvb2xlYW4gYnVpbGRWYWx1ZV8oKSB7Ci0JCQkJcmV0dXJuIEJvb2xlYW4udmFsdWVPZih0aGlzLnN1YmplY3QuaXNOb3RGbGFnMigpKTsKLQkJCX0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIHZvaWQgc2V0VmFsdWVfKEJvb2xlYW4gdmFsdWUpIHsKLQkJCQl0aGlzLnN1YmplY3Quc2V0Tm90RmxhZzIodmFsdWUuYm9vbGVhblZhbHVlKCkpOwotCQkJfQotCQl9OwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJKChTaGVsbCkgcGFyZW50KS5zZXRUZXh0KENsYXNzVG9vbHMuc2hvcnRDbGFzc05hbWVGb3JPYmplY3QodGhpcykpOwotCQlwYXJlbnQuc2V0U2l6ZSg0MDAsIDEwMCk7Ci0JCUNvbXBvc2l0ZSBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQltYWluUGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQlDb250cm9sIGNoZWNrQm94UGFuZWwgPSB0aGlzLmJ1aWxkQ2hlY2tCb3hQYW5lbChtYWluUGFuZWwpOwotCQl0aGlzLmJ1aWxkQ29udHJvbFBhbmVsKG1haW5QYW5lbCwgY2hlY2tCb3hQYW5lbCk7Ci0JCXJldHVybiBtYWluUGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkQ2hlY2tCb3hQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC0zNSk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkRmxhZzFDaGVja0JveChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRGbGFnMkNoZWNrQm94KHBhbmVsKTsKLQkJdGhpcy5idWlsZE5vdEZsYWcyQ2hlY2tCb3gocGFuZWwpOwotCQl0aGlzLmJ1aWxkVW5hdHRhY2hlZENoZWNrQm94KHBhbmVsKTsKLQotCQlyZXR1cm4gcGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkRmxhZzFDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQljaGVja0JveC5zZXRUZXh0KCJmbGFnIDEiKTsKLQkJU1dUVG9vbHMuYmluZCh0aGlzLmZsYWcxSG9sZGVyLCBjaGVja0JveCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkRmxhZzJDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQljaGVja0JveC5zZXRUZXh0KCJmbGFnIDIiKTsKLQkJU1dUVG9vbHMuYmluZCh0aGlzLmZsYWcySG9sZGVyLCBjaGVja0JveCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkTm90RmxhZzJDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQljaGVja0JveC5zZXRUZXh0KCJub3QgZmxhZyAyIik7Ci0JCVNXVFRvb2xzLmJpbmQodGhpcy5ub3RGbGFnMkhvbGRlciwgY2hlY2tCb3gpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFVuYXR0YWNoZWRDaGVja0JveChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUJ1dHRvbiBjaGVja0JveCA9IG5ldyBCdXR0b24ocGFyZW50LCBTV1QuQ0hFQ0spOwotCQljaGVja0JveC5zZXRUZXh0KCJ1bmF0dGFjaGVkIik7Ci0JCWNoZWNrQm94LmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMuYnVpbGRVbmF0dGFjaGVkU2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0JfQotCi0JcHJpdmF0ZSBTZWxlY3Rpb25MaXN0ZW5lciBidWlsZFVuYXR0YWNoZWRTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJcmV0dXJuIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJ1bmF0dGFjaGVkIGRlZmF1bHQgc2VsZWN0ZWQ6ICIgKyBlKTsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInVuYXR0YWNoZWQgc2VsZWN0ZWQ6ICIgKyBlKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDb250cm9sUGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgQ29udHJvbCBjaGVja0JveFBhbmVsKSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY2hlY2tCb3hQYW5lbCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJCWZkLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEZpbGxMYXlvdXQoKSk7Ci0JCXRoaXMuYnVpbGRGbGlwRmxhZzFCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkTm90RmxhZzJUb2dnbGVCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkQ2xlYXJNb2RlbEJ1dHRvbihwYW5lbCk7Ci0JCXRoaXMuYnVpbGRSZXN0b3JlTW9kZWxCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkUHJpbnRNb2RlbEJ1dHRvbihwYW5lbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkRmxpcEZsYWcxQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZEZsaXBGbGFnMUFDSSgpLmZpbGwocGFyZW50KTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRGbGlwRmxhZzFBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJmbGlwIGZsYWcgMSIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUNoZWNrQm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMuZmxpcEZsYWcxKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiZmxpcCBmbGFnIDEiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0Jdm9pZCBmbGlwRmxhZzEoKSB7Ci0JCXRoaXMudGVzdE1vZGVsLnNldEZsYWcxKCAhIHRoaXMudGVzdE1vZGVsLmlzRmxhZzEoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkTm90RmxhZzJUb2dnbGVCdXR0b24oQ29tcG9zaXRlIHBhcmVudCkgewotCQlCdXR0b24gY2hlY2tCb3ggPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlRPR0dMRSk7Ci0JCWNoZWNrQm94LnNldFRleHQoIm5vdCBmbGFnIDIiKTsKLQkJU1dUVG9vbHMuYmluZCh0aGlzLm5vdEZsYWcySG9sZGVyLCBjaGVja0JveCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQ2xlYXJNb2RlbEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRDbGVhck1vZGVsQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENsZWFyTW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJjbGVhciBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUNoZWNrQm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMuY2xlYXJNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNsZWFyIG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgY2xlYXJNb2RlbCgpIHsKLQkJdGhpcy50ZXN0TW9kZWxIb2xkZXIuc2V0VmFsdWUobnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUmVzdG9yZU1vZGVsQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJdGhpcy5idWlsZFJlc3RvcmVNb2RlbEFDSSgpLmZpbGwocGFyZW50KTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZXN0b3JlTW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJyZXN0b3JlIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJQ2hlY2tCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5yZXN0b3JlTW9kZWwoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJyZXN0b3JlIG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgcmVzdG9yZU1vZGVsKCkgewotCQl0aGlzLnRlc3RNb2RlbEhvbGRlci5zZXRWYWx1ZSh0aGlzLnRlc3RNb2RlbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUHJpbnRNb2RlbEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRQcmludE1vZGVsQUNJKCkuZmlsbChwYXJlbnQpOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZFByaW50TW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJwcmludCBtb2RlbCIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUNoZWNrQm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucHJpbnRNb2RlbCgpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoInByaW50IG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXZvaWQgcHJpbnRNb2RlbCgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJmbGFnIDE6ICIgKyB0aGlzLnRlc3RNb2RlbC5pc0ZsYWcxKCkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZsYWcgMjogIiArIHRoaXMudGVzdE1vZGVsLmlzRmxhZzIoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigibm90IGZsYWcgMjogIiArIHRoaXMudGVzdE1vZGVsLmlzTm90RmxhZzIoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqIik7Ci0JfQotCi0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RNb2RlbCBleHRlbmRzIEFic3RyYWN0TW9kZWwgewotCQlwcml2YXRlIGJvb2xlYW4gZmxhZzE7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHMV9QUk9QRVJUWSA9ICJmbGFnMSI7Ci0JCXByaXZhdGUgYm9vbGVhbiBmbGFnMjsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUcyX1BST1BFUlRZID0gImZsYWcyIjsKLQkJcHJpdmF0ZSBib29sZWFuIG5vdEZsYWcyOwotCQkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9UX0ZMQUcyX1BST1BFUlRZID0gIm5vdEZsYWcyIjsKLQkKLQkJcHVibGljIFRlc3RNb2RlbChib29sZWFuIGZsYWcxLCBib29sZWFuIGZsYWcyKSB7Ci0JCQl0aGlzLmZsYWcxID0gZmxhZzE7Ci0JCQl0aGlzLmZsYWcyID0gZmxhZzI7Ci0JCQl0aGlzLm5vdEZsYWcyID0gISBmbGFnMjsKLQkJfQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZsYWcxKCkgewotCQkJcmV0dXJuIHRoaXMuZmxhZzE7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0RmxhZzEoYm9vbGVhbiBmbGFnMSkgewotCQkJYm9vbGVhbiBvbGQgPSB0aGlzLmZsYWcxOwotCQkJdGhpcy5mbGFnMSA9IGZsYWcxOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKEZMQUcxX1BST1BFUlRZLCBvbGQsIGZsYWcxKTsKLQkJfQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZsYWcyKCkgewotCQkJcmV0dXJuIHRoaXMuZmxhZzI7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0RmxhZzIoYm9vbGVhbiBmbGFnMikgewotCQkJYm9vbGVhbiBvbGQgPSB0aGlzLmZsYWcyOwotCQkJdGhpcy5mbGFnMiA9IGZsYWcyOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKEZMQUcyX1BST1BFUlRZLCBvbGQsIGZsYWcyKTsKLQkKLQkJCW9sZCA9IHRoaXMubm90RmxhZzI7Ci0JCQl0aGlzLm5vdEZsYWcyID0gISBmbGFnMjsKLQkJCXRoaXMuZmlyZVByb3BlcnR5Q2hhbmdlZChOT1RfRkxBRzJfUFJPUEVSVFksIG9sZCwgdGhpcy5ub3RGbGFnMik7Ci0JCX0KLQkJcHVibGljIGJvb2xlYW4gaXNOb3RGbGFnMigpIHsKLQkJCXJldHVybiB0aGlzLm5vdEZsYWcyOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldE5vdEZsYWcyKGJvb2xlYW4gbm90RmxhZzIpIHsKLQkJCXRoaXMuc2V0RmxhZzIoICEgbm90RmxhZzIpOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkJcmV0dXJuICJUZXN0TW9kZWwoIiArIHRoaXMuaXNGbGFnMSgpICsgIiAtICIgKyB0aGlzLmlzRmxhZzIoKSArICIpIjsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWxpdHkvc3d0L0Ryb3BEb3duTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC5qYXZhIGIvanBhL3Rlc3RzL29yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanB0L3VpL3Rlc3RzL2ludGVybmFsL3V0aWxpdHkvc3d0L0Ryb3BEb3duTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjEzNDZjLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsaXR5L3N3dC9Ecm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCwgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24KLSAqIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBPcmFjbGUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpwdC51aS50ZXN0cy5pbnRlcm5hbC51dGlsaXR5LnN3dDsKLQotaW1wb3J0IGphdmEudGV4dC5Db2xsYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuQXBwbGljYXRpb25XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudWkuaW50ZXJuYWwudXRpbGl0eS5zd3QuU1dUVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ2xhc3NUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLkxpc3RBc3BlY3RBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlByb3BlcnR5QXNwZWN0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5pbnRlcm5hbC5tb2RlbC52YWx1ZS5TaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU29ydGVkTGlzdFZhbHVlTW9kZWxXcmFwcGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLkxpc3RWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIFBsYXkgYXJvdW5kIHdpdGggYSBzZXQgb2YgcmVhZC1vbmx5IGNvbWJvLWJveGVzLgotICovCi1AU3VwcHJlc3NXYXJuaW5ncygibmxzIikKLXB1YmxpYyBjbGFzcyBEcm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QKLQlleHRlbmRzIEFwcGxpY2F0aW9uV2luZG93Ci17Ci0JZmluYWwgVGFza0xpc3QgdGFza0xpc3Q7Ci0JcHJpdmF0ZSBmaW5hbCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxUYXNrTGlzdD4gdGFza0xpc3RIb2xkZXI7Ci0JcHJpdmF0ZSBUZXh0IHRhc2tUZXh0RmllbGQ7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJV2luZG93IHdpbmRvdyA9IG5ldyBEcm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QoYXJncyk7Ci0JCXdpbmRvdy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLQkJd2luZG93Lm9wZW4oKTsKLQkJRGlzcGxheS5nZXRDdXJyZW50KCkuZGlzcG9zZSgpOwotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci0KLQlwcml2YXRlIERyb3BEb3duTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU3RyaW5nW10gYXJncykgewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy50YXNrTGlzdCA9IG5ldyBUYXNrTGlzdCgpOwotCQl0aGlzLnRhc2tMaXN0SG9sZGVyID0gbmV3IFNpbXBsZVByb3BlcnR5VmFsdWVNb2RlbDxUYXNrTGlzdD4odGhpcy50YXNrTGlzdCk7Ci0JCXRoaXMudGFza0xpc3QuYWRkVGFzaygic3dpbSIpOwotCQl0aGlzLnRhc2tMaXN0LmFkZFRhc2soImJpa2UiKTsKLQkJdGhpcy50YXNrTGlzdC5hZGRUYXNrKCJydW4iKTsKLQkJVGFzayByZXN0ID0gdGhpcy50YXNrTGlzdC5hZGRUYXNrKCJyZXN0Iik7Ci0JCXRoaXMudGFza0xpc3QuYWRkVGFzaygicmVwZWF0Iik7Ci0JCXRoaXMudGFza0xpc3Quc2V0UHJpb3JpdHlUYXNrKHJlc3QpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJKChTaGVsbCkgcGFyZW50KS5zZXRUZXh0KENsYXNzVG9vbHMuc2hvcnRDbGFzc05hbWVGb3JPYmplY3QodGhpcykpOwotCQlwYXJlbnQuc2V0U2l6ZSg4MDAsIDMwMCk7Ci0JCUNvbXBvc2l0ZSBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQltYWluUGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQlDb250cm9sIHRhc2tMaXN0UGFuZWwgPSB0aGlzLmJ1aWxkVGFza0xpc3RQYW5lbChtYWluUGFuZWwpOwotCQl0aGlzLmJ1aWxkQ29udHJvbFBhbmVsKG1haW5QYW5lbCwgdGFza0xpc3RQYW5lbCk7Ci0JCXJldHVybiBtYWluUGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkVGFza0xpc3RQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC0zMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkVGFza0xpc3RQYW5lbChwYW5lbCwgZmFsc2UpOyAgLy8gZmFsc2UgPSBuYXRpdmUgKENvbWJvKQotCQl0aGlzLmJ1aWxkVGFza0xpc3RQYW5lbChwYW5lbCwgdHJ1ZSk7ICAvLyB0cnVlID0gY3VzdG9tIChDQ29tYm8pCi0KLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgQ29udHJvbCBidWlsZFRhc2tMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgYm9vbGVhbiBjdXN0b20pIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGN1c3RvbSA/IDUwIDogMCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoY3VzdG9tID8gMTAwIDogNTApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKLQkJdGhpcy5idWlsZFByaW1pdGl2ZVRhc2tMaXN0UGFuZWwocGFuZWwsIGN1c3RvbSk7Ci0JCXRoaXMuYnVpbGRPYmplY3RUYXNrTGlzdFBhbmVsKHBhbmVsLCBjdXN0b20pOwotCi0JCXJldHVybiBwYW5lbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRQcmltaXRpdmVUYXNrTGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkVW5zb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwocGFuZWwsIGN1c3RvbSk7Ci0JCXRoaXMuYnVpbGRTdGFuZGFyZFNvcnRlZFByaW1pdGl2ZUxpc3RQYW5lbChwYW5lbCwgY3VzdG9tKTsKLQkJdGhpcy5idWlsZEN1c3RvbVNvcnRlZFByaW1pdGl2ZUxpc3RQYW5lbChwYW5lbCwgY3VzdG9tKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRPYmplY3RUYXNrTGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJCWZkLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEZpbGxMYXlvdXQoKSk7Ci0JCXRoaXMuYnVpbGRVbnNvcnRlZE9iamVjdExpc3RQYW5lbChwYW5lbCwgY3VzdG9tKTsKLQkJdGhpcy5idWlsZFN0YW5kYXJkU29ydGVkT2JqZWN0TGlzdFBhbmVsKHBhbmVsLCBjdXN0b20pOwotCQl0aGlzLmJ1aWxkQ3VzdG9tU29ydGVkT2JqZWN0TGlzdFBhbmVsKHBhbmVsLCBjdXN0b20pOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFVuc29ydGVkUHJpbWl0aXZlTGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCVN0cmluZyBsYWJlbCA9ICJwcmltaXRpdmUgdW5zb3J0ZWQiOwotCQlpZiAoY3VzdG9tKSBsYWJlbCArPSAiIChjdXN0b20pIjsKLQkJdGhpcy5idWlsZENvbWJvQm94UGFuZWwocGFyZW50LCBsYWJlbCwgdGhpcy5idWlsZFVuc29ydGVkUHJpbWl0aXZlTGlzdE1vZGVsKCksIHRoaXMuYnVpbGRQcmlvcml0eVRhc2tOYW1lQWRhcHRlcigpLCBjdXN0b20pOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFN0YW5kYXJkU29ydGVkUHJpbWl0aXZlTGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCVN0cmluZyBsYWJlbCA9ICJwcmltaXRpdmUgc29ydGVkIjsKLQkJaWYgKGN1c3RvbSkgbGFiZWwgKz0gIiAoY3VzdG9tKSI7Ci0JCXRoaXMuYnVpbGRDb21ib0JveFBhbmVsKHBhcmVudCwgbGFiZWwsIHRoaXMuYnVpbGRTdGFuZGFyZFNvcnRlZFByaW1pdGl2ZUxpc3RNb2RlbCgpLCB0aGlzLmJ1aWxkUHJpb3JpdHlUYXNrTmFtZUFkYXB0ZXIoKSwgY3VzdG9tKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDdXN0b21Tb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgYm9vbGVhbiBjdXN0b20pIHsKLQkJU3RyaW5nIGxhYmVsID0gInByaW1pdGl2ZSByZXZlcnNlIHNvcnRlZCI7Ci0JCWlmIChjdXN0b20pIGxhYmVsICs9ICIgKGN1c3RvbSkiOwotCQl0aGlzLmJ1aWxkQ29tYm9Cb3hQYW5lbChwYXJlbnQsIGxhYmVsLCB0aGlzLmJ1aWxkQ3VzdG9tU29ydGVkUHJpbWl0aXZlTGlzdE1vZGVsKCksIHRoaXMuYnVpbGRQcmlvcml0eVRhc2tOYW1lQWRhcHRlcigpLCBjdXN0b20pOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZFVuc29ydGVkT2JqZWN0TGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCVN0cmluZyBsYWJlbCA9ICJvYmplY3QgdW5zb3J0ZWQiOwotCQlpZiAoY3VzdG9tKSBsYWJlbCArPSAiIChjdXN0b20pIjsKLQkJdGhpcy5idWlsZENvbWJvQm94UGFuZWwocGFyZW50LCBsYWJlbCwgdGhpcy5idWlsZFVuc29ydGVkT2JqZWN0TGlzdE1vZGVsKCksIHRoaXMuYnVpbGRQcmlvcml0eVRhc2tBZGFwdGVyKCksIGN1c3RvbSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkU3RhbmRhcmRTb3J0ZWRPYmplY3RMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgYm9vbGVhbiBjdXN0b20pIHsKLQkJU3RyaW5nIGxhYmVsID0gIm9iamVjdCBzb3J0ZWQiOwotCQlpZiAoY3VzdG9tKSBsYWJlbCArPSAiIChjdXN0b20pIjsKLQkJdGhpcy5idWlsZENvbWJvQm94UGFuZWwocGFyZW50LCBsYWJlbCwgdGhpcy5idWlsZFN0YW5kYXJkU29ydGVkT2JqZWN0TGlzdE1vZGVsKCksIHRoaXMuYnVpbGRQcmlvcml0eVRhc2tBZGFwdGVyKCksIGN1c3RvbSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQ3VzdG9tU29ydGVkT2JqZWN0TGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIGJvb2xlYW4gY3VzdG9tKSB7Ci0JCVN0cmluZyBsYWJlbCA9ICJvYmplY3QgcmV2ZXJzZSBzb3J0ZWQiOwotCQlpZiAoY3VzdG9tKSBsYWJlbCArPSAiIChjdXN0b20pIjsKLQkJdGhpcy5idWlsZENvbWJvQm94UGFuZWwocGFyZW50LCBsYWJlbCwgdGhpcy5idWlsZEN1c3RvbVNvcnRlZE9iamVjdExpc3RNb2RlbCgpLCB0aGlzLmJ1aWxkUHJpb3JpdHlUYXNrQWRhcHRlcigpLCBjdXN0b20pOwotCX0KLQotCXByaXZhdGUgTGlzdFZhbHVlTW9kZWw8U3RyaW5nPiBidWlsZFVuc29ydGVkUHJpbWl0aXZlTGlzdE1vZGVsKCkgewotCQlyZXR1cm4gdGhpcy5idWlsZFByaW1pdGl2ZVRhc2tMaXN0QWRhcHRlcigpOwotCX0KLQotCXByaXZhdGUgTGlzdFZhbHVlTW9kZWw8U3RyaW5nPiBidWlsZFN0YW5kYXJkU29ydGVkUHJpbWl0aXZlTGlzdE1vZGVsKCkgewotCQlyZXR1cm4gbmV3IFNvcnRlZExpc3RWYWx1ZU1vZGVsV3JhcHBlcjxTdHJpbmc+KHRoaXMuYnVpbGRQcmltaXRpdmVUYXNrTGlzdEFkYXB0ZXIoKSk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkQ3VzdG9tU29ydGVkUHJpbWl0aXZlTGlzdE1vZGVsKCkgewotCQlyZXR1cm4gbmV3IFNvcnRlZExpc3RWYWx1ZU1vZGVsV3JhcHBlcjxTdHJpbmc+KHRoaXMuYnVpbGRQcmltaXRpdmVUYXNrTGlzdEFkYXB0ZXIoKSwgdGhpcy5idWlsZEN1c3RvbVN0cmluZ0NvbXBhcmF0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxUYXNrPiBidWlsZFVuc29ydGVkT2JqZWN0TGlzdE1vZGVsKCkgewotCQlyZXR1cm4gdGhpcy5idWlsZE9iamVjdFRhc2tMaXN0QWRhcHRlcigpOwotCX0KLQotCXByaXZhdGUgTGlzdFZhbHVlTW9kZWw8VGFzaz4gYnVpbGRTdGFuZGFyZFNvcnRlZE9iamVjdExpc3RNb2RlbCgpIHsKLQkJcmV0dXJuIG5ldyBTb3J0ZWRMaXN0VmFsdWVNb2RlbFdyYXBwZXI8VGFzaz4odGhpcy5idWlsZE9iamVjdFRhc2tMaXN0QWRhcHRlcigpKTsKLQl9Ci0KLQlwcml2YXRlIExpc3RWYWx1ZU1vZGVsPFRhc2s+IGJ1aWxkQ3VzdG9tU29ydGVkT2JqZWN0TGlzdE1vZGVsKCkgewotCQlyZXR1cm4gbmV3IFNvcnRlZExpc3RWYWx1ZU1vZGVsV3JhcHBlcjxUYXNrPih0aGlzLmJ1aWxkT2JqZWN0VGFza0xpc3RBZGFwdGVyKCksIHRoaXMuYnVpbGRDdXN0b21UYXNrQ29tcGFyYXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIDxFPiB2b2lkIGJ1aWxkQ29tYm9Cb3hQYW5lbChDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwsIExpc3RWYWx1ZU1vZGVsPEU+IG1vZGVsLCBXcml0YWJsZVByb3BlcnR5VmFsdWVNb2RlbDxFPiBzZWxlY3RlZEl0ZW1Nb2RlbCwgYm9vbGVhbiBjdXN0b20pIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCi0JCUxhYmVsIGNvbWJvQm94TGFiZWwgPSBuZXcgTGFiZWwocGFuZWwsIFNXVC5MRUZUIHwgU1dULlZFUlRJQ0FMKTsKLQkJY29tYm9Cb3hMYWJlbC5zZXRUZXh0KGxhYmVsKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAzKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUpOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJY29tYm9Cb3hMYWJlbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlDb250cm9sIGNvbWJvQm94ID0gdGhpcy5idWlsZENvbWJvQm94KHBhbmVsLCBjdXN0b20pOwotCQlmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbWJvQm94TGFiZWwpOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJY29tYm9Cb3guc2V0TGF5b3V0RGF0YShmZCk7Ci0JCWlmIChjdXN0b20pIHsKLQkJCVNXVFRvb2xzLmJpbmQobW9kZWwsIHNlbGVjdGVkSXRlbU1vZGVsLCAoQ0NvbWJvKSBjb21ib0JveCk7ICAvLyB1c2UgI3RvU3RyaW5nKCkKLQkJfSBlbHNlIHsKLQkJCVNXVFRvb2xzLmJpbmQobW9kZWwsIHNlbGVjdGVkSXRlbU1vZGVsLCAoQ29tYm8pIGNvbWJvQm94KTsgIC8vIHVzZSAjdG9TdHJpbmcoKQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkQ29tYm9Cb3goQ29tcG9zaXRlIHBhcmVudCwgYm9vbGVhbiBjdXN0b20pIHsKLQkJaW50IHN0eWxlID0gU1dULlJFQURfT05MWTsKLQkJcmV0dXJuIGN1c3RvbSA/IG5ldyBDQ29tYm8ocGFyZW50LCBzdHlsZSkgOiBuZXcgQ29tYm8ocGFyZW50LCBzdHlsZSk7Ci0JfQotCi0JcHJpdmF0ZSBDb21wYXJhdG9yPFN0cmluZz4gYnVpbGRDdXN0b21TdHJpbmdDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgczEsIFN0cmluZyBzMikgewotCQkJCXJldHVybiBzMi5jb21wYXJlVG8oczEpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgQ29tcGFyYXRvcjxUYXNrPiBidWlsZEN1c3RvbVRhc2tDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8VGFzaz4oKSB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVGFzayB0bzEsIFRhc2sgdG8yKSB7Ci0JCQkJcmV0dXJuIHRvMi5jb21wYXJlVG8odG8xKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIExpc3RWYWx1ZU1vZGVsPFN0cmluZz4gYnVpbGRQcmltaXRpdmVUYXNrTGlzdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBuZXcgTGlzdEFzcGVjdEFkYXB0ZXI8VGFza0xpc3QsIFN0cmluZz4odGhpcy50YXNrTGlzdEhvbGRlciwgVGFza0xpc3QuVEFTS19OQU1FU19MSVNUKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBMaXN0SXRlcmF0b3I8U3RyaW5nPiBsaXN0SXRlcmF0b3JfKCkgewotCQkJCXJldHVybiB0aGlzLnN1YmplY3QudGFza05hbWVzKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxUYXNrPiBidWlsZE9iamVjdFRhc2tMaXN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG5ldyBMaXN0QXNwZWN0QWRhcHRlcjxUYXNrTGlzdCwgVGFzaz4odGhpcy50YXNrTGlzdEhvbGRlciwgVGFza0xpc3QuVEFTS1NfTElTVCkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgTGlzdEl0ZXJhdG9yPFRhc2s+IGxpc3RJdGVyYXRvcl8oKSB7Ci0JCQkJcmV0dXJuIHRoaXMuc3ViamVjdC50YXNrcygpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8VGFzaz4gYnVpbGRQcmlvcml0eVRhc2tBZGFwdGVyKCkgewotCQlyZXR1cm4gbmV3IFByaW9yaXR5VGFza0FkYXB0ZXIodGhpcy50YXNrTGlzdEhvbGRlcik7Ci0JfQotCi0Jc3RhdGljIGNsYXNzIFByaW9yaXR5VGFza0FkYXB0ZXIKLQkJZXh0ZW5kcyBQcm9wZXJ0eUFzcGVjdEFkYXB0ZXI8VGFza0xpc3QsIFRhc2s+Ci0JewotCQlQcmlvcml0eVRhc2tBZGFwdGVyKFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFRhc2tMaXN0PiB0YXNrTGlzdEhvbGRlcikgewotCQkJc3VwZXIodGFza0xpc3RIb2xkZXIsIFRhc2tMaXN0LlBSSU9SSVRZX1RBU0tfUFJPUEVSVFkpOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgVGFzayBidWlsZFZhbHVlXygpIHsKLQkJCXJldHVybiB0aGlzLnN1YmplY3QuZ2V0UHJpb3JpdHlUYXNrKCk7Ci0JCX0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIHNldFZhbHVlXyhUYXNrIHZhbHVlKSB7Ci0JCQl0aGlzLnN1YmplY3Quc2V0UHJpb3JpdHlUYXNrKHZhbHVlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8U3RyaW5nPiBidWlsZFByaW9yaXR5VGFza05hbWVBZGFwdGVyKCkgewotCQlyZXR1cm4gbmV3IFByaW9yaXR5VGFza05hbWVBZGFwdGVyKHRoaXMudGFza0xpc3RIb2xkZXIpOwotCX0KLQotCXN0YXRpYyBjbGFzcyBQcmlvcml0eVRhc2tOYW1lQWRhcHRlcgotCQlleHRlbmRzIFByb3BlcnR5QXNwZWN0QWRhcHRlcjxUYXNrTGlzdCwgU3RyaW5nPgotCXsKLQkJUHJpb3JpdHlUYXNrTmFtZUFkYXB0ZXIoV3JpdGFibGVQcm9wZXJ0eVZhbHVlTW9kZWw8VGFza0xpc3Q+IHRhc2tMaXN0SG9sZGVyKSB7Ci0JCQlzdXBlcih0YXNrTGlzdEhvbGRlciwgVGFza0xpc3QuUFJJT1JJVFlfVEFTS19OQU1FX1BST1BFUlRZKTsKLQkJfQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIFN0cmluZyBidWlsZFZhbHVlXygpIHsKLQkJCXJldHVybiB0aGlzLnN1YmplY3QuZ2V0UHJpb3JpdHlUYXNrTmFtZSgpOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBzZXRWYWx1ZV8oU3RyaW5nIHZhbHVlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENvbnRyb2xQYW5lbChDb21wb3NpdGUgcGFyZW50LCBDb250cm9sIHRhc2tMaXN0UGFuZWwpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0YXNrTGlzdFBhbmVsKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKLQkJQ29udHJvbCBtaXNjID0gdGhpcy5idWlsZE1pc2NUYXNrUGFuZWwocGFuZWwpOwotCQl0aGlzLmJ1aWxkQWRkUmVtb3ZlVGFza1BhbmVsKHBhbmVsLCBtaXNjKTsKLQl9Ci0KLQkvLyBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gYXNzb2NpYXRlIGFuIEFDSSB3aXRoIGZvcm0gZGF0YT8KLQlwcml2YXRlIENvbnRyb2wgYnVpbGRNaXNjVGFza1BhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC00MDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkQ2xlYXJMaXN0QUNJKCkuZmlsbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRDbGVhck1vZGVsQUNJKCkuZmlsbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRSZXN0b3JlTW9kZWxBQ0koKS5maWxsKHBhbmVsKTsKLQkJdGhpcy5idWlsZENoYW5nZVByaW9yaXR5VGFza0FDSSgpLmZpbGwocGFuZWwpOwotCQl0aGlzLmJ1aWxkQ2xlYXJQcmlvcml0eVRhc2tBQ0koKS5maWxsKHBhbmVsKTsKLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENsZWFyTGlzdEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIGxpc3QiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlEcm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5jbGVhclRhc2tzKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiY2xlYXIgYWxsIHRoZSB0YXNrcyIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRDbGVhck1vZGVsQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiY2xlYXIgbW9kZWwiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlEcm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5jbGVhck1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiY2xlYXIgdGhlIHRhc2sgbGlzdCBtb2RlbCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZXN0b3JlTW9kZWxBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJyZXN0b3JlIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJRHJvcERvd25MaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucmVzdG9yZU1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicmVzdG9yZSB0aGUgdGFzayBsaXN0IG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENoYW5nZVByaW9yaXR5VGFza0FDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNoYW5nZSBwcmlvcml0eSIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCURyb3BEb3duTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC50aGlzLmNoYW5nZVByaW9yaXR5VGFzaygpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNoYW5nZSB0aGUgcHJpb3JpdHkgdGFzayIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRDbGVhclByaW9yaXR5VGFza0FDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIHByaW9yaXR5IiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJRHJvcERvd25MaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMuY2xlYXJQcmlvcml0eVRhc2soKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJjbGVhciB0aGUgcHJpb3JpdHkgdGFzayIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRBZGRSZW1vdmVUYXNrUGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgQ29udHJvbCBjbGVhckJ1dHRvbikgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY2xlYXJCdXR0b24pOwotCQlwYW5lbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlwYW5lbC5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7Ci0JCUNvbnRyb2wgYWRkQnV0dG9uID0gdGhpcy5idWlsZEFkZEJ1dHRvbihwYW5lbCk7Ci0JCUNvbnRyb2wgcmVtb3ZlQnV0dG9uID0gdGhpcy5idWlsZFJlbW92ZUJ1dHRvbihwYW5lbCk7Ci0JCXRoaXMuYnVpbGRUYXNrVGV4dEZpZWxkKHBhbmVsLCBhZGRCdXR0b24sIHJlbW92ZUJ1dHRvbik7Ci0JfQotCi0JLy8gaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGFzc29jaWF0ZSBhbiBBQ0kgd2l0aCBmb3JtIGRhdGE/Ci0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkQWRkQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkQWRkQUNJKCkuZmlsbChwYW5lbCk7Ci0JCXJldHVybiBwYW5lbDsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRBZGRBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJhZGQiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlEcm9wRG93bkxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5hZGRUYXNrKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgiYWRkIGEgdGFzayB3aXRoIHRoZSBuYW1lIGluIHRoZSBlbnRyeSBmaWVsZCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQkvLyBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gYXNzb2NpYXRlIGFuIEFDSSB3aXRoIGZvcm0gZGF0YT8KLQlwcml2YXRlIENvbnRyb2wgYnVpbGRSZW1vdmVCdXR0b24oQ29tcG9zaXRlIHBhcmVudCkgewotCQlDb21wb3NpdGUgcGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLTUwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQkJdGhpcy5idWlsZFJlbW92ZUFDSSgpLmZpbGwocGFuZWwpOwotCQlyZXR1cm4gcGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkUmVtb3ZlQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigicmVtb3ZlIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJRHJvcERvd25MaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucmVtb3ZlVGFzaygpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoInJlbW92ZSB0aGUgdGFzayB3aXRoIHRoZSBuYW1lIGluIHRoZSBlbnRyeSBmaWVsZCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRUYXNrVGV4dEZpZWxkKENvbXBvc2l0ZSBwYXJlbnQsIENvbnRyb2wgYWRkQnV0dG9uLCBDb250cm9sIHJlbW92ZUJ1dHRvbikgewotCQl0aGlzLnRhc2tUZXh0RmllbGQgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChhZGRCdXR0b24pOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocmVtb3ZlQnV0dG9uKTsKLQkJdGhpcy50YXNrVGV4dEZpZWxkLnNldExheW91dERhdGEoZmQpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIHRhc2tUZXh0RmllbGRUZXh0KCkgewotCQlyZXR1cm4gdGhpcy50YXNrVGV4dEZpZWxkLmdldFRleHQoKTsKLQl9Ci0KLQl2b2lkIGFkZFRhc2soKSB7Ci0JCVN0cmluZyB0YXNrVGV4dCA9IHRoaXMudGFza1RleHRGaWVsZFRleHQoKTsKLQkJaWYgKHRhc2tUZXh0Lmxlbmd0aCgpICE9IDApIHsKLQkJCXRoaXMudGFza0xpc3QuYWRkVGFzayh0YXNrVGV4dCk7Ci0JCX0KLQl9Ci0KLQl2b2lkIHJlbW92ZVRhc2soKSB7Ci0JCVN0cmluZyB0YXNrID0gdGhpcy50YXNrVGV4dEZpZWxkVGV4dCgpOwotCQlpZiAodGFzay5sZW5ndGgoKSAhPSAwKSB7Ci0JCQl0aGlzLnRhc2tMaXN0LnJlbW92ZVRhc2sodGFzayk7Ci0JCX0KLQl9Ci0KLQl2b2lkIGNsZWFyVGFza3MoKSB7Ci0JCXRoaXMudGFza0xpc3QuY2xlYXJUYXNrcygpOwotCX0KLQotCXZvaWQgY2xlYXJNb2RlbCgpIHsKLQkJdGhpcy50YXNrTGlzdEhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQl9Ci0KLQl2b2lkIHJlc3RvcmVNb2RlbCgpIHsKLQkJdGhpcy50YXNrTGlzdEhvbGRlci5zZXRWYWx1ZSh0aGlzLnRhc2tMaXN0KTsKLQl9Ci0KLQl2b2lkIGNoYW5nZVByaW9yaXR5VGFzaygpIHsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKFRhc2sgdGFzayA6IHRoaXMudGFza0xpc3QuZ2V0VGFza3MoKSkgewotCQkJaWYgKHRoaXMudGFza0xpc3QuZ2V0UHJpb3JpdHlUYXNrKCkgPT0gdGFzaykgewotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGZvdW5kKSB7Ci0JCQkJCXRoaXMudGFza0xpc3Quc2V0UHJpb3JpdHlUYXNrKHRhc2spOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0JCUl0ZXJhdG9yPFRhc2s+IHRhc2tzID0gdGhpcy50YXNrTGlzdC50YXNrcygpOwotCQlpZiAodGFza3MuaGFzTmV4dCgpKSB7Ci0JCQl0aGlzLnRhc2tMaXN0LnNldFByaW9yaXR5VGFzayh0YXNrcy5uZXh0KCkpOwotCQl9Ci0JfQotCi0Jdm9pZCBjbGVhclByaW9yaXR5VGFzaygpIHsKLQkJdGhpcy50YXNrTGlzdC5zZXRQcmlvcml0eVRhc2sobnVsbCk7Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIFRhc2tMaXN0ICoqKioqKioqKioKLQotCS8vIG5vdGUgYWJzZW5jZSBvZiB2YWxpZGF0aW9uLi4uCi0JcHVibGljIHN0YXRpYyBjbGFzcyBUYXNrTGlzdCBleHRlbmRzIEFic3RyYWN0TW9kZWwgewotCQlwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiB0YXNrTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBU0tfTkFNRVNfTElTVCA9ICJ0YXNrTmFtZXMiOwotCQlwcml2YXRlIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MgPSBuZXcgQXJyYXlMaXN0PFRhc2s+KCk7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQVNLU19MSVNUID0gInRhc2tzIjsKLQkJcHJpdmF0ZSBTdHJpbmcgcHJpb3JpdHlUYXNrTmFtZSA9IG51bGw7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklPUklUWV9UQVNLX05BTUVfUFJPUEVSVFkgPSAicHJpb3JpdHlUYXNrTmFtZSI7Ci0JCXByaXZhdGUgVGFzayBwcmlvcml0eVRhc2sgPSBudWxsOwotCQkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJT1JJVFlfVEFTS19QUk9QRVJUWSA9ICJwcmlvcml0eVRhc2siOwotCQlwdWJsaWMgVGFza0xpc3QoKSB7Ci0JCQlzdXBlcigpOwotCQl9Ci0JCXB1YmxpYyBMaXN0SXRlcmF0b3I8U3RyaW5nPiB0YXNrTmFtZXMoKSB7Ci0JCQlyZXR1cm4gdGhpcy50YXNrTmFtZXMubGlzdEl0ZXJhdG9yKCk7Ci0JCX0KLQkJcHVibGljIEl0ZXJhYmxlPFRhc2s+IGdldFRhc2tzKCkgewotCQkJcmV0dXJuIHRoaXMudGFza3M7Ci0JCX0KLQkJcHVibGljIExpc3RJdGVyYXRvcjxUYXNrPiB0YXNrcygpIHsKLQkJCXJldHVybiB0aGlzLnRhc2tzLmxpc3RJdGVyYXRvcigpOwotCQl9Ci0JCXB1YmxpYyBTdHJpbmcgZ2V0UHJpb3JpdHlUYXNrTmFtZSgpIHsKLQkJCXJldHVybiB0aGlzLnByaW9yaXR5VGFza05hbWU7Ci0JCX0KLQkJcHVibGljIFRhc2sgZ2V0UHJpb3JpdHlUYXNrKCkgewotCQkJcmV0dXJuIHRoaXMucHJpb3JpdHlUYXNrOwotCQl9Ci0JCXB1YmxpYyBUYXNrIGFkZFRhc2soU3RyaW5nIHRhc2tOYW1lKSB7Ci0JCQl0aGlzLmFkZEl0ZW1Ub0xpc3QodGFza05hbWUsIHRoaXMudGFza05hbWVzLCBUQVNLX05BTUVTX0xJU1QpOwotCQkJVGFzayB0YXNrID0gbmV3IFRhc2sodGFza05hbWUpOwotCQkJdGhpcy5hZGRJdGVtVG9MaXN0KHRhc2ssIHRoaXMudGFza3MsIFRBU0tTX0xJU1QpOwotCQkJcmV0dXJuIHRhc2s7Ci0JCX0JCQotCQlwdWJsaWMgdm9pZCByZW1vdmVUYXNrKFN0cmluZyB0YXNrTmFtZSkgewotCQkJaW50IGluZGV4ID0gdGhpcy50YXNrTmFtZXMuaW5kZXhPZih0YXNrTmFtZSk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQlUYXNrIHRhc2sgPSB0aGlzLnRhc2tzLmdldChpbmRleCk7Ci0JCQkJaWYgKHRhc2sgPT0gdGhpcy5wcmlvcml0eVRhc2spIHsKLQkJCQkJdGhpcy5zZXRQcmlvcml0eVRhc2sobnVsbCk7Ci0JCQkJfQotCQkJCS8vIGFzc3VtZSB0aGUgaW5kZXhlcyBtYXRjaC4uLgotCQkJCXRoaXMucmVtb3ZlSXRlbUZyb21MaXN0KGluZGV4LCB0aGlzLnRhc2tOYW1lcywgVEFTS19OQU1FU19MSVNUKTsKLQkJCQl0aGlzLnJlbW92ZUl0ZW1Gcm9tTGlzdChpbmRleCwgdGhpcy50YXNrcywgVEFTS1NfTElTVCk7Ci0JCQl9Ci0JCX0KLQkJcHVibGljIHZvaWQgY2xlYXJUYXNrcygpIHsKLQkJCXRoaXMuc2V0UHJpb3JpdHlUYXNrKG51bGwpOwotCQkJdGhpcy5jbGVhckxpc3QodGhpcy50YXNrTmFtZXMsIFRBU0tfTkFNRVNfTElTVCk7Ci0JCQl0aGlzLmNsZWFyTGlzdCh0aGlzLnRhc2tzLCBUQVNLU19MSVNUKTsKLQkJfQotCQlwcml2YXRlIHZvaWQgc2V0UHJpb3JpdHlUYXNrTmFtZShTdHJpbmcgcHJpb3JpdHlUYXNrTmFtZSkgewotCQkJU3RyaW5nIG9sZCA9IHRoaXMucHJpb3JpdHlUYXNrTmFtZTsKLQkJCXRoaXMucHJpb3JpdHlUYXNrTmFtZSA9IHByaW9yaXR5VGFza05hbWU7Ci0JCQl0aGlzLmZpcmVQcm9wZXJ0eUNoYW5nZWQoUFJJT1JJVFlfVEFTS19OQU1FX1BST1BFUlRZLCBvbGQsIHByaW9yaXR5VGFza05hbWUpOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldFByaW9yaXR5VGFzayhUYXNrIHByaW9yaXR5VGFzaykgewotCQkJVGFzayBvbGQgPSB0aGlzLnByaW9yaXR5VGFzazsKLQkJCXRoaXMucHJpb3JpdHlUYXNrID0gcHJpb3JpdHlUYXNrOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKFBSSU9SSVRZX1RBU0tfUFJPUEVSVFksIG9sZCwgcHJpb3JpdHlUYXNrKTsKLQkJCXRoaXMuc2V0UHJpb3JpdHlUYXNrTmFtZSgocHJpb3JpdHlUYXNrID09IG51bGwpID8gbnVsbCA6IHByaW9yaXR5VGFzay5nZXROYW1lKCkpOwotCQl9Ci0JfQotCi0KLQkvLyAqKioqKioqKioqIFRhc2sgKioqKioqKioqKgotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBUYXNrIGV4dGVuZHMgQWJzdHJhY3RNb2RlbCBpbXBsZW1lbnRzIERpc3BsYXlhYmxlIHsKLQkJcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQkJcHJpdmF0ZSBpbnQgaW5zdGFuY2VDb3VudDsKLQkJcHJpdmF0ZSBzdGF0aWMgaW50IElOU1RBTkNFX0NPVU5UID0gMTsKLQkJcHVibGljIFRhc2soU3RyaW5nIG5hbWUpIHsKLQkJCXRoaXMubmFtZSA9IG5hbWU7Ci0JCQl0aGlzLmluc3RhbmNlQ291bnQgPSBJTlNUQU5DRV9DT1VOVCsrOwotCQl9Ci0JCXB1YmxpYyBTdHJpbmcgZGlzcGxheVN0cmluZygpIHsKLQkJCXJldHVybiB0aGlzLm5hbWUgKyAiOiAiICsgdGhpcy5pbnN0YW5jZUNvdW50OwotCQl9Ci0JCXB1YmxpYyBpbnQgY29tcGFyZVRvKERpc3BsYXlhYmxlIG8pIHsKLQkJCXJldHVybiBERUZBVUxUX0NPTVBBUkFUT1IuY29tcGFyZSh0aGlzLCBvKTsKLQkJfQotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQlyZXR1cm4gdGhpcy5uYW1lOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCU9iamVjdCBvbGQgPSB0aGlzLm5hbWU7Ci0JCQl0aGlzLm5hbWUgPSBuYW1lOwotCQkJdGhpcy5maXJlUHJvcGVydHlDaGFuZ2VkKERJU1BMQVlfU1RSSU5HX1BST1BFUlRZLCBvbGQsIG5hbWUpOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkJcmV0dXJuIHRoaXMuZGlzcGxheVN0cmluZygpOwotCQl9Ci0JfQotCi0JcHVibGljIGludGVyZmFjZSBEaXNwbGF5YWJsZSBleHRlbmRzIE1vZGVsLCBDb21wYXJhYmxlPERpc3BsYXlhYmxlPiB7Ci0JCi0JCVN0cmluZyBkaXNwbGF5U3RyaW5nKCk7Ci0JCQlTdHJpbmcgRElTUExBWV9TVFJJTkdfUFJPUEVSVFkgPSAiZGlzcGxheVN0cmluZyI7Ci0JCi0JCi0JCS8vICoqKioqKioqKiogaGVscGVyIGltcGxlbWVudGF0aW9ucyAqKioqKioqKioqCi0JCi0JCUNvbGxhdG9yIERFRkFVTFRfQ09MTEFUT1IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZSgpOwotCQotCQlDb21wYXJhdG9yPERpc3BsYXlhYmxlPiBERUZBVUxUX0NPTVBBUkFUT1IgPQotCQkJbmV3IENvbXBhcmF0b3I8RGlzcGxheWFibGU+KCkgewotCQkJCXB1YmxpYyBpbnQgY29tcGFyZShEaXNwbGF5YWJsZSBkMSwgRGlzcGxheWFibGUgZDIpIHsKLQkJCQkJLy8gZGlzYWxsb3cgZHVwbGljYXRlcyBiYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkKLQkJCQkJaWYgKGQxID09IGQyKSB7Ci0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJfQotCQotCQkJCQkvLyBmaXJzdCBjb21wYXJlIGRpc3BsYXkgc3RyaW5ncyB1c2luZyB0aGUgZGVmYXVsdCBjb2xsYXRvcgotCQkJCQlpbnQgcmVzdWx0ID0gREVGQVVMVF9DT0xMQVRPUi5jb21wYXJlKGQxLmRpc3BsYXlTdHJpbmcoKSwgZDIuZGlzcGxheVN0cmluZygpKTsKLQkJCQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQkJCQlyZXR1cm4gcmVzdWx0OwotCQkJCQl9Ci0JCi0JCQkJCS8vIHRoZW4gY29tcGFyZSB1c2luZyBvYmplY3QtaWQKLQkJCQkJcmVzdWx0ID0gU3lzdGVtLmlkZW50aXR5SGFzaENvZGUoZDEpIC0gU3lzdGVtLmlkZW50aXR5SGFzaENvZGUoZDIpOwotCQkJCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCQkJCXJldHVybiByZXN1bHQ7Ci0JCQkJCX0KLQkKLQkJCQkJLy8gSXQncyB1bmxpa2VseSB0aGF0IHdlIGdldCB0byB0aGlzIHBvaW50OyBidXQsIGp1c3QgaW4gY2FzZSwgd2Ugd2lsbCByZXR1cm4gLTEuCi0JCQkJCS8vIFVuZm9ydHVuYXRlbHksIHRoaXMgaW50cm9kdWNlcyBzb21lIG1pbGQgdW5wcmVkaWN0YWJpbGl0eSB0byB0aGUgc29ydCBvcmRlcgotCQkJCQkvLyAodW5sZXNzIHRoZSBvYmplY3RzIGFyZSBhbHdheXMgcGFzc2VkIGludG8gdGhpcyBtZXRob2QgaW4gdGhlIHNhbWUgb3JkZXIpLgotCQkJCQlyZXR1cm4gLTE7CQkvLyBpZiBhbGwgZWxzZSBmYWlscywgaW5kaWNhdGUgdGhhdCBvMSA8IG8yCi0JCQkJfQotCQkJCUBPdmVycmlkZQotCQkJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQkJCXJldHVybiAiRGlzcGxheWFibGUuREVGQVVMVF9DT01QQVJBVE9SIjsKLQkJCQl9Ci0JCQl9OwotCQotCX0KLX0KZGlmZiAtLWdpdCBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsaXR5L3N3dC9MaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LmphdmEgYi9qcGEvdGVzdHMvb3JnLmVjbGlwc2UuanB0LnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qcHQvdWkvdGVzdHMvaW50ZXJuYWwvdXRpbGl0eS9zd3QvTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2NhZDVkLi4wMDAwMDAwCi0tLSBhL2pwYS90ZXN0cy9vcmcuZWNsaXBzZS5qcHQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pwdC91aS90ZXN0cy9pbnRlcm5hbC91dGlsaXR5L3N3dC9MaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBPcmFjbGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAsIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgT3JhY2xlIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qcHQudWkudGVzdHMuaW50ZXJuYWwudXRpbGl0eS5zd3Q7Ci0KLWltcG9ydCBqYXZhLnRleHQuQ29sbGF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkFwcGxpY2F0aW9uV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnVpLmludGVybmFsLnV0aWxpdHkuc3d0LlNXVFRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLkNsYXNzVG9vbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwuQ29sbGVjdGlvblRvb2xzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLkFic3RyYWN0TW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuQ29sbGVjdGlvbkFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuTGlzdEFzcGVjdEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlQ29sbGVjdGlvblZhbHVlTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanB0LnV0aWxpdHkuaW50ZXJuYWwubW9kZWwudmFsdWUuU2ltcGxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5LmludGVybmFsLm1vZGVsLnZhbHVlLlNvcnRlZExpc3RWYWx1ZU1vZGVsV3JhcHBlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC5Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5MaXN0VmFsdWVNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qcHQudXRpbGl0eS5tb2RlbC52YWx1ZS5Xcml0YWJsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpwdC51dGlsaXR5Lm1vZGVsLnZhbHVlLldyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIFBsYXkgYXJvdW5kIHdpdGggYSBzZXQgb2YgbGlzdCBib3hlcy4KLSAqLwotQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCi1wdWJsaWMgY2xhc3MgTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdAotCWV4dGVuZHMgQXBwbGljYXRpb25XaW5kb3cKLXsKLQlmaW5hbCBUYXNrTGlzdCB0YXNrTGlzdDsKLQlwcml2YXRlIGZpbmFsIFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFRhc2tMaXN0PiB0YXNrTGlzdEhvbGRlcjsKLQlwcml2YXRlIFRleHQgdGFza1RleHRGaWVsZDsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCQlXaW5kb3cgd2luZG93ID0gbmV3IExpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QoYXJncyk7Ci0JCXdpbmRvdy5zZXRCbG9ja09uT3Blbih0cnVlKTsKLQkJd2luZG93Lm9wZW4oKTsKLQkJRGlzcGxheS5nZXRDdXJyZW50KCkuZGlzcG9zZSgpOwotCQlTeXN0ZW0uZXhpdCgwKTsKLQl9Ci0KLQlwcml2YXRlIExpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFN0cmluZ1tdIGFyZ3MpIHsKLQkJc3VwZXIobnVsbCk7Ci0JCXRoaXMudGFza0xpc3QgPSBuZXcgVGFza0xpc3QoKTsKLQkJdGhpcy50YXNrTGlzdEhvbGRlciA9IG5ldyBTaW1wbGVQcm9wZXJ0eVZhbHVlTW9kZWw8VGFza0xpc3Q+KHRoaXMudGFza0xpc3QpOwotCQl0aGlzLnRhc2tMaXN0LmFkZFRhc2soInN3aW0iKTsKLQkJdGhpcy50YXNrTGlzdC5hZGRUYXNrKCJiaWtlIik7Ci0JCXRoaXMudGFza0xpc3QuYWRkVGFzaygicnVuIik7Ci0JCVRhc2sgcmVzdCA9IHRoaXMudGFza0xpc3QuYWRkVGFzaygicmVzdCIpOwotCQl0aGlzLnRhc2tMaXN0LmFkZFByaW9yaXR5VGFzayhyZXN0KTsKLQkJVGFzayByZXBlYXQgPSB0aGlzLnRhc2tMaXN0LmFkZFRhc2soInJlcGVhdCIpOwotCQl0aGlzLnRhc2tMaXN0LmFkZFByaW9yaXR5VGFzayhyZXBlYXQpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJKChTaGVsbCkgcGFyZW50KS5zZXRUZXh0KENsYXNzVG9vbHMuc2hvcnRDbGFzc05hbWVGb3JPYmplY3QodGhpcykpOwotCQlwYXJlbnQuc2V0U2l6ZSg4MDAsIDQwMCk7Ci0JCUNvbXBvc2l0ZSBtYWluUGFuZWwgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQltYWluUGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQlDb250cm9sIHRhc2tMaXN0UGFuZWwgPSB0aGlzLmJ1aWxkVGFza0xpc3RQYW5lbChtYWluUGFuZWwpOwotCQl0aGlzLmJ1aWxkQ29udHJvbFBhbmVsKG1haW5QYW5lbCwgdGFza0xpc3RQYW5lbCk7Ci0JCXJldHVybiBtYWluUGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBDb250cm9sIGJ1aWxkVGFza0xpc3RQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC0zMCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkUHJpbWl0aXZlVGFza0xpc3RQYW5lbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRPYmplY3RUYXNrTGlzdFBhbmVsKHBhbmVsKTsKLQotCQlyZXR1cm4gcGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkUHJpbWl0aXZlVGFza0xpc3RQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0KLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCk7Ci0JCQlmZC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkVW5zb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwocGFuZWwpOwotCQl0aGlzLmJ1aWxkU3RhbmRhcmRTb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwocGFuZWwpOwotCQl0aGlzLmJ1aWxkQ3VzdG9tU29ydGVkUHJpbWl0aXZlTGlzdFBhbmVsKHBhbmVsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRPYmplY3RUYXNrTGlzdFBhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQotCQlGb3JtRGF0YSBmZCA9IG5ldyBGb3JtRGF0YSgpOwotCQkJZmQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDUwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQkJdGhpcy5idWlsZFVuc29ydGVkT2JqZWN0TGlzdFBhbmVsKHBhbmVsKTsKLQkJdGhpcy5idWlsZFN0YW5kYXJkU29ydGVkT2JqZWN0TGlzdFBhbmVsKHBhbmVsKTsKLQkJdGhpcy5idWlsZEN1c3RvbVNvcnRlZE9iamVjdExpc3RQYW5lbChwYW5lbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkVW5zb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkTGlzdFBhbmVsKHBhcmVudCwgInByaW1pdGl2ZSB1bnNvcnRlZCIsIHRoaXMuYnVpbGRVbnNvcnRlZFByaW1pdGl2ZUxpc3RNb2RlbCgpLCBuZXcgU2ltcGxlQ29sbGVjdGlvblZhbHVlTW9kZWw8U3RyaW5nPigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRTdGFuZGFyZFNvcnRlZFByaW1pdGl2ZUxpc3RQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRMaXN0UGFuZWwocGFyZW50LCAicHJpbWl0aXZlIHNvcnRlZCIsIHRoaXMuYnVpbGRTdGFuZGFyZFNvcnRlZFByaW1pdGl2ZUxpc3RNb2RlbCgpLCBuZXcgU2ltcGxlQ29sbGVjdGlvblZhbHVlTW9kZWw8U3RyaW5nPigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRDdXN0b21Tb3J0ZWRQcmltaXRpdmVMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkTGlzdFBhbmVsKHBhcmVudCwgInByaW1pdGl2ZSByZXZlcnNlIHNvcnRlZCIsIHRoaXMuYnVpbGRDdXN0b21Tb3J0ZWRQcmltaXRpdmVMaXN0TW9kZWwoKSwgbmV3IFNpbXBsZUNvbGxlY3Rpb25WYWx1ZU1vZGVsPFN0cmluZz4oKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkVW5zb3J0ZWRPYmplY3RMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkTGlzdFBhbmVsKHBhcmVudCwgIm9iamVjdCB1bnNvcnRlZCIsIHRoaXMuYnVpbGRVbnNvcnRlZE9iamVjdExpc3RNb2RlbCgpLCB0aGlzLmJ1aWxkUHJpb3JpdHlUYXNrTGlzdEFkYXB0ZXIoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkU3RhbmRhcmRTb3J0ZWRPYmplY3RMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCkgewotCQl0aGlzLmJ1aWxkTGlzdFBhbmVsKHBhcmVudCwgIm9iamVjdCBzb3J0ZWQiLCB0aGlzLmJ1aWxkU3RhbmRhcmRTb3J0ZWRPYmplY3RMaXN0TW9kZWwoKSwgdGhpcy5idWlsZFByaW9yaXR5VGFza0xpc3RBZGFwdGVyKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZEN1c3RvbVNvcnRlZE9iamVjdExpc3RQYW5lbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnVpbGRMaXN0UGFuZWwocGFyZW50LCAib2JqZWN0IHJldmVyc2Ugc29ydGVkIiwgdGhpcy5idWlsZEN1c3RvbVNvcnRlZE9iamVjdExpc3RNb2RlbCgpLCB0aGlzLmJ1aWxkUHJpb3JpdHlUYXNrTGlzdEFkYXB0ZXIoKSk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkVW5zb3J0ZWRQcmltaXRpdmVMaXN0TW9kZWwoKSB7Ci0JCXJldHVybiB0aGlzLmJ1aWxkUHJpbWl0aXZlVGFza0xpc3RBZGFwdGVyKCk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxTdHJpbmc+IGJ1aWxkU3RhbmRhcmRTb3J0ZWRQcmltaXRpdmVMaXN0TW9kZWwoKSB7Ci0JCXJldHVybiBuZXcgU29ydGVkTGlzdFZhbHVlTW9kZWxXcmFwcGVyPFN0cmluZz4odGhpcy5idWlsZFByaW1pdGl2ZVRhc2tMaXN0QWRhcHRlcigpKTsKLQl9Ci0KLQlwcml2YXRlIExpc3RWYWx1ZU1vZGVsPFN0cmluZz4gYnVpbGRDdXN0b21Tb3J0ZWRQcmltaXRpdmVMaXN0TW9kZWwoKSB7Ci0JCXJldHVybiBuZXcgU29ydGVkTGlzdFZhbHVlTW9kZWxXcmFwcGVyPFN0cmluZz4odGhpcy5idWlsZFByaW1pdGl2ZVRhc2tMaXN0QWRhcHRlcigpLCB0aGlzLmJ1aWxkQ3VzdG9tU3RyaW5nQ29tcGFyYXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIExpc3RWYWx1ZU1vZGVsPFRhc2s+IGJ1aWxkVW5zb3J0ZWRPYmplY3RMaXN0TW9kZWwoKSB7Ci0JCXJldHVybiB0aGlzLmJ1aWxkT2JqZWN0VGFza0xpc3RBZGFwdGVyKCk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxUYXNrPiBidWlsZFN0YW5kYXJkU29ydGVkT2JqZWN0TGlzdE1vZGVsKCkgewotCQlyZXR1cm4gbmV3IFNvcnRlZExpc3RWYWx1ZU1vZGVsV3JhcHBlcjxUYXNrPih0aGlzLmJ1aWxkT2JqZWN0VGFza0xpc3RBZGFwdGVyKCkpOwotCX0KLQotCXByaXZhdGUgTGlzdFZhbHVlTW9kZWw8VGFzaz4gYnVpbGRDdXN0b21Tb3J0ZWRPYmplY3RMaXN0TW9kZWwoKSB7Ci0JCXJldHVybiBuZXcgU29ydGVkTGlzdFZhbHVlTW9kZWxXcmFwcGVyPFRhc2s+KHRoaXMuYnVpbGRPYmplY3RUYXNrTGlzdEFkYXB0ZXIoKSwgdGhpcy5idWlsZEN1c3RvbVRhc2tDb21wYXJhdG9yKCkpOwotCX0KLQotCXByaXZhdGUgPEU+IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3QgYnVpbGRMaXN0UGFuZWwoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsLCBMaXN0VmFsdWVNb2RlbDxFPiBtb2RlbCwgV3JpdGFibGVDb2xsZWN0aW9uVmFsdWVNb2RlbDxFPiBzZWxlY3RlZEl0ZW1zTW9kZWwpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCi0JCUxhYmVsIGxpc3RMYWJlbCA9IG5ldyBMYWJlbChwYW5lbCwgU1dULkxFRlQgfCBTV1QuVkVSVElDQUwpOwotCQlsaXN0TGFiZWwuc2V0VGV4dChsYWJlbCk7Ci0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMyk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMjApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1KTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCWxpc3RMYWJlbC5zZXRMYXlvdXREYXRhKGZkKTsKLQotCQlvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0IGxpc3RCb3ggPSBuZXcgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdChwYW5lbCwgU1dULk1VTFRJIHwgU1dULkJPUkRFUik7Ci0JCWZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGlzdExhYmVsKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCWxpc3RCb3guc2V0TGF5b3V0RGF0YShmZCk7Ci0JCVNXVFRvb2xzLmJpbmQobW9kZWwsIHNlbGVjdGVkSXRlbXNNb2RlbCwgbGlzdEJveCk7ICAvLyB1c2UgI3RvU3RyaW5nKCkKLQkJcmV0dXJuIGxpc3RCb3g7Ci0JfQotCi0JcHJpdmF0ZSBDb21wYXJhdG9yPFN0cmluZz4gYnVpbGRDdXN0b21TdHJpbmdDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8U3RyaW5nPigpIHsKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgczEsIFN0cmluZyBzMikgewotCQkJCXJldHVybiBzMi5jb21wYXJlVG8oczEpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgQ29tcGFyYXRvcjxUYXNrPiBidWlsZEN1c3RvbVRhc2tDb21wYXJhdG9yKCkgewotCQlyZXR1cm4gbmV3IENvbXBhcmF0b3I8VGFzaz4oKSB7Ci0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVGFzayB0bzEsIFRhc2sgdG8yKSB7Ci0JCQkJcmV0dXJuIHRvMi5jb21wYXJlVG8odG8xKTsKLQkJCX0KLQkJfTsKLQl9Ci0KLQlwcml2YXRlIExpc3RWYWx1ZU1vZGVsPFN0cmluZz4gYnVpbGRQcmltaXRpdmVUYXNrTGlzdEFkYXB0ZXIoKSB7Ci0JCXJldHVybiBuZXcgTGlzdEFzcGVjdEFkYXB0ZXI8VGFza0xpc3QsIFN0cmluZz4odGhpcy50YXNrTGlzdEhvbGRlciwgVGFza0xpc3QuVEFTS19OQU1FU19MSVNUKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBMaXN0SXRlcmF0b3I8U3RyaW5nPiBsaXN0SXRlcmF0b3JfKCkgewotCQkJCXJldHVybiB0aGlzLnN1YmplY3QudGFza05hbWVzKCk7Ci0JCQl9Ci0JCX07Ci0JfQotCi0JcHJpdmF0ZSBMaXN0VmFsdWVNb2RlbDxUYXNrPiBidWlsZE9iamVjdFRhc2tMaXN0QWRhcHRlcigpIHsKLQkJcmV0dXJuIG5ldyBMaXN0QXNwZWN0QWRhcHRlcjxUYXNrTGlzdCwgVGFzaz4odGhpcy50YXNrTGlzdEhvbGRlciwgVGFza0xpc3QuVEFTS1NfTElTVCkgewotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgTGlzdEl0ZXJhdG9yPFRhc2s+IGxpc3RJdGVyYXRvcl8oKSB7Ci0JCQkJcmV0dXJuIHRoaXMuc3ViamVjdC50YXNrcygpOwotCQkJfQotCQl9OwotCX0KLQotCXByaXZhdGUgV3JpdGFibGVDb2xsZWN0aW9uVmFsdWVNb2RlbDxUYXNrPiBidWlsZFByaW9yaXR5VGFza0xpc3RBZGFwdGVyKCkgewotCQlyZXR1cm4gbmV3IFByaW9yaXR5VGFza0xpc3RBZGFwdGVyKHRoaXMudGFza0xpc3RIb2xkZXIpOwotCX0KLQotCXN0YXRpYyBjbGFzcyBQcmlvcml0eVRhc2tMaXN0QWRhcHRlcgotCQlleHRlbmRzIENvbGxlY3Rpb25Bc3BlY3RBZGFwdGVyPFRhc2tMaXN0LCBUYXNrPgotCQlpbXBsZW1lbnRzIFdyaXRhYmxlQ29sbGVjdGlvblZhbHVlTW9kZWw8VGFzaz4KLQl7Ci0JCVByaW9yaXR5VGFza0xpc3RBZGFwdGVyKFdyaXRhYmxlUHJvcGVydHlWYWx1ZU1vZGVsPFRhc2tMaXN0PiB0YXNrTGlzdEhvbGRlcikgewotCQkJc3VwZXIodGFza0xpc3RIb2xkZXIsIFRhc2tMaXN0LlBSSU9SSVRZX1RBU0tTX0NPTExFQ1RJT04pOwotCQl9Ci0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgSXRlcmF0b3I8VGFzaz4gaXRlcmF0b3JfKCkgewotCQkJcmV0dXJuIHRoaXMuc3ViamVjdC5wcmlvcml0eVRhc2tzKCk7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0VmFsdWVzKEl0ZXJhYmxlPFRhc2s+IHZhbHVlcykgewotCQkJdGhpcy5zdWJqZWN0LnNldFByaW9yaXR5VGFza3ModmFsdWVzKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBidWlsZENvbnRyb2xQYW5lbChDb21wb3NpdGUgcGFyZW50LCBDb250cm9sIHRhc2tMaXN0UGFuZWwpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0YXNrTGlzdFBhbmVsKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKLQkJQ29udHJvbCBtaXNjID0gdGhpcy5idWlsZE1pc2NUYXNrUGFuZWwocGFuZWwpOwotCQl0aGlzLmJ1aWxkQWRkUmVtb3ZlVGFza1BhbmVsKHBhbmVsLCBtaXNjKTsKLQl9Ci0KLQkvLyBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gYXNzb2NpYXRlIGFuIEFDSSB3aXRoIGZvcm0gZGF0YT8KLQlwcml2YXRlIENvbnRyb2wgYnVpbGRNaXNjVGFza1BhbmVsKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIC00MDApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkQ2xlYXJMaXN0QUNJKCkuZmlsbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRDbGVhck1vZGVsQUNJKCkuZmlsbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRSZXN0b3JlTW9kZWxBQ0koKS5maWxsKHBhbmVsKTsKLQkJdGhpcy5idWlsZEFkZFByaW9yaXR5VGFza0FDSSgpLmZpbGwocGFuZWwpOwotCQl0aGlzLmJ1aWxkUmVtb3ZlUHJpb3JpdHlUYXNrQUNJKCkuZmlsbChwYW5lbCk7Ci0JCXRoaXMuYnVpbGRDbGVhclByaW9yaXR5VGFza3NBQ0koKS5maWxsKHBhbmVsKTsKLQkJcmV0dXJuIHBhbmVsOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZENsZWFyTGlzdEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIGxpc3QiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlMaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMuY2xlYXJUYXNrcygpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoImNsZWFyIGFsbCB0aGUgdGFza3MiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkQ2xlYXJNb2RlbEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImNsZWFyIG1vZGVsIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC50aGlzLmNsZWFyTW9kZWwoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJjbGVhciB0aGUgdGFzayBsaXN0IG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZFJlc3RvcmVNb2RlbEFDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oInJlc3RvcmUgbW9kZWwiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlMaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucmVzdG9yZU1vZGVsKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicmVzdG9yZSB0aGUgdGFzayBsaXN0IG1vZGVsIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCXByaXZhdGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSBidWlsZEFkZFByaW9yaXR5VGFza0FDSSgpIHsKLQkJQWN0aW9uIGFjdGlvbiA9IG5ldyBBY3Rpb24oImFkZCBwcmlvcml0eSIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5hZGRQcmlvcml0eVRhc2soKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJhZGQgYSB0YXNrIHRvIHRoZSBwcmlvcml0eSB0YXNrcyIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZW1vdmVQcmlvcml0eVRhc2tBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJyZW1vdmUgcHJpb3JpdHkiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlMaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucmVtb3ZlUHJpb3JpdHlUYXNrKCk7Ci0JCQl9Ci0JCX07Ci0JCWFjdGlvbi5zZXRUb29sVGlwVGV4dCgicmVtb3ZlIGEgdGFzayBmcm9tIHRoZSBwcmlvcml0eSB0YXNrcyIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRDbGVhclByaW9yaXR5VGFza3NBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJjbGVhciBwcmlvcml0eSIsIElBY3Rpb24uQVNfUFVTSF9CVVRUT04pIHsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCUxpc3RCb3hNb2RlbEJpbmRpbmdVSVRlc3QudGhpcy5jbGVhclByaW9yaXR5VGFza3MoKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJjbGVhciB0aGUgcHJpb3JpdHkgdGFza3MiKTsKLQkJcmV0dXJuIG5ldyBBY3Rpb25Db250cmlidXRpb25JdGVtKGFjdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQWRkUmVtb3ZlVGFza1BhbmVsKENvbXBvc2l0ZSBwYXJlbnQsIENvbnRyb2wgY2xlYXJCdXR0b24pIHsKLQkJQ29tcG9zaXRlIHBhbmVsID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGNsZWFyQnV0dG9uKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOwotCQlDb250cm9sIGFkZEJ1dHRvbiA9IHRoaXMuYnVpbGRBZGRCdXR0b24ocGFuZWwpOwotCQlDb250cm9sIHJlbW92ZUJ1dHRvbiA9IHRoaXMuYnVpbGRSZW1vdmVCdXR0b24ocGFuZWwpOwotCQl0aGlzLmJ1aWxkVGFza1RleHRGaWVsZChwYW5lbCwgYWRkQnV0dG9uLCByZW1vdmVCdXR0b24pOwotCX0KLQotCS8vIGlzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBhc3NvY2lhdGUgYW4gQUNJIHdpdGggZm9ybSBkYXRhPwotCXByaXZhdGUgQ29udHJvbCBidWlsZEFkZEJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJCWZkLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7Ci0JCXBhbmVsLnNldExheW91dERhdGEoZmQpOwotCi0JCXBhbmVsLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKLQkJdGhpcy5idWlsZEFkZEFDSSgpLmZpbGwocGFuZWwpOwotCQlyZXR1cm4gcGFuZWw7Ci0JfQotCi0JcHJpdmF0ZSBBY3Rpb25Db250cmlidXRpb25JdGVtIGJ1aWxkQWRkQUNJKCkgewotCQlBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiYWRkIiwgSUFjdGlvbi5BU19QVVNIX0JVVFRPTikgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJTGlzdEJveE1vZGVsQmluZGluZ1VJVGVzdC50aGlzLmFkZFRhc2soKTsKLQkJCX0KLQkJfTsKLQkJYWN0aW9uLnNldFRvb2xUaXBUZXh0KCJhZGQgYSB0YXNrIHdpdGggdGhlIG5hbWUgaW4gdGhlIGVudHJ5IGZpZWxkIik7Ci0JCXJldHVybiBuZXcgQWN0aW9uQ29udHJpYnV0aW9uSXRlbShhY3Rpb24pOwotCX0KLQotCS8vIGlzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBhc3NvY2lhdGUgYW4gQUNJIHdpdGggZm9ybSBkYXRhPwotCXByaXZhdGUgQ29udHJvbCBidWlsZFJlbW92ZUJ1dHRvbihDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBwYW5lbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUZvcm1EYXRhIGZkID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQlmZC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCk7Ci0JCQlmZC5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJCWZkLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAtNTApOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwKTsKLQkJcGFuZWwuc2V0TGF5b3V0RGF0YShmZCk7Ci0KLQkJcGFuZWwuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOwotCQl0aGlzLmJ1aWxkUmVtb3ZlQUNJKCkuZmlsbChwYW5lbCk7Ci0JCXJldHVybiBwYW5lbDsKLQl9Ci0KLQlwcml2YXRlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0gYnVpbGRSZW1vdmVBQ0koKSB7Ci0JCUFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCJyZW1vdmUiLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlMaXN0Qm94TW9kZWxCaW5kaW5nVUlUZXN0LnRoaXMucmVtb3ZlVGFzaygpOwotCQkJfQotCQl9OwotCQlhY3Rpb24uc2V0VG9vbFRpcFRleHQoInJlbW92ZSB0aGUgdGFzayB3aXRoIHRoZSBuYW1lIGluIHRoZSBlbnRyeSBmaWVsZCIpOwotCQlyZXR1cm4gbmV3IEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0oYWN0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVpbGRUYXNrVGV4dEZpZWxkKENvbXBvc2l0ZSBwYXJlbnQsIENvbnRyb2wgYWRkQnV0dG9uLCBDb250cm9sIHJlbW92ZUJ1dHRvbikgewotCQl0aGlzLnRhc2tUZXh0RmllbGQgPSBuZXcgVGV4dChwYXJlbnQsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsKLQkJRm9ybURhdGEgZmQgPSBuZXcgRm9ybURhdGEoKTsKLQkJCWZkLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwKTsKLQkJCWZkLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDApOwotCQkJZmQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChhZGRCdXR0b24pOwotCQkJZmQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocmVtb3ZlQnV0dG9uKTsKLQkJdGhpcy50YXNrVGV4dEZpZWxkLnNldExheW91dERhdGEoZmQpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIHRhc2tUZXh0RmllbGRUZXh0KCkgewotCQlyZXR1cm4gdGhpcy50YXNrVGV4dEZpZWxkLmdldFRleHQoKTsKLQl9Ci0KLQl2b2lkIGFkZFRhc2soKSB7Ci0JCVN0cmluZyB0YXNrVGV4dCA9IHRoaXMudGFza1RleHRGaWVsZFRleHQoKTsKLQkJaWYgKHRhc2tUZXh0Lmxlbmd0aCgpICE9IDApIHsKLQkJCXRoaXMudGFza0xpc3QuYWRkVGFzayh0YXNrVGV4dCk7Ci0JCX0KLQl9Ci0KLQl2b2lkIHJlbW92ZVRhc2soKSB7Ci0JCVN0cmluZyB0YXNrID0gdGhpcy50YXNrVGV4dEZpZWxkVGV4dCgpOwotCQlpZiAodGFzay5sZW5ndGgoKSAhPSAwKSB7Ci0JCQl0aGlzLnRhc2tMaXN0LnJlbW92ZVRhc2sodGFzayk7Ci0JCX0KLQl9Ci0KLQl2b2lkIGNsZWFyVGFza3MoKSB7Ci0JCXRoaXMudGFza0xpc3QuY2xlYXJUYXNrcygpOwotCX0KLQotCXZvaWQgY2xlYXJNb2RlbCgpIHsKLQkJdGhpcy50YXNrTGlzdEhvbGRlci5zZXRWYWx1ZShudWxsKTsKLQl9Ci0KLQl2b2lkIHJlc3RvcmVNb2RlbCgpIHsKLQkJdGhpcy50YXNrTGlzdEhvbGRlci5zZXRWYWx1ZSh0aGlzLnRhc2tMaXN0KTsKLQl9Ci0KLQl2b2lkIGFkZFByaW9yaXR5VGFzaygpIHsKLQkJSXRlcmF0b3I8VGFzaz4gdGFza3MgPSB0aGlzLnRhc2tMaXN0LnRhc2tzKCk7Ci0JCXdoaWxlICh0YXNrcy5oYXNOZXh0KCkpIHsKLQkJCWlmICh0aGlzLnRhc2tMaXN0LmFkZFByaW9yaXR5VGFzayh0YXNrcy5uZXh0KCkpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCByZW1vdmVQcmlvcml0eVRhc2soKSB7Ci0JCUl0ZXJhdG9yPFRhc2s+IHBUYXNrcyA9IHRoaXMudGFza0xpc3QucHJpb3JpdHlUYXNrcygpOwotCQlpZiAocFRhc2tzLmhhc05leHQoKSkgewotCQkJdGhpcy50YXNrTGlzdC5yZW1vdmVQcmlvcml0eVRhc2socFRhc2tzLm5leHQoKSk7Ci0JCX0KLQl9Ci0KLQl2b2lkIGNsZWFyUHJpb3JpdHlUYXNrcygpIHsKLQkJdGhpcy50YXNrTGlzdC5jbGVhclByaW9yaXR5VGFza3MoKTsKLQl9Ci0KLQotCS8vICoqKioqKioqKiogVGFza0xpc3QgKioqKioqKioqKgotCi0JLy8gbm90ZSBhYnNlbmNlIG9mIHZhbGlkYXRpb24uLi4KLQlwdWJsaWMgc3RhdGljIGNsYXNzIFRhc2tMaXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbCB7Ci0JCXByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IHRhc2tOYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFTS19OQU1FU19MSVNUID0gInRhc2tOYW1lcyI7Ci0JCXByaXZhdGUgZmluYWwgTGlzdDxUYXNrPiB0YXNrcyA9IG5ldyBBcnJheUxpc3Q8VGFzaz4oKTsKLQkJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBU0tTX0xJU1QgPSAidGFza3MiOwotCQlwcml2YXRlIGZpbmFsIENvbGxlY3Rpb248VGFzaz4gcHJpb3JpdHlUYXNrcyA9IG5ldyBIYXNoU2V0PFRhc2s+KCk7Ci0JCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUklPUklUWV9UQVNLU19DT0xMRUNUSU9OID0gInByaW9yaXR5VGFza3MiOwotCQlwdWJsaWMgVGFza0xpc3QoKSB7Ci0JCQlzdXBlcigpOwotCQl9Ci0JCXB1YmxpYyBMaXN0SXRlcmF0b3I8U3RyaW5nPiB0YXNrTmFtZXMoKSB7Ci0JCQlyZXR1cm4gdGhpcy50YXNrTmFtZXMubGlzdEl0ZXJhdG9yKCk7Ci0JCX0KLQkJcHVibGljIExpc3RJdGVyYXRvcjxUYXNrPiB0YXNrcygpIHsKLQkJCXJldHVybiB0aGlzLnRhc2tzLmxpc3RJdGVyYXRvcigpOwotCQl9Ci0JCXB1YmxpYyBJdGVyYXRvcjxUYXNrPiBwcmlvcml0eVRhc2tzKCkgewotCQkJcmV0dXJuIHRoaXMucHJpb3JpdHlUYXNrcy5pdGVyYXRvcigpOwotCQl9Ci0JCXB1YmxpYyBUYXNrIGFkZFRhc2soU3RyaW5nIHRhc2tOYW1lKSB7Ci0JCQl0aGlzLmFkZEl0ZW1Ub0xpc3QodGFza05hbWUsIHRoaXMudGFza05hbWVzLCBUQVNLX05BTUVTX0xJU1QpOwotCQkJVGFzayB0YXNrID0gbmV3IFRhc2sodGFza05hbWUpOwotCQkJdGhpcy5hZGRJdGVtVG9MaXN0KHRhc2ssIHRoaXMudGFza3MsIFRBU0tTX0xJU1QpOwotCQkJcmV0dXJuIHRhc2s7Ci0JCX0JCQotCQlwdWJsaWMgdm9pZCByZW1vdmVUYXNrKFN0cmluZyB0YXNrTmFtZSkgewotCQkJaW50IGluZGV4ID0gdGhpcy50YXNrTmFtZXMuaW5kZXhPZih0YXNrTmFtZSk7Ci0JCQlpZiAoaW5kZXggIT0gLTEpIHsKLQkJCQl0aGlzLnJlbW92ZUl0ZW1Gcm9tTGlzdChpbmRleCwgdGhpcy50YXNrTmFtZXMsIFRBU0tfTkFNRVNfTElTVCk7Ci0JCQkJLy8gYXNzdW1lIHRoZSBpbmRleGVzIG1hdGNoLi4uCi0JCQkJVGFzayByZW1vdmVkVGFzayA9IHRoaXMucmVtb3ZlSXRlbUZyb21MaXN0KGluZGV4LCB0aGlzLnRhc2tzLCBUQVNLU19MSVNUKTsKLQkJCQl0aGlzLnJlbW92ZUl0ZW1Gcm9tQ29sbGVjdGlvbihyZW1vdmVkVGFzaywgdGhpcy5wcmlvcml0eVRhc2tzLCBQUklPUklUWV9UQVNLU19DT0xMRUNUSU9OKTsKLQkJCX0KLQkJfQotCQlwdWJsaWMgdm9pZCBjbGVhclRhc2tzKCkgewotCQkJdGhpcy5jbGVhckNvbGxlY3Rpb24odGhpcy5wcmlvcml0eVRhc2tzLCBQUklPUklUWV9UQVNLU19DT0xMRUNUSU9OKTsKLQkJCXRoaXMuY2xlYXJMaXN0KHRoaXMudGFza05hbWVzLCBUQVNLX05BTUVTX0xJU1QpOwotCQkJdGhpcy5jbGVhckxpc3QodGhpcy50YXNrcywgVEFTS1NfTElTVCk7Ci0JCX0KLQkJcHVibGljIGJvb2xlYW4gYWRkUHJpb3JpdHlUYXNrKFRhc2sgdGFzaykgewotCQkJcmV0dXJuIHRoaXMuYWRkSXRlbVRvQ29sbGVjdGlvbih0YXNrLCB0aGlzLnByaW9yaXR5VGFza3MsIFBSSU9SSVRZX1RBU0tTX0NPTExFQ1RJT04pOwotCQl9CQkKLQkJcHVibGljIHZvaWQgcmVtb3ZlUHJpb3JpdHlUYXNrKFRhc2sgdGFzaykgewotCQkJdGhpcy5yZW1vdmVJdGVtRnJvbUNvbGxlY3Rpb24odGFzaywgdGhpcy5wcmlvcml0eVRhc2tzLCBQUklPUklUWV9UQVNLU19DT0xMRUNUSU9OKTsKLQkJfQotCQlwdWJsaWMgdm9pZCBjbGVhclByaW9yaXR5VGFza3MoKSB7Ci0JCQl0aGlzLmNsZWFyQ29sbGVjdGlvbih0aGlzLnByaW9yaXR5VGFza3MsIFBSSU9SSVRZX1RBU0tTX0NPTExFQ1RJT04pOwotCQl9Ci0JCXB1YmxpYyB2b2lkIHNldFByaW9yaXR5VGFza3MoSXRlcmFibGU8VGFzaz4gdGFza3MpIHsKLQkJCXRoaXMucHJpb3JpdHlUYXNrcy5jbGVhcigpOwotCQkJQ29sbGVjdGlvblRvb2xzLmFkZEFsbCh0aGlzLnByaW9yaXR5VGFza3MsIHRhc2tzKTsKLQkJCXRoaXMuZmlyZUNvbGxlY3Rpb25DaGFuZ2VkKFBSSU9SSVRZX1RBU0tTX0NPTExFQ1RJT04sIHRoaXMucHJpb3JpdHlUYXNrcyk7Ci0JCX0KLQl9Ci0KLQotCS8vICoqKioqKioqKiogVGFzayAqKioqKioqKioqCi0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIFRhc2sgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsIGltcGxlbWVudHMgRGlzcGxheWFibGUgewotCQlwcml2YXRlIFN0cmluZyBuYW1lOwotCQlwcml2YXRlIGludCBpbnN0YW5jZUNvdW50OwotCQlwcml2YXRlIHN0YXRpYyBpbnQgSU5TVEFOQ0VfQ09VTlQgPSAxOwotCQlwdWJsaWMgVGFzayhTdHJpbmcgbmFtZSkgewotCQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJCXRoaXMuaW5zdGFuY2VDb3VudCA9IElOU1RBTkNFX0NPVU5UKys7Ci0JCX0KLQkJcHVibGljIFN0cmluZyBkaXNwbGF5U3RyaW5nKCkgewotCQkJcmV0dXJuIHRoaXMubmFtZSArICI6ICIgKyB0aGlzLmluc3RhbmNlQ291bnQ7Ci0JCX0KLQkJcHVibGljIGludCBjb21wYXJlVG8oRGlzcGxheWFibGUgbykgewotCQkJcmV0dXJuIERFRkFVTFRfQ09NUEFSQVRPUi5jb21wYXJlKHRoaXMsIG8pOwotCQl9Ci0JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCXJldHVybiB0aGlzLm5hbWU7Ci0JCX0KLQkJcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotCQkJT2JqZWN0IG9sZCA9IHRoaXMubmFtZTsKLQkJCXRoaXMubmFtZSA9IG5hbWU7Ci0JCQl0aGlzLmZpcmVQcm9wZXJ0eUNoYW5nZWQoRElTUExBWV9TVFJJTkdfUFJPUEVSVFksIG9sZCwgbmFtZSk7Ci0JCX0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlyZXR1cm4gdGhpcy5kaXNwbGF5U3RyaW5nKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgaW50ZXJmYWNlIERpc3BsYXlhYmxlIGV4dGVuZHMgTW9kZWwsIENvbXBhcmFibGU8RGlzcGxheWFibGU+IHsKLQkKLQkJU3RyaW5nIGRpc3BsYXlTdHJpbmcoKTsKLQkJCVN0cmluZyBESVNQTEFZX1NUUklOR19QUk9QRVJUWSA9ICJkaXNwbGF5U3RyaW5nIjsKLQkKLQkKLQkJLy8gKioqKioqKioqKiBoZWxwZXIgaW1wbGVtZW50YXRpb25zICoqKioqKioqKioKLQkKLQkJQ29sbGF0b3IgREVGQVVMVF9DT0xMQVRPUiA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7Ci0JCi0JCUNvbXBhcmF0b3I8RGlzcGxheWFibGU+IERFRkFVTFRfQ09NUEFSQVRPUiA9Ci0JCQluZXcgQ29tcGFyYXRvcjxEaXNwbGF5YWJsZT4oKSB7Ci0JCQkJcHVibGljIGludCBjb21wYXJlKERpc3BsYXlhYmxlIGQxLCBEaXNwbGF5YWJsZSBkMikgewotCQkJCQkvLyBkaXNhbGxvdyBkdXBsaWNhdGVzIGJhc2VkIG9uIG9iamVjdCBpZGVudGl0eQotCQkJCQlpZiAoZDEgPT0gZDIpIHsKLQkJCQkJCXJldHVybiAwOwotCQkJCQl9Ci0JCi0JCQkJCS8vIGZpcnN0IGNvbXBhcmUgZGlzcGxheSBzdHJpbmdzIHVzaW5nIHRoZSBkZWZhdWx0IGNvbGxhdG9yCi0JCQkJCWludCByZXN1bHQgPSBERUZBVUxUX0NPTExBVE9SLmNvbXBhcmUoZDEuZGlzcGxheVN0cmluZygpLCBkMi5kaXNwbGF5U3RyaW5nKCkpOwotCQkJCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCQkJCXJldHVybiByZXN1bHQ7Ci0JCQkJCX0KLQkKLQkJCQkJLy8gdGhlbiBjb21wYXJlIHVzaW5nIG9iamVjdC1pZAotCQkJCQlyZXN1bHQgPSBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShkMSkgLSBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShkMik7Ci0JCQkJCWlmIChyZXN1bHQgIT0gMCkgewotCQkJCQkJcmV0dXJuIHJlc3VsdDsKLQkJCQkJfQotCQotCQkJCQkvLyBJdCdzIHVubGlrZWx5IHRoYXQgd2UgZ2V0IHRvIHRoaXMgcG9pbnQ7IGJ1dCwganVzdCBpbiBjYXNlLCB3ZSB3aWxsIHJldHVybiAtMS4KLQkJCQkJLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBpbnRyb2R1Y2VzIHNvbWUgbWlsZCB1bnByZWRpY3RhYmlsaXR5IHRvIHRoZSBzb3J0IG9yZGVyCi0JCQkJCS8vICh1bmxlc3MgdGhlIG9iamVjdHMgYXJlIGFsd2F5cyBwYXNzZWQgaW50byB0aGlzIG1ldGhvZCBpbiB0aGUgc2FtZSBvcmRlcikuCi0JCQkJCXJldHVybiAtMTsJCS8vIGlmIGFsbCBlbHNlIGZhaWxzLCBpbmRpY2F0ZSB0aGF0IG8xIDwgbzIKLQkJCQl9Ci0JCQkJQE92ZXJyaWRlCi0JCQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQkJCQkJcmV0dXJuICJEaXNwbGF5YWJsZS5ERUZBVUxUX0NPTVBBUkFUT1IiOwotCQkJCX0KLQkJCX07Ci0JCi0JfQotfQo=